arnaucube
arnaucube/go-merkletree-iden3Public Self-hosted repository
go-merkletree-iden3/merkletree_test.go
merkletree_test.goRaw
 1package merkletree
 2
 3import (
 4	"math/big"
 5	"testing"
 6
 7	"github.com/iden3/go-iden3-core/db"
 8	"github.com/stretchr/testify/assert"
 9	"github.com/stretchr/testify/require"
10)
11
12func TestNewTree(t *testing.T) {
13	mt, err := NewMerkleTree(db.NewMemoryStorage(), 10)
14	assert.Nil(t, err)
15	assert.Equal(t, "0", mt.Root().String())
16
17	// test vectors generated using https://github.com/iden3/circomlib smt.js
18	err = mt.Add(big.NewInt(1), big.NewInt(2))
19	assert.Nil(t, err)
20	assert.Equal(t, "4932297968297298434239270129193057052722409868268166443802652458940273154854", mt.Root().BigInt().String())
21
22	err = mt.Add(big.NewInt(33), big.NewInt(44))
23	assert.Nil(t, err)
24	assert.Equal(t, "13563340744765267202993741297198970774200042973817962221376874695587906013050", mt.Root().BigInt().String())
25
26	err = mt.Add(big.NewInt(1234), big.NewInt(9876))
27	assert.Nil(t, err)
28	assert.Equal(t, "16970503620176669663662021947486532860010370357132361783766545149750777353066", mt.Root().BigInt().String())
29
30	proof, err := mt.GenerateProof(big.NewInt(33), nil)
31	assert.Nil(t, err)
32
33	assert.True(t, VerifyProof(mt.Root(), proof, big.NewInt(33), big.NewInt(44)))
34	assert.True(t, !VerifyProof(mt.Root(), proof, big.NewInt(33), big.NewInt(45)))
35}
36
37func TestSiblingsFromProof(t *testing.T) {
38	mt, err := NewMerkleTree(db.NewMemoryStorage(), 140)
39	require.Nil(t, err)
40	defer mt.db.Close()
41
42	for i := 0; i < 64; i++ {
43		k := big.NewInt(int64(i))
44		v := big.NewInt(0)
45		if err := mt.Add(k, v); err != nil {
46			t.Fatal(err)
47		}
48	}
49
50	proof, err := mt.GenerateProof(big.NewInt(4), nil)
51	if err != nil {
52		t.Fatal(err)
53	}
54
55	siblings := SiblingsFromProof(proof)
56	assert.Equal(t, 6, len(siblings))
57	assert.Equal(t, "26bc69cfd3c982eba7b45cd2e6a2c75f218c546089f115777df47ab06f1fdb23", siblings[0].Hex())
58	assert.Equal(t, "ba7fbb5841bc8fa65193c124fbda4843aaa8d64d4132c79e7176cbed4de65621", siblings[1].Hex())
59	assert.Equal(t, "1339329b2d15e467ec3734ec06f6f4ae5a7c8c0b6ba98c26558b5a4db3e9a804", siblings[2].Hex())
60	assert.Equal(t, "b2261e6f47d9feb6fac2480928cc0fe03204d946cbc0a7b4de250d3e1384f40f", siblings[3].Hex())
61	assert.Equal(t, "b6c905f21c9928efa19a2c4e55d88d5fd0af493032f5b84620eb872e48ff5d01", siblings[4].Hex())
62	assert.Equal(t, "69873a951f49bbaff71039d672ffe52d73605aed6b40c1ce7ab068ad86a44d1e", siblings[5].Hex())
63}