github.com/MetalBlockchain/metalgo@v1.11.9/vms/tracedvm/vertex_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  
     9  	"go.opentelemetry.io/otel/attribute"
    10  
    11  	"github.com/MetalBlockchain/metalgo/database"
    12  	"github.com/MetalBlockchain/metalgo/snow"
    13  	"github.com/MetalBlockchain/metalgo/snow/consensus/snowstorm"
    14  	"github.com/MetalBlockchain/metalgo/snow/engine/avalanche/vertex"
    15  	"github.com/MetalBlockchain/metalgo/snow/engine/common"
    16  	"github.com/MetalBlockchain/metalgo/trace"
    17  
    18  	oteltrace "go.opentelemetry.io/otel/trace"
    19  )
    20  
    21  var _ vertex.LinearizableVMWithEngine = (*vertexVM)(nil)
    22  
    23  type vertexVM struct {
    24  	vertex.LinearizableVMWithEngine
    25  	tracer trace.Tracer
    26  }
    27  
    28  func NewVertexVM(vm vertex.LinearizableVMWithEngine, tracer trace.Tracer) vertex.LinearizableVMWithEngine {
    29  	return &vertexVM{
    30  		LinearizableVMWithEngine: vm,
    31  		tracer:                   tracer,
    32  	}
    33  }
    34  
    35  func (vm *vertexVM) Initialize(
    36  	ctx context.Context,
    37  	chainCtx *snow.Context,
    38  	db database.Database,
    39  	genesisBytes,
    40  	upgradeBytes,
    41  	configBytes []byte,
    42  	toEngine chan<- common.Message,
    43  	fxs []*common.Fx,
    44  	appSender common.AppSender,
    45  ) error {
    46  	ctx, span := vm.tracer.Start(ctx, "vertexVM.Initialize")
    47  	defer span.End()
    48  
    49  	return vm.LinearizableVMWithEngine.Initialize(
    50  		ctx,
    51  		chainCtx,
    52  		db,
    53  		genesisBytes,
    54  		upgradeBytes,
    55  		configBytes,
    56  		toEngine,
    57  		fxs,
    58  		appSender,
    59  	)
    60  }
    61  
    62  func (vm *vertexVM) ParseTx(ctx context.Context, txBytes []byte) (snowstorm.Tx, error) {
    63  	ctx, span := vm.tracer.Start(ctx, "vertexVM.ParseTx", oteltrace.WithAttributes(
    64  		attribute.Int("txLen", len(txBytes)),
    65  	))
    66  	defer span.End()
    67  
    68  	tx, err := vm.LinearizableVMWithEngine.ParseTx(ctx, txBytes)
    69  	return &tracedTx{
    70  		Tx:     tx,
    71  		tracer: vm.tracer,
    72  	}, err
    73  }