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 }