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