Skip to content

Commit 9fa8c79

Browse files
committed
move stateless proofs check from stateless_test to proof
1 parent a27fc03 commit 9fa8c79

File tree

1 file changed

+162
-0
lines changed

1 file changed

+162
-0
lines changed

proof_test.go

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,3 +557,165 @@ func TestVerkleProofMarshalUnmarshalJSON(t *testing.T) {
557557
t.Errorf("expected %v, got %v", vp1, vp2)
558558
}
559559
}
560+
561+
func TestStatelessDeserialize(t *testing.T) {
562+
root := New()
563+
for _, k := range [][]byte{zeroKeyTest, oneKeyTest, fourtyKeyTest, ffx32KeyTest} {
564+
root.Insert(k, fourtyKeyTest, nil)
565+
}
566+
567+
proof, _, _, _, _ := MakeVerkleMultiProof(root, keylist{zeroKeyTest, fourtyKeyTest}, map[string][]byte{string(zeroKeyTest): fourtyKeyTest, string(fourtyKeyTest): fourtyKeyTest})
568+
569+
serialized, statediff, err := SerializeProof(proof)
570+
if err != nil {
571+
t.Fatalf("could not serialize proof: %v", err)
572+
}
573+
574+
dproof, err := DeserializeProof(serialized, statediff)
575+
if err != nil {
576+
t.Fatalf("error deserializing proof: %v", err)
577+
}
578+
579+
droot, err := TreeFromProof(dproof, root.Commit())
580+
if err != nil {
581+
t.Fatal(err)
582+
}
583+
584+
if !Equal(droot.Commit(), root.Commitment()) {
585+
t.Log(ToDot(droot), ToDot(root))
586+
t.Fatalf("differing root commitments %x != %x", droot.Commitment().Bytes(), root.Commitment().Bytes())
587+
}
588+
589+
if !Equal(droot.(*InternalNode).children[0].(*LeafNode).commitment, root.(*InternalNode).children[0].Commit()) {
590+
t.Fatal("differing commitment for child #0")
591+
}
592+
593+
if !Equal(droot.(*InternalNode).children[64].Commit(), root.(*InternalNode).children[64].Commit()) {
594+
t.Fatal("differing commitment for child #64")
595+
}
596+
}
597+
598+
func TestStatelessDeserializeMissginChildNode(t *testing.T) {
599+
root := New()
600+
for _, k := range [][]byte{zeroKeyTest, oneKeyTest, ffx32KeyTest} {
601+
root.Insert(k, fourtyKeyTest, nil)
602+
}
603+
604+
proof, _, _, _, _ := MakeVerkleMultiProof(root, keylist{zeroKeyTest, fourtyKeyTest}, map[string][]byte{string(zeroKeyTest): fourtyKeyTest, string(fourtyKeyTest): nil})
605+
606+
serialized, statediff, err := SerializeProof(proof)
607+
if err != nil {
608+
t.Fatalf("could not serialize proof: %v", err)
609+
}
610+
611+
dproof, err := DeserializeProof(serialized, statediff)
612+
if err != nil {
613+
t.Fatalf("error deserializing proof: %v", err)
614+
}
615+
616+
droot, err := TreeFromProof(dproof, root.Commit())
617+
if err != nil {
618+
t.Fatal(err)
619+
}
620+
621+
if !Equal(droot.Commit(), root.Commit()) {
622+
t.Fatal("differing root commitments")
623+
}
624+
if !Equal(droot.(*InternalNode).children[0].Commit(), root.(*InternalNode).children[0].Commit()) {
625+
t.Fatal("differing commitment for child #0")
626+
}
627+
628+
if droot.(*InternalNode).children[64] != nil {
629+
t.Fatalf("non-nil child #64: %v", droot.(*InternalNode).children[64])
630+
}
631+
}
632+
633+
func TestStatelessDeserializeDepth2(t *testing.T) {
634+
root := New()
635+
key1, _ := hex.DecodeString("0000010000000000000000000000000000000000000000000000000000000000")
636+
for _, k := range [][]byte{zeroKeyTest, key1} {
637+
root.Insert(k, fourtyKeyTest, nil)
638+
}
639+
640+
proof, _, _, _, _ := MakeVerkleMultiProof(root, keylist{zeroKeyTest, key1}, map[string][]byte{string(zeroKeyTest): fourtyKeyTest, string(key1): nil})
641+
642+
serialized, statediff, err := SerializeProof(proof)
643+
if err != nil {
644+
t.Fatalf("could not serialize proof: %v", err)
645+
}
646+
647+
dproof, err := DeserializeProof(serialized, statediff)
648+
if err != nil {
649+
t.Fatalf("error deserializing proof: %v", err)
650+
}
651+
652+
droot, err := TreeFromProof(dproof, root.Commit())
653+
if err != nil {
654+
t.Fatal(err)
655+
}
656+
657+
if !Equal(droot.Commit(), root.Commit()) {
658+
t.Fatal("differing root commitments")
659+
}
660+
661+
if !Equal(droot.(*InternalNode).children[0].Commit(), root.(*InternalNode).children[0].Commit()) {
662+
t.Fatal("differing commitment for child #0")
663+
}
664+
}
665+
666+
func TestStatelessGetProofItems(t *testing.T) {
667+
insertedKeys := [][]byte{zeroKeyTest, oneKeyTest, ffx32KeyTest}
668+
provenKeys := [][]byte{zeroKeyTest, fourtyKeyTest}
669+
670+
root := New()
671+
for _, k := range insertedKeys {
672+
root.Insert(k, fourtyKeyTest, nil)
673+
}
674+
675+
proof, _, _, _, _ := MakeVerkleMultiProof(root, keylist(provenKeys), map[string][]byte{string(zeroKeyTest): fourtyKeyTest, string(fourtyKeyTest): nil})
676+
677+
serialized, statediff, err := SerializeProof(proof)
678+
if err != nil {
679+
t.Fatalf("could not serialize proof: %v", err)
680+
}
681+
682+
dproof, err := DeserializeProof(serialized, statediff)
683+
if err != nil {
684+
t.Fatalf("error deserializing proof: %v", err)
685+
}
686+
687+
droot, err := TreeFromProof(dproof, root.Commit())
688+
if err != nil {
689+
t.Fatal(err)
690+
}
691+
692+
pel, _, _ := droot.GetProofItems(keylist(provenKeys))
693+
pef, _, _ := root.GetProofItems(keylist(provenKeys))
694+
695+
for i, c := range pel.Cis {
696+
if !Equal(c, pef.Cis[i]) {
697+
t.Fatalf("differing commitment at %d: %x != %x", i, c.Bytes(), pef.Cis[i].Bytes())
698+
}
699+
}
700+
if len(pel.Cis) != len(pef.Cis) {
701+
t.Fatal("commitments have different length")
702+
}
703+
704+
if !bytes.Equal(pel.Zis, pef.Zis) {
705+
t.Fatalf("differing index list %v != %v", pel.Zis, pef.Zis)
706+
}
707+
if len(pel.Zis) != len(pef.Zis) {
708+
t.Fatal("indices have different length")
709+
}
710+
711+
for i, y := range pel.Yis {
712+
l := y.Bytes()
713+
f := pef.Yis[i].Bytes()
714+
if !bytes.Equal(l[:], f[:]) {
715+
t.Fatalf("differing eval #%d %x != %x", i, l, f)
716+
}
717+
}
718+
if len(pel.Yis) != len(pef.Yis) {
719+
t.Fatal("evaluations have different length")
720+
}
721+
}

0 commit comments

Comments
 (0)