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 }