arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
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}