package main import ( "flag" "fmt" "log" "os" "runtime/pprof" ) type Prover struct { Merkle } func NewProver(height int64, fname string, mtype string) *Prover { m := NewMerkle(mtype, height, fname) return &Prover{m} } func main() { height := flag.Int64("height", 0, "number of nodes is 2 ** height - 1") fname := flag.String("db", "test.db", "filename for the database") mtype := flag.String("mtype", "bfs", "type of Merkle tree (bfs or post)") prof := flag.String("prof", "prof.prof", "filename for profile information") flag.Parse() f, err := os.Create(*prof) if err != nil { log.Fatal(err) } pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() p := NewProver(*height, *fname, *mtype) root := p.Build() fmt.Println(root) id := p.Size() / 2 proof := p.Proof(id) fmt.Println(verify(id, proof)) }