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 }