github.com/dim4egster/coreth@v0.10.2/sync/handlers/handler.go (about)

     1  // (c) 2021-2022, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package handlers
     5  
     6  import (
     7  	"context"
     8  
     9  	"github.com/dim4egster/qmallgo/codec"
    10  	"github.com/dim4egster/qmallgo/ids"
    11  	"github.com/dim4egster/coreth/core/state/snapshot"
    12  	"github.com/dim4egster/coreth/core/types"
    13  	"github.com/dim4egster/coreth/plugin/evm/message"
    14  	"github.com/dim4egster/coreth/sync/handlers/stats"
    15  	"github.com/dim4egster/coreth/trie"
    16  	"github.com/ethereum/go-ethereum/common"
    17  )
    18  
    19  var _ message.RequestHandler = &syncHandler{}
    20  
    21  type BlockProvider interface {
    22  	GetBlock(common.Hash, uint64) *types.Block
    23  }
    24  
    25  type SnapshotProvider interface {
    26  	Snapshots() *snapshot.Tree
    27  }
    28  
    29  type SyncDataProvider interface {
    30  	BlockProvider
    31  	SnapshotProvider
    32  }
    33  
    34  type syncHandler struct {
    35  	stateTrieLeafsRequestHandler  *LeafsRequestHandler
    36  	atomicTrieLeafsRequestHandler *LeafsRequestHandler
    37  	blockRequestHandler           *BlockRequestHandler
    38  	codeRequestHandler            *CodeRequestHandler
    39  }
    40  
    41  // NewSyncHandler constructs the handler for serving state sync.
    42  func NewSyncHandler(
    43  	provider SyncDataProvider,
    44  	evmTrieDB *trie.Database,
    45  	atomicTrieDB *trie.Database,
    46  	networkCodec codec.Manager,
    47  	stats stats.HandlerStats,
    48  ) message.RequestHandler {
    49  	return &syncHandler{
    50  		stateTrieLeafsRequestHandler:  NewLeafsRequestHandler(evmTrieDB, provider, networkCodec, stats),
    51  		atomicTrieLeafsRequestHandler: NewLeafsRequestHandler(atomicTrieDB, nil, networkCodec, stats),
    52  		blockRequestHandler:           NewBlockRequestHandler(provider, networkCodec, stats),
    53  		codeRequestHandler:            NewCodeRequestHandler(evmTrieDB.DiskDB(), networkCodec, stats),
    54  	}
    55  }
    56  
    57  func (s *syncHandler) HandleStateTrieLeafsRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, leafsRequest message.LeafsRequest) ([]byte, error) {
    58  	return s.stateTrieLeafsRequestHandler.OnLeafsRequest(ctx, nodeID, requestID, leafsRequest)
    59  }
    60  
    61  func (s *syncHandler) HandleAtomicTrieLeafsRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, leafsRequest message.LeafsRequest) ([]byte, error) {
    62  	return s.atomicTrieLeafsRequestHandler.OnLeafsRequest(ctx, nodeID, requestID, leafsRequest)
    63  }
    64  
    65  func (s *syncHandler) HandleBlockRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, blockRequest message.BlockRequest) ([]byte, error) {
    66  	return s.blockRequestHandler.OnBlockRequest(ctx, nodeID, requestID, blockRequest)
    67  }
    68  
    69  func (s *syncHandler) HandleCodeRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, codeRequest message.CodeRequest) ([]byte, error) {
    70  	return s.codeRequestHandler.OnCodeRequest(ctx, nodeID, requestID, codeRequest)
    71  }