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}