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