Skip to content

Commit 6764ef2

Browse files
committed
preallocate memory for merkle array and consumebytes flag
1 parent cc30fb1 commit 6764ef2

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

chain/block.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -293,15 +293,16 @@ func (b *StatelessBlock) initializeBuilt(
293293
}
294294

295295
// transaction hash generation
296-
var merkleItems [][]byte
296+
merkleItems := make([][]byte, 0, len(b.Txs)+len(b.results))
297297
for _, tx := range b.Txs {
298298
merkleItems = append(merkleItems, tx.Bytes())
299299
}
300300
for _, result := range b.results {
301301
merkleItems = append(merkleItems, result.Output)
302302
}
303303

304-
root, _, err := utils.GenerateMerkleRoot(ctx, b.vm.Tracer(), merkleItems)
304+
// consume bytes to avoid extra copying
305+
root, _, err := utils.GenerateMerkleRoot(ctx, b.vm.Tracer(), merkleItems, true)
305306
if err != nil {
306307
return err
307308
}

hypersdk.code-workspace

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"folders": [
3+
{
4+
"path": "."
5+
}
6+
],
7+
"settings": {}
8+
}

utils/utils.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ func LoadBytes(filename string, expectedSize int) ([]byte, error) {
125125

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

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

151-
view, err := db.NewView(ctx, merkledb.ViewChanges{BatchOps: batchOps})
151+
view, err := db.NewView(ctx, merkledb.ViewChanges{BatchOps: batchOps, ConsumeBytes: consumeBytes})
152152
if err != nil {
153153
return nil, nil, err
154154
}

0 commit comments

Comments
 (0)