Skip to content

Commit

Permalink
trie/trienode: avoid unnecessary copy (ethereum#30019)
Browse files Browse the repository at this point in the history
* avoid unnecessary copy

* delete the never used function ProofList

* eth/protocols/snap, trie/trienode: polish the code

---------

Co-authored-by: Gary Rong <[email protected]>
  • Loading branch information
mask-pp and rjl493456442 authored Jun 20, 2024
1 parent 2700840 commit 00675c5
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 30 deletions.
10 changes: 2 additions & 8 deletions eth/protocols/snap/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -332,11 +332,7 @@ func ServiceGetAccountRangeQuery(chain *core.BlockChain, req *GetAccountRangePac
return nil, nil
}
}
var proofs [][]byte
for _, blob := range proof.List() {
proofs = append(proofs, blob)
}
return accounts, proofs
return accounts, proof.List()
}

func ServiceGetStorageRangesQuery(chain *core.BlockChain, req *GetStorageRangesPacket) ([][]*StorageData, [][]byte) {
Expand Down Expand Up @@ -438,9 +434,7 @@ func ServiceGetStorageRangesQuery(chain *core.BlockChain, req *GetStorageRangesP
return nil, nil
}
}
for _, blob := range proof.List() {
proofs = append(proofs, blob)
}
proofs = append(proofs, proof.List()...)
// Proof terminates the reply as proofs are only added if a node
// refuses to serve more data (exception when a contract fetch is
// finishing, but that's that).
Expand Down
23 changes: 6 additions & 17 deletions eth/protocols/snap/sync_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -286,10 +286,7 @@ func createAccountRequestResponse(t *testPeer, root common.Hash, origin common.H
t.logger.Error("Could not prove last item", "error", err)
}
}
for _, blob := range proof.List() {
proofs = append(proofs, blob)
}
return keys, vals, proofs
return keys, vals, proof.List()
}

// defaultStorageRequestHandler is a well-behaving storage request handler
Expand Down Expand Up @@ -371,9 +368,7 @@ func createStorageRequestResponse(t *testPeer, root common.Hash, accounts []comm
t.logger.Error("Could not prove last item", "error", err)
}
}
for _, blob := range proof.List() {
proofs = append(proofs, blob)
}
proofs = append(proofs, proof.List()...)
break
}
}
Expand Down Expand Up @@ -430,9 +425,7 @@ func createStorageRequestResponseAlwaysProve(t *testPeer, root common.Hash, acco
t.logger.Error("Could not prove last item", "error", err)
}
}
for _, blob := range proof.List() {
proofs = append(proofs, blob)
}
proofs = append(proofs, proof.List()...)
break
}
}
Expand Down Expand Up @@ -586,9 +579,8 @@ func testSyncBloatedProof(t *testing.T, scheme string) {

source.accountRequestHandler = func(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error {
var (
proofs [][]byte
keys []common.Hash
vals [][]byte
keys []common.Hash
vals [][]byte
)
// The values
for _, entry := range t.accountValues {
Expand Down Expand Up @@ -618,10 +610,7 @@ func testSyncBloatedProof(t *testing.T, scheme string) {
keys = append(keys[:1], keys[2:]...)
vals = append(vals[:1], vals[2:]...)
}
for _, blob := range proof.List() {
proofs = append(proofs, blob)
}
if err := t.remote.OnAccounts(t, requestId, keys, vals, proofs); err != nil {
if err := t.remote.OnAccounts(t, requestId, keys, vals, proof.List()); err != nil {
t.logger.Info("remote error on delivery (as expected)", "error", err)
t.term()
// This is actually correct, signal to exit the test successfully
Expand Down
10 changes: 5 additions & 5 deletions trie/trienode/proof.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,14 +102,14 @@ func (db *ProofSet) DataSize() int {
return db.dataSize
}

// List converts the node set to a ProofList
func (db *ProofSet) List() ProofList {
// List converts the node set to a slice of bytes.
func (db *ProofSet) List() [][]byte {
db.lock.RLock()
defer db.lock.RUnlock()

var values ProofList
for _, key := range db.order {
values = append(values, db.nodes[key])
values := make([][]byte, len(db.order))
for i, key := range db.order {
values[i] = db.nodes[key]
}
return values
}
Expand Down

0 comments on commit 00675c5

Please sign in to comment.