Skip to content

Commit

Permalink
preallocate memory for merkle array and consumebytes flag
Browse files Browse the repository at this point in the history
  • Loading branch information
bianyuanop committed Jan 19, 2024
1 parent cc30fb1 commit 0a94c7a
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 5 deletions.
5 changes: 3 additions & 2 deletions chain/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,15 +293,16 @@ func (b *StatelessBlock) initializeBuilt(
}

// transaction hash generation
var merkleItems [][]byte
var merkleItems [][]byte = make([][]byte, 0, len(b.Txs)+len(b.results))
for _, tx := range b.Txs {
merkleItems = append(merkleItems, tx.Bytes())
}
for _, result := range b.results {
merkleItems = append(merkleItems, result.Output)
}

root, _, err := utils.GenerateMerkleRoot(ctx, b.vm.Tracer(), merkleItems)
// consume bytes to avoid extra copying
root, _, err := utils.GenerateMerkleRoot(ctx, b.vm.Tracer(), merkleItems, true)
if err != nil {
return err
}
Expand Down
6 changes: 3 additions & 3 deletions utils/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,8 @@ func LoadBytes(filename string, expectedSize int) ([]byte, error) {

// Generate merkle root for a set of items
// this function does not take ownership of given bytes array
func GenerateMerkleRoot(ctx context.Context, tracer trace.Tracer, merkleItems [][]byte) ([]byte, merkledb.MerkleDB, error) {
var batchOps []database.BatchOp
func GenerateMerkleRoot(ctx context.Context, tracer trace.Tracer, merkleItems [][]byte, consumeBytes bool) ([]byte, merkledb.MerkleDB, error) {
var batchOps []database.BatchOp = make([]database.BatchOp, 0, len(merkleItems))

for _, item := range merkleItems {
key := ToID(item)
Expand All @@ -148,7 +148,7 @@ func GenerateMerkleRoot(ctx context.Context, tracer trace.Tracer, merkleItems []
return nil, nil, err
}

view, err := db.NewView(ctx, merkledb.ViewChanges{BatchOps: batchOps})
view, err := db.NewView(ctx, merkledb.ViewChanges{BatchOps: batchOps, ConsumeBytes: consumeBytes})
if err != nil {
return nil, nil, err
}
Expand Down

0 comments on commit 0a94c7a

Please sign in to comment.