mirror of
https://github.com/arnaucube/arbo.git
synced 2026-01-15 01:41:28 +01:00
ThresholdNLeafs defines the threshold number of leafs in the tree that determines if AddBatch will work in memory or in disk. It is defined when calling NewTree, and if set to 0 it will work always in disk.
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"math/big"
|
|
"testing"
|
|
|
|
qt "github.com/frankban/quicktest"
|
|
"github.com/vocdoni/arbo"
|
|
"go.vocdoni.io/dvote/db"
|
|
"go.vocdoni.io/dvote/db/badgerdb"
|
|
)
|
|
|
|
func TestGenerator(t *testing.T) {
|
|
c := qt.New(t)
|
|
database, err := badgerdb.New(db.Options{Path: c.TempDir()})
|
|
c.Assert(err, qt.IsNil)
|
|
tree, err := arbo.NewTree(arbo.Config{Database: database, MaxLevels: 4,
|
|
HashFunction: arbo.HashFunctionPoseidon})
|
|
c.Assert(err, qt.IsNil)
|
|
|
|
testVector := [][]int64{
|
|
{1, 11},
|
|
{2, 22},
|
|
{3, 33},
|
|
{4, 44},
|
|
}
|
|
bLen := 1
|
|
for i := 0; i < len(testVector); i++ {
|
|
k := arbo.BigIntToBytes(bLen, big.NewInt(testVector[i][0]))
|
|
v := arbo.BigIntToBytes(bLen, big.NewInt(testVector[i][1]))
|
|
if err := tree.Add(k, v); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
// proof of existence
|
|
k := arbo.BigIntToBytes(bLen, big.NewInt(int64(2)))
|
|
cvp, err := tree.GenerateCircomVerifierProof(k)
|
|
c.Assert(err, qt.IsNil)
|
|
jCvp, err := json.Marshal(cvp)
|
|
c.Assert(err, qt.IsNil)
|
|
// store the data into a file that will be used at the circom test
|
|
err = ioutil.WriteFile("go-smt-verifier-inputs.json", jCvp, 0600)
|
|
c.Assert(err, qt.IsNil)
|
|
|
|
// proof of non-existence
|
|
k = arbo.BigIntToBytes(bLen, big.NewInt(int64(5)))
|
|
cvp, err = tree.GenerateCircomVerifierProof(k)
|
|
c.Assert(err, qt.IsNil)
|
|
jCvp, err = json.Marshal(cvp)
|
|
c.Assert(err, qt.IsNil)
|
|
// store the data into a file that will be used at the circom test
|
|
err = ioutil.WriteFile("go-smt-verifier-non-existence-inputs.json", jCvp, 0600)
|
|
c.Assert(err, qt.IsNil)
|
|
}
|