github.com/MetalBlockchain/metalgo@v1.11.9/vms/tracedvm/batched_vm.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package tracedvm 5 6 import ( 7 "context" 8 "time" 9 10 "go.opentelemetry.io/otel/attribute" 11 12 "github.com/MetalBlockchain/metalgo/ids" 13 "github.com/MetalBlockchain/metalgo/snow/consensus/snowman" 14 "github.com/MetalBlockchain/metalgo/snow/engine/snowman/block" 15 16 oteltrace "go.opentelemetry.io/otel/trace" 17 ) 18 19 func (vm *blockVM) GetAncestors( 20 ctx context.Context, 21 blkID ids.ID, 22 maxBlocksNum int, 23 maxBlocksSize int, 24 maxBlocksRetrivalTime time.Duration, 25 ) ([][]byte, error) { 26 if vm.batchedVM == nil { 27 return nil, block.ErrRemoteVMNotImplemented 28 } 29 30 ctx, span := vm.tracer.Start(ctx, vm.getAncestorsTag, oteltrace.WithAttributes( 31 attribute.Stringer("blkID", blkID), 32 attribute.Int("maxBlocksNum", maxBlocksNum), 33 attribute.Int("maxBlocksSize", maxBlocksSize), 34 attribute.Int64("maxBlocksRetrivalTime", int64(maxBlocksRetrivalTime)), 35 )) 36 defer span.End() 37 38 return vm.batchedVM.GetAncestors( 39 ctx, 40 blkID, 41 maxBlocksNum, 42 maxBlocksSize, 43 maxBlocksRetrivalTime, 44 ) 45 } 46 47 func (vm *blockVM) BatchedParseBlock(ctx context.Context, blks [][]byte) ([]snowman.Block, error) { 48 if vm.batchedVM == nil { 49 return nil, block.ErrRemoteVMNotImplemented 50 } 51 52 ctx, span := vm.tracer.Start(ctx, vm.batchedParseBlockTag, oteltrace.WithAttributes( 53 attribute.Int("numBlocks", len(blks)), 54 )) 55 defer span.End() 56 57 blocks, err := vm.batchedVM.BatchedParseBlock(ctx, blks) 58 if err != nil { 59 return nil, err 60 } 61 62 wrappedBlocks := make([]snowman.Block, len(blocks)) 63 for i, block := range blocks { 64 wrappedBlocks[i] = &tracedBlock{ 65 Block: block, 66 vm: vm, 67 } 68 } 69 return wrappedBlocks, nil 70 }