From 77a71fd0faa84af1ad60d93b9539f747223932f9 Mon Sep 17 00:00:00 2001 From: cool-developer <51834436+cool-develope@users.noreply.github.com> Date: Tue, 7 May 2024 14:25:44 -0400 Subject: [PATCH 1/2] fix: working hash with initial version (#943) (cherry picked from commit 70f77c26e2a6cf24b99e2676bcc1667d6512fa95) # Conflicts: # CHANGELOG.md --- CHANGELOG.md | 32 ++++++++++++++++++++++++++++++++ mutable_tree.go | 2 +- tree_test.go | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b46018e88..90c6d293f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,38 @@ # Changelog +<<<<<<< HEAD ## Unreleased +======= +## v1.0.4 May 7, 2024 + +### Bug Fixes + +- [#943](https://github.com/cosmos/iavl/pull/943) Fix the `WorkingHash` with the `InitialVersion` option. + +## v1.0.3 April 8, 2024 + +### Bug Fixes + +- [#928](https://github.com/cosmos/iavl/pull/928) Fix the reformatted root node issue. + +## v1.0.2 March 16, 2024 + +### Bug Fixes + +- [#911](https://github.com/cosmos/iavl/pull/911) Fix the reference root format from (prefix, version) to (prefix, version, nonce) + +### Improvements + +- [#911](https://github.com/cosmos/iavl/pull/911) Async pruning of legacy orphan nodes. + +## v1.0.1 February 16, 2024 + +### Improvements + +- [#876](https://github.com/cosmos/iavl/pull/876) Make pruning of legacy orphan nodes asynchronous. + +## v1.0.0 (October 30, 2023) +>>>>>>> 70f77c2 (fix: working hash with initial version (#943)) ### Improvements diff --git a/mutable_tree.go b/mutable_tree.go index 6308c35ab..053662773 100644 --- a/mutable_tree.go +++ b/mutable_tree.go @@ -137,7 +137,7 @@ func (tree *MutableTree) Hash() []byte { // WorkingHash returns the hash of the current working tree. func (tree *MutableTree) WorkingHash() []byte { - return tree.ImmutableTree.Hash() + return tree.root.hashWithCount(tree.WorkingVersion()) } func (tree *MutableTree) WorkingVersion() int64 { diff --git a/tree_test.go b/tree_test.go index 9c564b29a..dd4773318 100644 --- a/tree_test.go +++ b/tree_test.go @@ -1885,3 +1885,37 @@ func TestReferenceRoot(t *testing.T) { require.Equal(t, tree.root.GetKey(), (&NodeKey{version: 1, nonce: 3}).GetKey()) require.Equal(t, tree.root.key, []byte("key2")) } + +func TestWorkingHashWithInitialVersion(t *testing.T) { + db, err := dbm.NewDB("test", "memdb", "") + require.NoError(t, err) + defer db.Close() + + initialVersion := int64(100) + tree := NewMutableTree(db, 0, false, log.NewNopLogger()) + tree.SetInitialVersion(uint64(initialVersion)) + + v := tree.WorkingVersion() + require.Equal(t, initialVersion, v) + + _, err = tree.Set([]byte("key1"), []byte("value1")) + require.NoError(t, err) + + workingHash := tree.WorkingHash() + commitHash, _, err := tree.SaveVersion() + require.NoError(t, err) + require.Equal(t, commitHash, workingHash) + + db, err = dbm.NewDB("test", "memdb", "") + require.NoError(t, err) + + // without WorkingHash + tree = NewMutableTree(db, 0, false, log.NewNopLogger(), InitialVersionOption(uint64(initialVersion))) + + _, err = tree.Set([]byte("key1"), []byte("value1")) + require.NoError(t, err) + + commitHash1, _, err := tree.SaveVersion() + require.NoError(t, err) + require.Equal(t, commitHash1, commitHash) +} From cf7087f13e6b81c2628160748239a281126e14d8 Mon Sep 17 00:00:00 2001 From: cool-developer <51834436+cool-develope@users.noreply.github.com> Date: Tue, 7 May 2024 14:32:22 -0400 Subject: [PATCH 2/2] Update CHANGELOG.md --- CHANGELOG.md | 33 +-------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90c6d293f..54e9e97b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,38 +1,6 @@ # Changelog -<<<<<<< HEAD ## Unreleased -======= -## v1.0.4 May 7, 2024 - -### Bug Fixes - -- [#943](https://github.com/cosmos/iavl/pull/943) Fix the `WorkingHash` with the `InitialVersion` option. - -## v1.0.3 April 8, 2024 - -### Bug Fixes - -- [#928](https://github.com/cosmos/iavl/pull/928) Fix the reformatted root node issue. - -## v1.0.2 March 16, 2024 - -### Bug Fixes - -- [#911](https://github.com/cosmos/iavl/pull/911) Fix the reference root format from (prefix, version) to (prefix, version, nonce) - -### Improvements - -- [#911](https://github.com/cosmos/iavl/pull/911) Async pruning of legacy orphan nodes. - -## v1.0.1 February 16, 2024 - -### Improvements - -- [#876](https://github.com/cosmos/iavl/pull/876) Make pruning of legacy orphan nodes asynchronous. - -## v1.0.0 (October 30, 2023) ->>>>>>> 70f77c2 (fix: working hash with initial version (#943)) ### Improvements @@ -47,6 +15,7 @@ ### Bug Fixes +- [#943](https://github.com/cosmos/iavl/pull/943) Fix the `WorkingHash` with the `InitialVersion` option. - [#909](https://github.com/cosmos/iavl/pull/909) Fix the reference node formats and delete legacy nodes. - [#773](https://github.com/cosmos/iavl/pull/773) Fix memory leak in `Import`. - [#795](https://github.com/cosmos/iavl/pull/795) Fix plugin used for buf generate.