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 6764ef2
Show file tree
Hide file tree
Showing 3 changed files with 14 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
merkleItems := 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
8 changes: 8 additions & 0 deletions hypersdk.code-workspace
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"folders": [
{
"path": "."
}
],
"settings": {}
}
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) {
batchOps := 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 6764ef2

Please sign in to comment.