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}