github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/iavl/doc.go (about) 1 // Package iavl implements a versioned, snapshottable (immutable) AVL+ tree 2 // for persisting key-value pairs. 3 // 4 // Basic usage of MutableTree. 5 // 6 // import "github.com/tendermint/classic/iavl" 7 // import "github.com/tendermint/classic/db" 8 // ... 9 // 10 // tree := iavl.NewMutableTree(memdb.NewMemDB(), 128) 11 // 12 // tree.IsEmpty() // true 13 // 14 // tree.Set([]byte("alice"), []byte("abc")) 15 // tree.SaveVersion(1) 16 // 17 // tree.Set([]byte("alice"), []byte("xyz")) 18 // tree.Set([]byte("bob"), []byte("xyz")) 19 // tree.SaveVersion(2) 20 // 21 // tree.LatestVersion() // 2 22 // 23 // tree.GetVersioned([]byte("alice"), 1) // "abc" 24 // tree.GetVersioned([]byte("alice"), 2) // "xyz" 25 // 26 // Proof of existence: 27 // 28 // root := tree.Hash() 29 // val, proof, err := tree.GetVersionedWithProof([]byte("bob"), 2) // "xyz", RangeProof, nil 30 // proof.Verify([]byte("bob"), val, root) // nil 31 // 32 // Proof of absence: 33 // 34 // _, proof, err = tree.GetVersionedWithProof([]byte("tom"), 2) // nil, RangeProof, nil 35 // proof.Verify([]byte("tom"), nil, root) // nil 36 // 37 // Now we delete an old version: 38 // 39 // tree.DeleteVersion(1) 40 // tree.VersionExists(1) // false 41 // tree.Get([]byte("alice")) // "xyz" 42 // tree.GetVersioned([]byte("alice"), 1) // nil 43 // 44 // Can't create a proof of absence for a version we no longer have: 45 // 46 // _, proof, err = tree.GetVersionedWithProof([]byte("tom"), 1) // nil, nil, error 47 package iavl