arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/db/statedb/txprocessors_test.go
db/statedb/txprocessors_test.goRaw
  1package statedb
  2
  3import (
  4	"io/ioutil"
  5	"testing"
  6
  7	"github.com/hermeznetwork/hermez-node/common"
  8	"github.com/hermeznetwork/hermez-node/test/transakcio"
  9	"github.com/stretchr/testify/assert"
 10	"github.com/stretchr/testify/require"
 11)
 12
 13func TestProcessTxsSynchronizer(t *testing.T) {
 14	// TODO once TTGL is updated, use the blockchain L2Tx (not PoolL2Tx) for
 15	// the Synchronizer tests
 16
 17	dir, err := ioutil.TempDir("", "tmpdb")
 18	require.Nil(t, err)
 19
 20	sdb, err := NewStateDB(dir, TypeSynchronizer, 32)
 21	assert.Nil(t, err)
 22
 23	// generate test transactions from test.SetTest0 code
 24	tc := transakcio.NewTestContext()
 25	blocks, err := tc.GenerateBlocks(transakcio.SetBlockchain0)
 26	require.Nil(t, err)
 27
 28	assert.Equal(t, 29, len(blocks[0].Batches[0].L1UserTxs))
 29	assert.Equal(t, 0, len(blocks[0].Batches[0].L1CoordinatorTxs))
 30	assert.Equal(t, 21, len(blocks[0].Batches[0].L2Txs))
 31	assert.Equal(t, 1, len(blocks[0].Batches[1].L1UserTxs))
 32	assert.Equal(t, 1, len(blocks[0].Batches[1].L1CoordinatorTxs))
 33	assert.Equal(t, 59, len(blocks[0].Batches[1].L2Txs))
 34	assert.Equal(t, 9, len(blocks[0].Batches[2].L1UserTxs))
 35	assert.Equal(t, 1, len(blocks[0].Batches[2].L1CoordinatorTxs))
 36	assert.Equal(t, 8, len(blocks[0].Batches[2].L2Txs))
 37
 38	// use first batch
 39	l2Txs := common.L2TxsToPoolL2Txs(blocks[0].Batches[0].L2Txs)
 40	_, exitInfos, err := sdb.ProcessTxs(blocks[0].Batches[0].L1UserTxs, blocks[0].Batches[0].L1CoordinatorTxs, l2Txs)
 41	require.Nil(t, err)
 42	// TODO once TTGL is updated, add a check that a input poolL2Tx with
 43	// Nonce & TokenID =0, after ProcessTxs call has the expected value
 44
 45	assert.Equal(t, 0, len(exitInfos))
 46	acc, err := sdb.GetAccount(common.Idx(256))
 47	assert.Nil(t, err)
 48	assert.Equal(t, "28", acc.Balance.String())
 49
 50	// use second batch
 51	l2Txs = common.L2TxsToPoolL2Txs(blocks[0].Batches[1].L2Txs)
 52	_, exitInfos, err = sdb.ProcessTxs(blocks[0].Batches[1].L1UserTxs, blocks[0].Batches[1].L1CoordinatorTxs, l2Txs)
 53	require.Nil(t, err)
 54	assert.Equal(t, 5, len(exitInfos))
 55	acc, err = sdb.GetAccount(common.Idx(256))
 56	require.Nil(t, err)
 57	assert.Equal(t, "48", acc.Balance.String())
 58
 59	// use third batch
 60	l2Txs = common.L2TxsToPoolL2Txs(blocks[0].Batches[2].L2Txs)
 61	_, exitInfos, err = sdb.ProcessTxs(blocks[0].Batches[2].L1UserTxs, blocks[0].Batches[2].L1CoordinatorTxs, l2Txs)
 62	require.Nil(t, err)
 63	assert.Equal(t, 1, len(exitInfos))
 64	acc, err = sdb.GetAccount(common.Idx(256))
 65	assert.Nil(t, err)
 66	assert.Equal(t, "73", acc.Balance.String())
 67}
 68
 69/*
 70WIP
 71
 72func TestProcessTxsBatchBuilder(t *testing.T) {
 73	dir, err := ioutil.TempDir("", "tmpdb")
 74	require.Nil(t, err)
 75
 76	sdb, err := NewStateDB(dir, TypeBatchBuilder, 32)
 77	assert.Nil(t, err)
 78
 79	// generate test transactions from test.SetTest0 code
 80	tc := transakcio.NewTestContext()
 81	blocks := tc.GenerateBlocks(transakcio.SetBlockchain0)
 82
 83	assert.Equal(t, 29, len(blocks[0].Batches[0].L1UserTxs))
 84	assert.Equal(t, 0, len(blocks[0].Batches[0].L1CoordinatorTxs))
 85	assert.Equal(t, 21, len(blocks[0].Batches[0].L2Txs))
 86	assert.Equal(t, 1, len(blocks[0].Batches[1].L1UserTxs))
 87	assert.Equal(t, 1, len(blocks[0].Batches[1].L1CoordinatorTxs))
 88	assert.Equal(t, 59, len(blocks[0].Batches[1].L2Txs))
 89	assert.Equal(t, 9, len(blocks[0].Batches[2].L1UserTxs))
 90	assert.Equal(t, 0, len(blocks[0].Batches[2].L1CoordinatorTxs))
 91	assert.Equal(t, 8, len(blocks[0].Batches[2].L2Txs))
 92
 93	// use first batch
 94	l2Txs := common.L2TxsToPoolL2Txs(blocks[0].Batches[0].L2Txs)
 95	_, exitInfos, err := sdb.ProcessTxs(blocks[0].Batches[0].L1UserTxs, blocks[0].Batches[0].L1CoordinatorTxs, l2Txs)
 96	require.Nil(t, err)
 97	assert.Equal(t, 0, len(exitInfos))
 98	acc, err := sdb.GetAccount(common.Idx(256))
 99	assert.Nil(t, err)
100	assert.Equal(t, "28", acc.Balance.String())
101
102	// use second batch
103	l2Txs = common.L2TxsToPoolL2Txs(blocks[0].Batches[1].L2Txs)
104	_, exitInfos, err = sdb.ProcessTxs(blocks[0].Batches[1].L1UserTxs, blocks[0].Batches[1].L1CoordinatorTxs, l2Txs)
105	require.Nil(t, err)
106	assert.Equal(t, 5, len(exitInfos))
107	acc, err = sdb.GetAccount(common.Idx(256))
108	require.Nil(t, err)
109	assert.Equal(t, "48", acc.Balance.String())
110
111	// use third batch
112	l2Txs = common.L2TxsToPoolL2Txs(blocks[0].Batches[2].L2Txs)
113	_, exitInfos, err = sdb.ProcessTxs(blocks[0].Batches[2].L1UserTxs, blocks[0].Batches[2].L1CoordinatorTxs, l2Txs)
114	require.Nil(t, err)
115	assert.Equal(t, 1, len(exitInfos))
116	acc, err = sdb.GetAccount(common.Idx(256))
117	assert.Nil(t, err)
118	assert.Equal(t, "23", acc.Balance.String())
119}
120
121func TestZKInputsGeneration(t *testing.T) {
122	dir, err := ioutil.TempDir("", "tmpdb")
123	require.Nil(t, err)
124
125	sdb, err := NewStateDB(dir, TypeBatchBuilder, 32)
126	assert.Nil(t, err)
127
128	// generate test transactions from test.SetTest0 code
129	tc := transakcio.NewTestContext()
130	blocks := tc.GenerateBlocks(transakcio.SetBlockchain0)
131	assert.Equal(t, 29, len(blocks[0].Batches[0].L1UserTxs))
132	assert.Equal(t, 0, len(blocks[0].Batches[0].L1CoordinatorTxs))
133	assert.Equal(t, 21, len(blocks[0].Batches[0].L2Txs))
134
135	l2Txs := common.L2TxsToPoolL2Txs(blocks[0].Batches[0].L2Txs)
136	zki, _, err := sdb.ProcessTxs(blocks[0].Batches[0].L1UserTxs, blocks[0].Batches[0].L1CoordinatorTxs, l2Txs)
137	require.Nil(t, err)
138
139	s, err := json.Marshal(zki)
140	require.Nil(t, err)
141	debug:=true
142	if debug {
143		fmt.Println(string(s))
144	}
145}
146*/