github.com/MetalBlockchain/metalgo@v1.11.9/vms/metervm/build_block_with_context_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  
     9  	"github.com/MetalBlockchain/metalgo/snow/consensus/snowman"
    10  	"github.com/MetalBlockchain/metalgo/snow/engine/snowman/block"
    11  )
    12  
    13  func (vm *blockVM) BuildBlockWithContext(ctx context.Context, blockCtx *block.Context) (snowman.Block, error) {
    14  	if vm.buildBlockVM == nil {
    15  		return vm.BuildBlock(ctx)
    16  	}
    17  
    18  	start := vm.clock.Time()
    19  	blk, err := vm.buildBlockVM.BuildBlockWithContext(ctx, blockCtx)
    20  	end := vm.clock.Time()
    21  	duration := float64(end.Sub(start))
    22  	if err != nil {
    23  		vm.blockMetrics.buildBlockWithContextErr.Observe(duration)
    24  		return nil, err
    25  	}
    26  	vm.blockMetrics.buildBlockWithContext.Observe(duration)
    27  	return &meterBlock{
    28  		Block: blk,
    29  		vm:    vm,
    30  	}, nil
    31  }