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