feat(store/v2): Implement the GetProof for multi store (#18736)

This commit is contained in:
cool-developer
2024-01-17 13:52:12 +00:00
committed by GitHub
parent d9a5b1e9c9
commit bf37398dda
13 changed files with 584 additions and 78 deletions
+11 -6
View File
@@ -44,7 +44,12 @@ func (t *IavlTree) Set(key, value []byte) error {
return err
}
// WorkingHash returns the working hash of the database.
// Hash returns the hash of the latest saved version of the tree.
func (t *IavlTree) Hash() []byte {
return t.tree.Hash()
}
// WorkingHash returns the working hash of the tree.
func (t *IavlTree) WorkingHash() []byte {
return t.tree.WorkingHash()
}
@@ -54,10 +59,10 @@ func (t *IavlTree) LoadVersion(version uint64) error {
return t.tree.LoadVersionForOverwriting(int64(version))
}
// Commit commits the current state to the database.
func (t *IavlTree) Commit() ([]byte, error) {
hash, _, err := t.tree.SaveVersion()
return hash, err
// Commit commits the current state to the tree.
func (t *IavlTree) Commit() ([]byte, uint64, error) {
hash, v, err := t.tree.SaveVersion()
return hash, uint64(v), err
}
// GetProof returns a proof for the given key and version.
@@ -70,7 +75,7 @@ func (t *IavlTree) GetProof(version uint64, key []byte) (*ics23.CommitmentProof,
return imutableTree.GetProof(key)
}
// GetLatestVersion returns the latest version of the database.
// GetLatestVersion returns the latest version of the tree.
func (t *IavlTree) GetLatestVersion() uint64 {
return uint64(t.tree.Version())
}
+6 -4
View File
@@ -20,7 +20,7 @@ func TestCommitterSuite(t *testing.T) {
prefixDB := dbm.NewPrefixDB(db, []byte(storeKey))
multiTrees[storeKey] = NewIavlTree(prefixDB, logger, cfg)
}
return commitment.NewCommitStore(multiTrees, logger)
return commitment.NewCommitStore(multiTrees, db, logger)
},
}
@@ -51,8 +51,9 @@ func TestIavlTree(t *testing.T) {
require.Equal(t, uint64(0), tree.GetLatestVersion())
// commit the batch
commitHash, err := tree.Commit()
commitHash, version, err := tree.Commit()
require.NoError(t, err)
require.Equal(t, version, uint64(1))
require.Equal(t, workingHash, commitHash)
require.Equal(t, uint64(1), tree.GetLatestVersion())
@@ -63,8 +64,9 @@ func TestIavlTree(t *testing.T) {
require.NoError(t, tree.Remove([]byte("key1"))) // delete key1
version2Hash := tree.WorkingHash()
require.NotNil(t, version2Hash)
commitHash, err = tree.Commit()
commitHash, version, err = tree.Commit()
require.NoError(t, err)
require.Equal(t, version, uint64(2))
require.Equal(t, version2Hash, commitHash)
// get proof for key1
@@ -80,7 +82,7 @@ func TestIavlTree(t *testing.T) {
require.NoError(t, tree.Set([]byte("key7"), []byte("value7")))
require.NoError(t, tree.Set([]byte("key8"), []byte("value8")))
require.NoError(t, err)
_, err = tree.Commit()
_, _, err = tree.Commit()
require.NoError(t, err)
// prune version 1