github.com/ava-labs/avalanchego@v1.11.11/vms/metervm/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 metervm 5 6 import ( 7 "context" 8 "time" 9 10 "github.com/ava-labs/avalanchego/ids" 11 "github.com/ava-labs/avalanchego/snow/consensus/snowman" 12 "github.com/ava-labs/avalanchego/snow/engine/snowman/block" 13 ) 14 15 func (vm *blockVM) GetAncestors( 16 ctx context.Context, 17 blkID ids.ID, 18 maxBlocksNum int, 19 maxBlocksSize int, 20 maxBlocksRetrivalTime time.Duration, 21 ) ([][]byte, error) { 22 if vm.batchedVM == nil { 23 return nil, block.ErrRemoteVMNotImplemented 24 } 25 26 start := vm.clock.Time() 27 ancestors, err := vm.batchedVM.GetAncestors( 28 ctx, 29 blkID, 30 maxBlocksNum, 31 maxBlocksSize, 32 maxBlocksRetrivalTime, 33 ) 34 end := vm.clock.Time() 35 vm.blockMetrics.getAncestors.Observe(float64(end.Sub(start))) 36 return ancestors, err 37 } 38 39 func (vm *blockVM) BatchedParseBlock(ctx context.Context, blks [][]byte) ([]snowman.Block, error) { 40 if vm.batchedVM == nil { 41 return nil, block.ErrRemoteVMNotImplemented 42 } 43 44 start := vm.clock.Time() 45 blocks, err := vm.batchedVM.BatchedParseBlock(ctx, blks) 46 end := vm.clock.Time() 47 vm.blockMetrics.batchedParseBlock.Observe(float64(end.Sub(start))) 48 49 wrappedBlocks := make([]snowman.Block, len(blocks)) 50 for i, block := range blocks { 51 wrappedBlocks[i] = &meterBlock{ 52 Block: block, 53 vm: vm, 54 } 55 } 56 return wrappedBlocks, err 57 }