Skip to content

Commit

Permalink
Fix rebase conflicts
Browse files Browse the repository at this point in the history
  • Loading branch information
qdm12 committed Jul 8, 2022
1 parent f73d013 commit f46e4b4
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 9 deletions.
12 changes: 7 additions & 5 deletions lib/trie/proof/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (

"github.com/ChainSafe/gossamer/internal/trie/codec"
"github.com/ChainSafe/gossamer/internal/trie/node"
"github.com/ChainSafe/gossamer/internal/trie/pools"
"github.com/ChainSafe/gossamer/lib/common"
"github.com/ChainSafe/gossamer/lib/trie"
)
Expand All @@ -36,6 +37,9 @@ func Generate(rootHash []byte, fullKeys [][]byte, database Database) (
}
rootNode := trie.RootNode()

buffer := pools.DigestBuffers.Get().(*bytes.Buffer)
defer pools.DigestBuffers.Put(buffer)

merkleValuesSeen := make(map[string]struct{})
for _, fullKey := range fullKeys {
fullKeyNibbles := codec.KeyLEToNibbles(fullKey)
Expand All @@ -48,14 +52,12 @@ func Generate(rootHash []byte, fullKeys [][]byte, database Database) (
}

for _, encodedProofNode := range newEncodedProofNodes {
// No need to force-hash the root node if it smaller than 32B since
// we use this merkle value for deduplication only, so isRoot is false.
const isRoot = false
merkleValue, err := node.MerkleValue(encodedProofNode, isRoot)
buffer.Reset()
err := node.MerkleValue(encodedProofNode, buffer)
if err != nil {
return nil, fmt.Errorf("blake2b hash: %w", err)
}
merkleValueString := string(merkleValue)
merkleValueString := buffer.String()

_, seen := merkleValuesSeen[merkleValueString]
if seen {
Expand Down
18 changes: 14 additions & 4 deletions lib/trie/proof/verify.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"strings"

"github.com/ChainSafe/gossamer/internal/trie/node"
"github.com/ChainSafe/gossamer/internal/trie/pools"
"github.com/ChainSafe/gossamer/lib/common"
"github.com/ChainSafe/gossamer/lib/trie"
)
Expand Down Expand Up @@ -65,14 +66,21 @@ func buildTrie(encodedProofNodes [][]byte, rootHash []byte) (t *trie.Trie, err e
// later if the root or one of its descendant node reference their Merkle value.
var root *node.Node
for _, encodedProofNode := range encodedProofNodes {
// note we can use a buffer from the pool since
// the calculated root hash digest is not used after
// the function completes.
buffer := pools.DigestBuffers.Get().(*bytes.Buffer)
defer pools.DigestBuffers.Put(buffer)
buffer.Reset()

var digest []byte
if root == nil {
// root node not found yet
const isRoot = true
digest, err = node.MerkleValue(encodedProofNode, isRoot)
err = node.MerkleValueRoot(encodedProofNode, buffer)
if err != nil {
return nil, fmt.Errorf("blake2b hash: %w", err)
}
digest = buffer.Bytes()

if bytes.Equal(digest, rootHash) {
root, err = node.Decode(bytes.NewReader(encodedProofNode))
Expand All @@ -88,14 +96,16 @@ func buildTrie(encodedProofNodes [][]byte, rootHash []byte) (t *trie.Trie, err e
// digest was already computed above
merkleValue = digest
} else {
const isRoot = false
merkleValue, err = node.MerkleValue(encodedProofNode, isRoot)
buffer.Reset()
err = node.MerkleValue(encodedProofNode, buffer)
if err != nil {
return nil, fmt.Errorf("computing Merkle value: %w", err)
}
merkleValue = buffer.Bytes()
}

merkleValueToEncoding[string(merkleValue)] = encodedProofNode
pools.DigestBuffers.Put(buffer)
}

if root == nil {
Expand Down

0 comments on commit f46e4b4

Please sign in to comment.