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  }