github.com/MetalBlockchain/subnet-evm@v0.4.9/plugin/evm/network_handler.go (about)

     1  // (c) 2023, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package evm
     5  
     6  import (
     7  	"context"
     8  
     9  	"github.com/MetalBlockchain/metalgo/codec"
    10  	"github.com/MetalBlockchain/metalgo/ids"
    11  	"github.com/MetalBlockchain/subnet-evm/metrics"
    12  	"github.com/MetalBlockchain/subnet-evm/plugin/evm/message"
    13  	syncHandlers "github.com/MetalBlockchain/subnet-evm/sync/handlers"
    14  	syncStats "github.com/MetalBlockchain/subnet-evm/sync/handlers/stats"
    15  	"github.com/MetalBlockchain/subnet-evm/trie"
    16  	warpHandlers "github.com/MetalBlockchain/subnet-evm/warp/handlers"
    17  )
    18  
    19  var _ message.RequestHandler = &networkHandler{}
    20  
    21  type networkHandler struct {
    22  	stateTrieLeafsRequestHandler *syncHandlers.LeafsRequestHandler
    23  	blockRequestHandler          *syncHandlers.BlockRequestHandler
    24  	codeRequestHandler           *syncHandlers.CodeRequestHandler
    25  	signatureRequestHandler      warpHandlers.SignatureRequestHandler
    26  }
    27  
    28  // newNetworkHandler constructs the handler for serving network requests.
    29  func newNetworkHandler(
    30  	provider syncHandlers.SyncDataProvider,
    31  	evmTrieDB *trie.Database,
    32  	networkCodec codec.Manager,
    33  ) message.RequestHandler {
    34  	syncStats := syncStats.NewHandlerStats(metrics.Enabled)
    35  	return &networkHandler{
    36  		// State sync handlers
    37  		stateTrieLeafsRequestHandler: syncHandlers.NewLeafsRequestHandler(evmTrieDB, provider, networkCodec, syncStats),
    38  		blockRequestHandler:          syncHandlers.NewBlockRequestHandler(provider, networkCodec, syncStats),
    39  		codeRequestHandler:           syncHandlers.NewCodeRequestHandler(evmTrieDB.DiskDB(), networkCodec, syncStats),
    40  
    41  		// TODO: initialize actual signature request handler when warp is ready
    42  		signatureRequestHandler: &warpHandlers.NoopSignatureRequestHandler{},
    43  	}
    44  }
    45  
    46  func (n networkHandler) HandleTrieLeafsRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, leafsRequest message.LeafsRequest) ([]byte, error) {
    47  	return n.stateTrieLeafsRequestHandler.OnLeafsRequest(ctx, nodeID, requestID, leafsRequest)
    48  }
    49  
    50  func (n networkHandler) HandleBlockRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, blockRequest message.BlockRequest) ([]byte, error) {
    51  	return n.blockRequestHandler.OnBlockRequest(ctx, nodeID, requestID, blockRequest)
    52  }
    53  
    54  func (n networkHandler) HandleCodeRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, codeRequest message.CodeRequest) ([]byte, error) {
    55  	return n.codeRequestHandler.OnCodeRequest(ctx, nodeID, requestID, codeRequest)
    56  }
    57  
    58  func (n networkHandler) HandleSignatureRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, signatureRequest message.SignatureRequest) ([]byte, error) {
    59  	return n.signatureRequestHandler.OnSignatureRequest(ctx, nodeID, requestID, signatureRequest)
    60  }