arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/db/statedb/utils_test.go
db/statedb/utils_test.goRaw
  1package statedb
  2
  3import (
  4	"io/ioutil"
  5	"math/big"
  6	"testing"
  7
  8	ethCommon "github.com/ethereum/go-ethereum/common"
  9	"github.com/hermeznetwork/hermez-node/common"
 10	"github.com/iden3/go-iden3-crypto/babyjub"
 11	"github.com/stretchr/testify/assert"
 12	"github.com/stretchr/testify/require"
 13)
 14
 15func TestGetIdx(t *testing.T) {
 16	dir, err := ioutil.TempDir("", "tmpdb")
 17	require.Nil(t, err)
 18
 19	sdb, err := NewStateDB(dir, false, 0)
 20	assert.Nil(t, err)
 21
 22	var sk babyjub.PrivateKey
 23	copy(sk[:], []byte("1234")) // only for testing
 24	pk := sk.Public()
 25	var sk2 babyjub.PrivateKey
 26	copy(sk2[:], []byte("12345")) // only for testing
 27	pk2 := sk2.Public()
 28	addr := ethCommon.HexToAddress("0x74E803744B7EEFc272E852f89a05D41515d431f2")
 29	addr2 := ethCommon.HexToAddress("0x54A0706531cEa2ee8F09bAd22f604e377bb56948")
 30	idx := common.Idx(1234)
 31	idx2 := common.Idx(12345)
 32	idx3 := common.Idx(1233)
 33
 34	// store the keys for idx by Addr & BJJ
 35	err = sdb.setIdxByEthAddrBJJ(idx, addr, pk)
 36	require.Nil(t, err)
 37
 38	idxR, err := sdb.GetIdxByEthAddrBJJ(addr, pk)
 39	assert.Nil(t, err)
 40	assert.Equal(t, idx, idxR)
 41
 42	// expect error when getting only by EthAddr, as value does not exist
 43	// in the db for only EthAddr
 44	_, err = sdb.GetIdxByEthAddr(addr)
 45	assert.Nil(t, err)
 46	_, err = sdb.GetIdxByEthAddr(addr2)
 47	assert.NotNil(t, err)
 48
 49	// expect to fail
 50	idxR, err = sdb.GetIdxByEthAddrBJJ(addr2, pk)
 51	assert.NotNil(t, err)
 52	assert.Equal(t, common.Idx(0), idxR)
 53	idxR, err = sdb.GetIdxByEthAddrBJJ(addr, pk2)
 54	assert.NotNil(t, err)
 55	assert.Equal(t, common.Idx(0), idxR)
 56
 57	// try to store bigger idx, will not affect as already exist a smaller
 58	// Idx for that Addr & BJJ
 59	err = sdb.setIdxByEthAddrBJJ(idx2, addr, pk)
 60	assert.Nil(t, err)
 61
 62	// store smaller idx
 63	err = sdb.setIdxByEthAddrBJJ(idx3, addr, pk)
 64	assert.Nil(t, err)
 65
 66	idxR, err = sdb.GetIdxByEthAddrBJJ(addr, pk)
 67	assert.Nil(t, err)
 68	assert.Equal(t, idx3, idxR)
 69
 70	// by EthAddr should work
 71	idxR, err = sdb.GetIdxByEthAddr(addr)
 72	assert.Nil(t, err)
 73	assert.Equal(t, idx3, idxR)
 74	// expect error when trying to get Idx by addr2 & pk2
 75	idxR, err = sdb.GetIdxByEthAddrBJJ(addr2, pk2)
 76	assert.NotNil(t, err)
 77	assert.Equal(t, ErrToIdxNotFound, err)
 78	assert.Equal(t, common.Idx(0), idxR)
 79}
 80
 81func TestBJJCompressedTo256BigInt(t *testing.T) {
 82	var pkComp babyjub.PublicKeyComp
 83	r := BJJCompressedTo256BigInts(pkComp)
 84	zero := big.NewInt(0)
 85	for i := 0; i < 256; i++ {
 86		assert.Equal(t, zero, r[i])
 87	}
 88
 89	pkComp[0] = 3
 90	r = BJJCompressedTo256BigInts(pkComp)
 91	one := big.NewInt(1)
 92	for i := 0; i < 256; i++ {
 93		if i != 0 && i != 1 {
 94			assert.Equal(t, zero, r[i])
 95		} else {
 96			assert.Equal(t, one, r[i])
 97		}
 98	}
 99
100	pkComp[31] = 4
101	r = BJJCompressedTo256BigInts(pkComp)
102	for i := 0; i < 256; i++ {
103		if i != 0 && i != 1 && i != 250 {
104			assert.Equal(t, zero, r[i])
105		} else {
106			assert.Equal(t, one, r[i])
107		}
108	}
109}