arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/txselector/txselector_test.go
txselector/txselector_test.goRaw
  1package txselector
  2
  3import (
  4	"fmt"
  5	"math/big"
  6	"testing"
  7
  8	ethCommon "github.com/ethereum/go-ethereum/common"
  9	"github.com/hermeznetwork/hermez-node/tx-selector/common"
 10	"github.com/hermeznetwork/hermez-node/tx-selector/mock"
 11	"github.com/stretchr/testify/assert"
 12)
 13
 14func initMockDB() *mock.MockDB {
 15	m := mock.New()
 16
 17	txs := []common.Tx{
 18		{
 19			FromEthAddr:     ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
 20			ToEthAddr:       ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
 21			TokenID:         1,
 22			Nonce:           1,
 23			UserFeeAbsolute: 1,
 24		},
 25		{
 26			FromEthAddr:     ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
 27			ToEthAddr:       ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
 28			TokenID:         1,
 29			Nonce:           2,
 30			UserFeeAbsolute: 3,
 31		},
 32		{
 33			FromEthAddr:     ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
 34			ToEthAddr:       ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
 35			TokenID:         1,
 36			Nonce:           4,
 37			UserFeeAbsolute: 6,
 38		},
 39		{
 40			FromEthAddr:     ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
 41			ToEthAddr:       ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
 42			TokenID:         1,
 43			Nonce:           4,
 44			UserFeeAbsolute: 4,
 45		},
 46		{
 47			FromEthAddr:     ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
 48			ToEthAddr:       ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
 49			TokenID:         1,
 50			Nonce:           1,
 51			UserFeeAbsolute: 4,
 52		},
 53		{
 54			FromEthAddr:     ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
 55			ToEthAddr:       ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
 56			TokenID:         1,
 57			Nonce:           2,
 58			UserFeeAbsolute: 3,
 59		},
 60		{
 61			FromEthAddr:     ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
 62			ToEthAddr:       ethCommon.HexToAddress("0x859c3d0d5aD917F146fF6654A4C676f1ddeCE26a"),
 63			TokenID:         1,
 64			Nonce:           3,
 65			UserFeeAbsolute: 5,
 66		},
 67		{
 68			// this tx will not be selected, as the ToEthAddr does not have an account
 69			FromEthAddr:     ethCommon.HexToAddress("0x6950E814B82d276DB5Fa7f34253CfeE1387fe03E"),
 70			ToEthAddr:       ethCommon.HexToAddress("0x4a2CFDF534725D8D6e07Af97B237Fff19BDb3c93"),
 71			TokenID:         1,
 72			Nonce:           4,
 73			UserFeeAbsolute: 5,
 74		},
 75	}
 76
 77	// n := 0
 78	nBatch := 0
 79	for i := 0; i < len(txs); i++ {
 80		// for i := 0; i < nBatch; i++ {
 81		//         for j := 0; j < len(txs)/nBatch; j++ {
 82		// store tx
 83		m.AddTx(uint64(nBatch), txs[i])
 84
 85		// store account if not yet
 86		accountID := getAccountID(txs[i].FromEthAddr, txs[i].TokenID)
 87		if _, ok := m.AccountDB[accountID]; !ok {
 88			account := common.Account{
 89				EthAddr: txs[i].FromEthAddr,
 90				TokenID: txs[i].TokenID,
 91				Nonce:   0,
 92				Balance: big.NewInt(0),
 93			}
 94			m.AccountDB[accountID] = account
 95		}
 96		// n++
 97		// }
 98	}
 99
100	return m
101}
102
103func TestGetL2TxSelection(t *testing.T) {
104	mockDB := initMockDB()
105	txsel := NewTxSelector(mockDB, 3, 3, 3)
106
107	txs, err := txsel.GetL2TxSelection(0)
108	assert.Nil(t, err)
109	for _, tx := range txs {
110		fmt.Println(tx.FromEthAddr.String(), tx.ToEthAddr.String(), tx.UserFeeAbsolute)
111	}
112	assert.Equal(t, 3, len(txs))
113	assert.Equal(t, uint64(6), txs[0].UserFeeAbsolute)
114	assert.Equal(t, uint64(5), txs[1].UserFeeAbsolute)
115	assert.Equal(t, uint64(4), txs[2].UserFeeAbsolute)
116}