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  }