aboutsummaryrefslogtreecommitdiffstats
path: root/trie/sync.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-05-19 18:24:14 +0800
committerPéter Szilágyi <peterke@gmail.com>2016-05-26 21:33:09 +0800
commit748d1c171d74fbf6b6051fd629d3c2204dd930e3 (patch)
treef3bc5352efadae61cb39afd33ceeaba7b824609c /trie/sync.go
parenta7434fd0085f55235acea5348db0c9247e9aac10 (diff)
downloaddexon-748d1c171d74fbf6b6051fd629d3c2204dd930e3.tar.gz
dexon-748d1c171d74fbf6b6051fd629d3c2204dd930e3.tar.zst
dexon-748d1c171d74fbf6b6051fd629d3c2204dd930e3.zip
core, core/state, trie: enterprise hand-tuned multi-level caching
Diffstat (limited to 'trie/sync.go')
-rw-r--r--trie/sync.go13
1 files changed, 7 insertions, 6 deletions
diff --git a/trie/sync.go b/trie/sync.go
index d55399d06..a35478f83 100644
--- a/trie/sync.go
+++ b/trie/sync.go
@@ -75,8 +75,9 @@ func (s *TrieSync) AddSubTrie(root common.Hash, depth int, parent common.Hash, c
if root == emptyRoot {
return
}
- blob, _ := s.database.Get(root.Bytes())
- if local, err := decodeNode(blob); local != nil && err == nil {
+ key := root.Bytes()
+ blob, _ := s.database.Get(key)
+ if local, err := decodeNode(key, blob); local != nil && err == nil {
return
}
// Assemble the new sub-trie sync request
@@ -152,7 +153,7 @@ func (s *TrieSync) Process(results []SyncResult) (int, error) {
continue
}
// Decode the node data content and update the request
- node, err := decodeNode(item.Data)
+ node, err := decodeNode(item.Hash[:], item.Data)
if err != nil {
return i, err
}
@@ -213,9 +214,9 @@ func (s *TrieSync) children(req *request) ([]*request, error) {
}}
case fullNode:
for i := 0; i < 17; i++ {
- if node[i] != nil {
+ if node.Children[i] != nil {
children = append(children, child{
- node: &node[i],
+ node: &node.Children[i],
depth: req.depth + 1,
})
}
@@ -238,7 +239,7 @@ func (s *TrieSync) children(req *request) ([]*request, error) {
if node, ok := (*child.node).(hashNode); ok {
// Try to resolve the node from the local database
blob, _ := s.database.Get(node)
- if local, err := decodeNode(blob); local != nil && err == nil {
+ if local, err := decodeNode(node[:], blob); local != nil && err == nil {
*child.node = local
continue
}