github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/iavl/doc.go (about)

     1  // Package iavl implements a versioned, snapshottable (immutable) AVL+ tree
     2  // for persisting key-value pairs.
     3  //
     4  // The tree is not safe for concurrent use, and must be guarded by a Mutex
     5  // or RWLock as appropriate - the exception is immutable trees returned by
     6  // MutableTree.GetImmutable() which are safe for concurrent use as long as
     7  // the version is not deleted via DeleteVersion().
     8  //
     9  // Basic usage of MutableTree:
    10  //
    11  //	import "github.com/fibonacci-chain/fbc/libs/iavl"
    12  //	import "github.com/fibonacci-chain/fbc/libs/tm-db"
    13  //	...
    14  //
    15  //	tree := iavl.NewMutableTree(db.NewMemDB(), 128)
    16  //
    17  //	tree.IsEmpty() // true
    18  //
    19  //	tree.Set([]byte("alice"), []byte("abc"))
    20  //	tree.SaveVersion(1)
    21  //
    22  //	tree.Set([]byte("alice"), []byte("xyz"))
    23  //	tree.Set([]byte("bob"), []byte("xyz"))
    24  //	tree.SaveVersion(2)
    25  //
    26  //	tree.LatestVersion() // 2
    27  //
    28  //	tree.GetVersioned([]byte("alice"), 1) // "abc"
    29  //	tree.GetVersioned([]byte("alice"), 2) // "xyz"
    30  //
    31  // Proof of existence:
    32  //
    33  //	root := tree.Hash()
    34  //	val, proof, err := tree.GetVersionedWithProof([]byte("bob"), 2) // "xyz", RangeProof, nil
    35  //	proof.Verify([]byte("bob"), val, root) // nil
    36  //
    37  // Proof of absence:
    38  //
    39  //	_, proof, err = tree.GetVersionedWithProof([]byte("tom"), 2) // nil, RangeProof, nil
    40  //	proof.Verify([]byte("tom"), nil, root) // nil
    41  //
    42  // Now we delete an old version:
    43  //
    44  //	tree.DeleteVersion(1)
    45  //	tree.VersionExists(1) // false
    46  //	tree.Get([]byte("alice")) // "xyz"
    47  //	tree.GetVersioned([]byte("alice"), 1) // nil
    48  //
    49  // Can't create a proof of absence for a version we no longer have:
    50  //
    51  //	_, proof, err = tree.GetVersionedWithProof([]byte("tom"), 1) // nil, nil, error
    52  package iavl