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