hermez-node/common/l2tx_test.go
common/l2tx_test.goRaw
1package common
2
3import (
4 "encoding/hex"
5 "math/big"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9 "github.com/stretchr/testify/require"
10)
11
12func TestNewL2Tx(t *testing.T) {
13 l2Tx := &L2Tx{
14 FromIdx: 87654,
15 ToIdx: 300,
16 TokenID: 5,
17 Amount: big.NewInt(4),
18 Nonce: 144,
19 }
20 l2Tx, err := NewL2Tx(l2Tx)
21 assert.NoError(t, err)
22 assert.Equal(t, "0x022669acda59b827d20ef5354a3eebd1dffb3972b0a6bf89d18bfd2efa0ab9f41e", l2Tx.TxID.String())
23
24 l2Tx = &L2Tx{
25 FromIdx: 87654,
26 ToIdx: 300,
27 TokenID: 5,
28 Amount: big.NewInt(4),
29 Nonce: 1,
30 }
31 l2Tx, err = NewL2Tx(l2Tx)
32 assert.NoError(t, err)
33 assert.Equal(t, "0x029e7499a830f8f5eb17c07da48cf91415710f1bcbe0169d363ff91e81faf92fc2", l2Tx.TxID.String())
34
35 l2Tx = &L2Tx{
36 FromIdx: 87654,
37 ToIdx: 300,
38 TokenID: 5,
39 Amount: big.NewInt(4),
40 Fee: 126,
41 Nonce: 3,
42 }
43 l2Tx, err = NewL2Tx(l2Tx)
44 assert.NoError(t, err)
45 assert.Equal(t, "0x0255c70ed20e1b8935232e1b9c5884dbcc88a6e1a3454d24f2d77252eb2bb0b64e", l2Tx.TxID.String())
46
47 l2Tx = &L2Tx{
48 FromIdx: 87654,
49 ToIdx: 300,
50 TokenID: 5,
51 Amount: big.NewInt(4),
52 Nonce: 1003,
53 Fee: 144,
54 }
55 l2Tx, err = NewL2Tx(l2Tx)
56 assert.NoError(t, err)
57 assert.Equal(t, "0x0206b372f967061d1148bbcff679de38120e075141a80a07326d0f514c2efc6ca9", l2Tx.TxID.String())
58
59 l2Tx = &L2Tx{
60 FromIdx: 1,
61 ToIdx: 1,
62 TokenID: 1,
63 Amount: big.NewInt(1),
64 Nonce: 1,
65 Fee: 1,
66 }
67 l2Tx, err = NewL2Tx(l2Tx)
68 assert.NoError(t, err)
69 assert.Equal(t, "0x0236f7ea5bccf78ba60baf56c058d235a844f9b09259fd0efa4f5f72a7d4a26618", l2Tx.TxID.String())
70
71 l2Tx = &L2Tx{
72 FromIdx: 999,
73 ToIdx: 999,
74 TokenID: 999,
75 Amount: big.NewInt(999),
76 Nonce: 999,
77 Fee: 255,
78 }
79 l2Tx, err = NewL2Tx(l2Tx)
80 assert.NoError(t, err)
81 assert.Equal(t, "0x02ac122f5b709ce190129fecbbe35bfd30c70e6433dbd85a8eb743d110906a1dc1", l2Tx.TxID.String())
82
83 l2Tx = &L2Tx{
84 FromIdx: 4444,
85 ToIdx: 300,
86 TokenID: 0,
87 Amount: big.NewInt(3400000000),
88 Nonce: 2,
89 Fee: 25,
90 }
91 l2Tx, err = NewL2Tx(l2Tx)
92 assert.NoError(t, err)
93 assert.Equal(t, "0x02c674951a81881b7bc50db3b9e5efd97ac88550c7426ac548720e5057cfba515a", l2Tx.TxID.String())
94}
95
96func TestL2TxByteParsers(t *testing.T) {
97 // test vectors values generated from javascript implementation
98 amount, ok := new(big.Int).SetString("343597383670000000000000000000000000000000", 10)
99 require.True(t, ok)
100 l2Tx := &L2Tx{
101 ToIdx: (1 << 16) - 1,
102 FromIdx: (1 << 16) - 1,
103 Amount: amount,
104 Fee: (1 << 8) - 1,
105 }
106 expected := "ffffffffffffffffffff"
107 encodedData, err := l2Tx.BytesDataAvailability(16)
108 require.NoError(t, err)
109 assert.Equal(t, expected, hex.EncodeToString(encodedData))
110
111 decodedData, err := L2TxFromBytesDataAvailability(encodedData, 16)
112 require.NoError(t, err)
113 assert.Equal(t, l2Tx, decodedData)
114
115 l2Tx = &L2Tx{
116 ToIdx: (1 << 32) - 1,
117 FromIdx: (1 << 32) - 1,
118 Amount: amount,
119 Fee: (1 << 8) - 1,
120 }
121 expected = "ffffffffffffffffffffffffffff"
122 encodedData, err = l2Tx.BytesDataAvailability(32)
123 require.NoError(t, err)
124 assert.Equal(t, expected, hex.EncodeToString(encodedData))
125
126 decodedData, err = L2TxFromBytesDataAvailability(encodedData, 32)
127 require.NoError(t, err)
128 assert.Equal(t, l2Tx, decodedData)
129
130 l2Tx = &L2Tx{
131 ToIdx: 0,
132 FromIdx: 0,
133 Amount: big.NewInt(0),
134 Fee: 0,
135 }
136 expected = "0000000000000000000000000000"
137 encodedData, err = l2Tx.BytesDataAvailability(32)
138 require.NoError(t, err)
139 assert.Equal(t, expected, hex.EncodeToString(encodedData))
140
141 decodedData, err = L2TxFromBytesDataAvailability(encodedData, 32)
142 require.NoError(t, err)
143 assert.Equal(t, l2Tx, decodedData)
144
145 l2Tx = &L2Tx{
146 ToIdx: 0,
147 FromIdx: 1061,
148 Amount: big.NewInt(420000000000),
149 Fee: 127,
150 }
151 expected = "000004250000000010fa56ea007f"
152 encodedData, err = l2Tx.BytesDataAvailability(32)
153 require.NoError(t, err)
154 assert.Equal(t, expected, hex.EncodeToString(encodedData))
155
156 decodedData, err = L2TxFromBytesDataAvailability(encodedData, 32)
157 require.NoError(t, err)
158 assert.Equal(t, l2Tx, decodedData)
159
160 l2Tx = &L2Tx{
161 ToIdx: 256,
162 FromIdx: 257,
163 Amount: big.NewInt(79000000),
164 Fee: 201,
165 }
166 expected = "00000101000001000004b571c0c9"
167 encodedData, err = l2Tx.BytesDataAvailability(32)
168 require.NoError(t, err)
169 assert.Equal(t, expected, hex.EncodeToString(encodedData))
170
171 decodedData, err = L2TxFromBytesDataAvailability(encodedData, 32)
172 require.NoError(t, err)
173 assert.Equal(t, l2Tx, decodedData)
174}