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*/