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