hermez-node/common/pooll2tx_test.go
common/pooll2tx_test.goRaw
1package common
2
3import (
4 "encoding/hex"
5 "math/big"
6 "testing"
7
8 ethCommon "github.com/ethereum/go-ethereum/common"
9 "github.com/iden3/go-iden3-crypto/babyjub"
10 "github.com/stretchr/testify/assert"
11)
12
13func TestTxCompressedData(t *testing.T) {
14 var sk babyjub.PrivateKey
15 _, err := hex.Decode(sk[:], []byte("0001020304050607080900010203040506070809000102030405060708090001"))
16 assert.Nil(t, err)
17
18 tx := PoolL2Tx{
19 FromIdx: 2,
20 ToIdx: 3,
21 Amount: big.NewInt(4),
22 TokenID: 5,
23 Nonce: 6,
24 ToBJJ: sk.Public(),
25 }
26 txCompressedData, err := tx.TxCompressedData()
27 assert.Nil(t, err)
28 // test vector value generated from javascript implementation
29 expectedStr := "1766847064778421992193717128424891165872736891548909569553540449389241871"
30 assert.Equal(t, expectedStr, txCompressedData.String())
31 expected, ok := new(big.Int).SetString(expectedStr, 10)
32 assert.True(t, ok)
33 assert.Equal(t, expected.Bytes(), txCompressedData.Bytes())
34 assert.Equal(t, "10000000000060000000500040000000000030000000000020001c60be60f", hex.EncodeToString(txCompressedData.Bytes())[1:])
35
36 tx = PoolL2Tx{
37 FromIdx: 7,
38 ToIdx: 8,
39 Amount: big.NewInt(9),
40 TokenID: 10,
41 Nonce: 11,
42 Fee: 12,
43 ToBJJ: sk.Public(),
44 }
45 txCompressedData, err = tx.TxCompressedDataV2()
46 assert.Nil(t, err)
47 // test vector value generated from javascript implementation
48 expectedStr = "6571340879233176732837827812956721483162819083004853354503"
49 assert.Equal(t, expectedStr, txCompressedData.String())
50 expected, ok = new(big.Int).SetString(expectedStr, 10)
51 assert.True(t, ok)
52 assert.Equal(t, expected.Bytes(), txCompressedData.Bytes())
53 assert.Equal(t, "10c000000000b0000000a0009000000000008000000000007", hex.EncodeToString(txCompressedData.Bytes())[1:])
54}
55
56func TestHashToSign(t *testing.T) {
57 var sk babyjub.PrivateKey
58 _, err := hex.Decode(sk[:], []byte("0001020304050607080900010203040506070809000102030405060708090001"))
59 assert.Nil(t, err)
60 ethAddr := ethCommon.HexToAddress("0xc58d29fA6e86E4FAe04DDcEd660d45BCf3Cb2370")
61
62 tx := PoolL2Tx{
63 FromIdx: 2,
64 ToIdx: 3,
65 Amount: big.NewInt(4),
66 TokenID: 5,
67 Nonce: 6,
68 ToBJJ: sk.Public(),
69 RqToEthAddr: ethAddr,
70 RqToBJJ: sk.Public(),
71 }
72 toSign, err := tx.HashToSign()
73 assert.Nil(t, err)
74 assert.Equal(t, "14526446928649310956370997581245770629723313742905751117262272426489782809503", toSign.String())
75}
76
77func TestVerifyTxSignature(t *testing.T) {
78 var sk babyjub.PrivateKey
79 _, err := hex.Decode(sk[:], []byte("0001020304050607080900010203040506070809000102030405060708090001"))
80 assert.Nil(t, err)
81 ethAddr := ethCommon.HexToAddress("0xc58d29fA6e86E4FAe04DDcEd660d45BCf3Cb2370")
82
83 tx := PoolL2Tx{
84 FromIdx: 2,
85 ToIdx: 3,
86 Amount: big.NewInt(4),
87 TokenID: 5,
88 Nonce: 6,
89 ToBJJ: sk.Public(),
90 RqToEthAddr: ethAddr,
91 RqToBJJ: sk.Public(),
92 }
93 toSign, err := tx.HashToSign()
94 assert.Nil(t, err)
95 assert.Equal(t, "14526446928649310956370997581245770629723313742905751117262272426489782809503", toSign.String())
96
97 sig := sk.SignPoseidon(toSign)
98 tx.Signature = sig
99 assert.True(t, tx.VerifySignature(sk.Public()))
100}