github.com/MetalBlockchain/metalgo@v1.11.9/vms/tracedvm/state_syncable_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/snow/engine/snowman/block"
    12  
    13  	oteltrace "go.opentelemetry.io/otel/trace"
    14  )
    15  
    16  func (vm *blockVM) StateSyncEnabled(ctx context.Context) (bool, error) {
    17  	if vm.ssVM == nil {
    18  		return false, nil
    19  	}
    20  
    21  	ctx, span := vm.tracer.Start(ctx, vm.stateSyncEnabledTag)
    22  	defer span.End()
    23  
    24  	return vm.ssVM.StateSyncEnabled(ctx)
    25  }
    26  
    27  func (vm *blockVM) GetOngoingSyncStateSummary(ctx context.Context) (block.StateSummary, error) {
    28  	if vm.ssVM == nil {
    29  		return nil, block.ErrStateSyncableVMNotImplemented
    30  	}
    31  
    32  	ctx, span := vm.tracer.Start(ctx, vm.getOngoingSyncStateSummaryTag)
    33  	defer span.End()
    34  
    35  	return vm.ssVM.GetOngoingSyncStateSummary(ctx)
    36  }
    37  
    38  func (vm *blockVM) GetLastStateSummary(ctx context.Context) (block.StateSummary, error) {
    39  	if vm.ssVM == nil {
    40  		return nil, block.ErrStateSyncableVMNotImplemented
    41  	}
    42  
    43  	ctx, span := vm.tracer.Start(ctx, vm.getLastStateSummaryTag)
    44  	defer span.End()
    45  
    46  	return vm.ssVM.GetLastStateSummary(ctx)
    47  }
    48  
    49  func (vm *blockVM) ParseStateSummary(ctx context.Context, summaryBytes []byte) (block.StateSummary, error) {
    50  	if vm.ssVM == nil {
    51  		return nil, block.ErrStateSyncableVMNotImplemented
    52  	}
    53  
    54  	ctx, span := vm.tracer.Start(ctx, vm.parseStateSummaryTag, oteltrace.WithAttributes(
    55  		attribute.Int("summaryLen", len(summaryBytes)),
    56  	))
    57  	defer span.End()
    58  
    59  	return vm.ssVM.ParseStateSummary(ctx, summaryBytes)
    60  }
    61  
    62  func (vm *blockVM) GetStateSummary(ctx context.Context, height uint64) (block.StateSummary, error) {
    63  	if vm.ssVM == nil {
    64  		return nil, block.ErrStateSyncableVMNotImplemented
    65  	}
    66  
    67  	ctx, span := vm.tracer.Start(ctx, vm.getStateSummaryTag, oteltrace.WithAttributes(
    68  		attribute.Int64("height", int64(height)),
    69  	))
    70  	defer span.End()
    71  
    72  	return vm.ssVM.GetStateSummary(ctx, height)
    73  }