package common import ( "encoding/hex" "math/big" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestNewL2TxID(t *testing.T) { l2Tx := &L2Tx{ FromIdx: 87654, ToIdx: 300, TokenID: 5, Amount: big.NewInt(4), Nonce: 144, } l2Tx, err := NewL2Tx(l2Tx) assert.NoError(t, err) assert.Equal(t, "0x022669acda59b827d20ef5354a3eebd1dffb3972b0a6bf89d18bfd2efa0ab9f41e", l2Tx.TxID.String()) l2Tx = &L2Tx{ FromIdx: 87654, ToIdx: 300, TokenID: 5, Amount: big.NewInt(4), Nonce: 1, } l2Tx, err = NewL2Tx(l2Tx) assert.NoError(t, err) assert.Equal(t, "0x029e7499a830f8f5eb17c07da48cf91415710f1bcbe0169d363ff91e81faf92fc2", l2Tx.TxID.String()) l2Tx = &L2Tx{ FromIdx: 87654, ToIdx: 300, TokenID: 5, Amount: big.NewInt(4), Fee: 126, Nonce: 3, } l2Tx, err = NewL2Tx(l2Tx) assert.NoError(t, err) assert.Equal(t, "0x0255c70ed20e1b8935232e1b9c5884dbcc88a6e1a3454d24f2d77252eb2bb0b64e", l2Tx.TxID.String()) l2Tx = &L2Tx{ FromIdx: 87654, ToIdx: 300, TokenID: 5, Amount: big.NewInt(4), Nonce: 1003, Fee: 144, } l2Tx, err = NewL2Tx(l2Tx) assert.NoError(t, err) assert.Equal(t, "0x0206b372f967061d1148bbcff679de38120e075141a80a07326d0f514c2efc6ca9", l2Tx.TxID.String()) l2Tx = &L2Tx{ FromIdx: 1, ToIdx: 1, TokenID: 1, Amount: big.NewInt(1), Nonce: 1, Fee: 1, } l2Tx, err = NewL2Tx(l2Tx) assert.NoError(t, err) assert.Equal(t, "0x0236f7ea5bccf78ba60baf56c058d235a844f9b09259fd0efa4f5f72a7d4a26618", l2Tx.TxID.String()) l2Tx = &L2Tx{ FromIdx: 999, ToIdx: 999, TokenID: 999, Amount: big.NewInt(999), Nonce: 999, Fee: 255, } l2Tx, err = NewL2Tx(l2Tx) assert.NoError(t, err) assert.Equal(t, "0x02ac122f5b709ce190129fecbbe35bfd30c70e6433dbd85a8eb743d110906a1dc1", l2Tx.TxID.String()) l2Tx = &L2Tx{ FromIdx: 4444, ToIdx: 300, TokenID: 0, Amount: big.NewInt(3400000000), Nonce: 2, Fee: 25, } l2Tx, err = NewL2Tx(l2Tx) assert.NoError(t, err) assert.Equal(t, "0x02c674951a81881b7bc50db3b9e5efd97ac88550c7426ac548720e5057cfba515a", l2Tx.TxID.String()) } func TestL2TxByteParsers(t *testing.T) { // test vectors values generated from javascript implementation amount, ok := new(big.Int).SetString("343597383670000000000000000000000000000000", 10) require.True(t, ok) l2Tx := &L2Tx{ ToIdx: (1 << 16) - 1, FromIdx: (1 << 16) - 1, Amount: amount, Fee: (1 << 8) - 1, } expected := "ffffffffffffffffffff" encodedData, err := l2Tx.BytesDataAvailability(16) require.NoError(t, err) assert.Equal(t, expected, hex.EncodeToString(encodedData)) decodedData, err := L2TxFromBytesDataAvailability(encodedData, 16) require.NoError(t, err) assert.Equal(t, l2Tx, decodedData) l2Tx = &L2Tx{ ToIdx: (1 << 32) - 1, FromIdx: (1 << 32) - 1, Amount: amount, Fee: (1 << 8) - 1, } expected = "ffffffffffffffffffffffffffff" encodedData, err = l2Tx.BytesDataAvailability(32) require.NoError(t, err) assert.Equal(t, expected, hex.EncodeToString(encodedData)) decodedData, err = L2TxFromBytesDataAvailability(encodedData, 32) require.NoError(t, err) assert.Equal(t, l2Tx, decodedData) l2Tx = &L2Tx{ ToIdx: 0, FromIdx: 0, Amount: big.NewInt(0), Fee: 0, } expected = "0000000000000000000000000000" encodedData, err = l2Tx.BytesDataAvailability(32) require.NoError(t, err) assert.Equal(t, expected, hex.EncodeToString(encodedData)) decodedData, err = L2TxFromBytesDataAvailability(encodedData, 32) require.NoError(t, err) assert.Equal(t, l2Tx, decodedData) l2Tx = &L2Tx{ ToIdx: 0, FromIdx: 1061, Amount: big.NewInt(420000000000), Fee: 127, } expected = "000004250000000010fa56ea007f" encodedData, err = l2Tx.BytesDataAvailability(32) require.NoError(t, err) assert.Equal(t, expected, hex.EncodeToString(encodedData)) decodedData, err = L2TxFromBytesDataAvailability(encodedData, 32) require.NoError(t, err) assert.Equal(t, l2Tx, decodedData) l2Tx = &L2Tx{ ToIdx: 256, FromIdx: 257, Amount: big.NewInt(79000000), Fee: 201, } expected = "00000101000001000004b571c0c9" encodedData, err = l2Tx.BytesDataAvailability(32) require.NoError(t, err) assert.Equal(t, expected, hex.EncodeToString(encodedData)) decodedData, err = L2TxFromBytesDataAvailability(encodedData, 32) require.NoError(t, err) assert.Equal(t, l2Tx, decodedData) }