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