public NdmSubprotocolFactory(
     IMessageSerializationService?messageSerializationService,
     INodeStatsManager?nodeStatsManager,
     ILogManager?logManager,
     IAccountService?accountService,
     IConsumerService?consumerService,
     INdmConsumerChannelManager?ndmConsumerChannelManager,
     IEcdsa?ecdsa,
     IWallet?wallet,
     INdmFaucet?faucet,
     PublicKey?nodeId,
     Address?providerAddress,
     Address?consumerAddress,
     bool verifySignature = true)
 {
     if (nodeStatsManager == null)
     {
         throw new ArgumentNullException(nameof(nodeStatsManager));
     }
     MessageSerializationService = messageSerializationService ?? throw new ArgumentNullException(nameof(messageSerializationService));
     NodeStatsManager            = nodeStatsManager ?? throw new ArgumentNullException(nameof(nodeStatsManager));
     LogManager                = logManager ?? throw new ArgumentNullException(nameof(logManager));
     AccountService            = accountService ?? throw new ArgumentNullException(nameof(accountService));
     ConsumerService           = consumerService ?? throw new ArgumentNullException(nameof(consumerService));
     NdmConsumerChannelManager = ndmConsumerChannelManager ?? throw new ArgumentNullException(nameof(ndmConsumerChannelManager));
     Ecdsa           = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     Wallet          = wallet ?? throw new ArgumentNullException(nameof(wallet));
     Faucet          = faucet ?? throw new ArgumentNullException(nameof(faucet));
     NodeId          = nodeId ?? throw new ArgumentNullException(nameof(nodeId));
     ProviderAddress = providerAddress;
     ConsumerAddress = consumerAddress;
     VerifySignature = verifySignature;
     AccountService.AddressChanged += (_, e) => ConsumerAddress = e.NewAddress;
 }
        public virtual async Task<INdmCapabilityConnector> InitAsync(IConfigProvider configProvider,
            IDbProvider dbProvider, string baseDbPath, IBlockTree blockTree,
            ITxPool txPool, ISpecProvider specProvider, IReceiptStorage receiptStorage, IWallet wallet,
            IFilterStore filterStore, IFilterManager filterManager,
            ITimestamper timestamper, IEthereumEcdsa ecdsa, IRpcModuleProvider rpcModuleProvider, IKeyStore keyStore,
            IJsonSerializer jsonSerializer, ICryptoRandom cryptoRandom, IEnode enode,
            INdmConsumerChannelManager consumerChannelManager, INdmDataPublisher dataPublisher, IGrpcServer grpcServer,
            INodeStatsManager nodeStatsManager, IProtocolsManager protocolsManager,
            IProtocolValidator protocolValidator, IMessageSerializationService messageSerializationService,
            bool enableUnsecuredDevWallet, IWebSocketsManager webSocketsManager, ILogManager logManager,
            IBlockProcessor blockProcessor)
        {
            var (config, services, faucet, accountService, consumerService, consumerAddress, providerAddress) =
                await PreInitAsync(configProvider, dbProvider, baseDbPath, blockTree, txPool, specProvider,
                    receiptStorage, wallet, filterStore, filterManager, timestamper, ecdsa, rpcModuleProvider, keyStore,
                    jsonSerializer, cryptoRandom, enode, consumerChannelManager, dataPublisher, grpcServer,
                    enableUnsecuredDevWallet, webSocketsManager, logManager, blockProcessor);
            if (!config.Enabled)
            {
                return default;
            }

            var subprotocolFactory = new NdmSubprotocolFactory(messageSerializationService, nodeStatsManager,
                logManager, accountService, consumerService, consumerChannelManager, ecdsa, wallet, faucet,
                enode.PublicKey, providerAddress, consumerAddress, config.VerifyP2PSignature);
            var protocolHandlerFactory = new ProtocolHandlerFactory(subprotocolFactory, protocolValidator,
                services.RequiredServices.EthRequestService, logManager);
            var capabilityConnector = new NdmCapabilityConnector(protocolsManager, protocolHandlerFactory,
                accountService, logManager);

            return capabilityConnector;
        }
 public void SetUp()
 {
     _networkConfig = new NetworkConfig();
     _statsManager  = Substitute.For <INodeStatsManager>();
     _peerStorage   = Substitute.For <INetworkStorage>();
     _loader        = new PeerLoader(_networkConfig, _statsManager, _peerStorage, LimboLogs.Instance);
 }
        public ProtocolsManager(
            ISyncPeerPool syncPeerPool,
            ISyncServer syncServer,
            ITxPool txPool,
            IDiscoveryApp discoveryApp,
            IMessageSerializationService serializationService,
            IRlpxPeer localPeer,
            INodeStatsManager nodeStatsManager,
            IProtocolValidator protocolValidator,
            INetworkStorage peerStorage,
            ISpecProvider specProvider,
            ILogManager logManager)
        {
            _syncPool          = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool));
            _syncServer        = syncServer ?? throw new ArgumentNullException(nameof(syncServer));
            _txPool            = txPool ?? throw new ArgumentNullException(nameof(txPool));
            _discoveryApp      = discoveryApp ?? throw new ArgumentNullException(nameof(discoveryApp));
            _serializer        = serializationService ?? throw new ArgumentNullException(nameof(serializationService));
            _localPeer         = localPeer ?? throw new ArgumentNullException(nameof(localPeer));
            _stats             = nodeStatsManager ?? throw new ArgumentNullException(nameof(nodeStatsManager));
            _protocolValidator = protocolValidator ?? throw new ArgumentNullException(nameof(protocolValidator));
            _peerStorage       = peerStorage ?? throw new ArgumentNullException(nameof(peerStorage));
            _specProvider      = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _logManager        = logManager ?? throw new ArgumentNullException(nameof(logManager));
            _logger            = _logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            _protocolFactories        = GetProtocolFactories();
            localPeer.SessionCreated += SessionCreated;
        }
Exemple #5
0
        public Synchronizer(
            IDbProvider dbProvider,
            ISpecProvider specProvider,
            IBlockTree blockTree,
            IReceiptStorage receiptStorage,
            IBlockValidator blockValidator,
            ISealValidator sealValidator,
            ISyncPeerPool peerPool,
            INodeStatsManager nodeStatsManager,
            ISyncModeSelector syncModeSelector,
            ISyncConfig syncConfig,
            ILogManager logManager)
        {
            _dbProvider       = dbProvider ?? throw new ArgumentNullException(nameof(dbProvider));
            _syncMode         = syncModeSelector ?? throw new ArgumentNullException(nameof(syncModeSelector));
            _logger           = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _specProvider     = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _blockTree        = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _receiptStorage   = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            _blockValidator   = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator));
            _sealValidator    = sealValidator ?? throw new ArgumentNullException(nameof(sealValidator));
            _syncConfig       = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig));
            _syncPeerPool     = peerPool ?? throw new ArgumentNullException(nameof(peerPool));
            _nodeStatsManager = nodeStatsManager ?? throw new ArgumentNullException(nameof(nodeStatsManager));
            _logManager       = logManager;

            _syncReport = new SyncReport(_syncPeerPool, _nodeStatsManager, _syncMode, syncConfig, logManager);
        }
Exemple #6
0
        public Synchronizer(
            ISpecProvider specProvider,
            IBlockTree blockTree,
            IReceiptStorage receiptStorage,
            IBlockValidator blockValidator,
            ISealValidator sealValidator,
            IEthSyncPeerPool peerPool,
            ISyncConfig syncConfig,
            INodeDataDownloader nodeDataDownloader,
            INodeStatsManager nodeStatsManager,
            ILogManager logManager)
        {
            _logger             = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _specProvider       = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _blockTree          = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _receiptStorage     = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            _syncConfig         = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig));
            _syncPeerPool       = peerPool ?? throw new ArgumentNullException(nameof(peerPool));
            _nodeDataDownloader = nodeDataDownloader ?? throw new ArgumentNullException(nameof(nodeDataDownloader));
            _nodeStatsManager   = nodeStatsManager ?? throw new ArgumentNullException(nameof(nodeStatsManager));

            SyncProgressResolver syncProgressResolver = new SyncProgressResolver(_blockTree, receiptStorage, _nodeDataDownloader, syncConfig, logManager);

            _syncMode        = new SyncModeSelector(syncProgressResolver, _syncPeerPool, _syncConfig, logManager);
            _syncReport      = new SyncReport(_syncPeerPool, _nodeStatsManager, syncConfig, syncProgressResolver, _syncMode, logManager);
            _blockDownloader = new BlockDownloader(_blockTree, blockValidator, sealValidator, _syncReport, receiptStorage, specProvider, logManager);
            if (syncConfig.FastBlocks)
            {
                FastBlocksFeed feed = new FastBlocksFeed(_specProvider, _blockTree, _receiptStorage, _syncPeerPool, syncConfig, _syncReport, logManager);
                _fastBlockDownloader = new FastBlocksDownloader(_syncPeerPool, feed, blockValidator, sealValidator, logManager);
            }
        }
    public void Should_allocate_by_speed_post_merge()
    {
        ulong[]           totalDifficulties = { 1, 3, 2 };
        int[]             averageSpeed      = { 5, 8, 10 };
        PublicKey[]       publicKeys        = { TestItem.PublicKeyA, TestItem.PublicKeyB, TestItem.PublicKeyC };
        PeerInfo[]        peers             = new PeerInfo[3];
        INodeStatsManager _nodeStatsManager = Substitute.For <INodeStatsManager>();

        for (int i = 0; i < 3; i++)
        {
            ISyncPeer syncPeer = Substitute.For <ISyncPeer>();
            syncPeer.IsInitialized.Returns(true);
            Node node = new Node(publicKeys[i], "192.168.1.18", i);
            syncPeer.Node.Returns(node);
            syncPeer.TotalDifficulty.Returns(new UInt256(totalDifficulties[i]));
            peers[i] = new PeerInfo(syncPeer);
            peers[i].HeadNumber.Returns(1);
            INodeStats nodeStats = Substitute.For <INodeStats>();
            nodeStats.GetAverageTransferSpeed(Arg.Any <TransferSpeedType>()).Returns(averageSpeed[i]);
            _nodeStatsManager.GetOrAdd(peers[i].SyncPeer.Node).Returns(nodeStats);
        }
        IPoSSwitcher poSSwitcher = Substitute.For <IPoSSwitcher>();

        poSSwitcher.TerminalTotalDifficulty.Returns(new UInt256(1));
        poSSwitcher.HasEverReachedTerminalBlock().Returns(true);

        IBeaconPivot beaconPivot = Substitute.For <IBeaconPivot>();

        IPeerAllocationStrategy mergePeerAllocationStrategy =
            (new MergeBlocksSyncPeerAllocationStrategyFactory(poSSwitcher, beaconPivot, Substitute.For <ILogManager>())).Create(new BlocksRequest());
        IBlockTree _blockTree = Substitute.For <IBlockTree>();
        PeerInfo?  info       = mergePeerAllocationStrategy.Allocate(null, peers, _nodeStatsManager, _blockTree);

        Assert.AreEqual(info, peers[2]);    // peer with highest highest speed
    }
 public NdmProviderSubprotocol(ISession p2PSession, INodeStatsManager nodeStatsManager,
                               IMessageSerializationService serializer, ILogManager logManager, IConsumerService consumerService,
                               IProviderService providerService, INdmConsumerChannelManager ndmConsumerChannelManager, IEcdsa ecdsa,
                               IWallet wallet, INdmFaucet faucet, PublicKey nodeId, Address configuredProviderAddress,
                               Address configuredConsumerAddress, bool verifySignature = true) : base(p2PSession, nodeStatsManager,
                                                                                                      serializer, logManager, consumerService, ndmConsumerChannelManager, ecdsa, wallet, faucet, nodeId,
                                                                                                      configuredProviderAddress, configuredConsumerAddress, verifySignature)
 {
     _providerService = providerService;
     MessageHandlers[NdmMessageCode.GetDataAssets] =
         message => Handle(Deserialize <GetDataAssetsMessage>(message.Data));
     MessageHandlers[NdmMessageCode.GetDepositApprovals] =
         message => Handle(Deserialize <GetDepositApprovalsMessage>(message.Data));
     MessageHandlers[NdmMessageCode.RequestDepositApproval] =
         message => Handle(Deserialize <RequestDepositApprovalMessage>(message.Data));
     MessageHandlers[NdmMessageCode.DataDeliveryReceipt] =
         message => Handle(Deserialize <DataDeliveryReceiptMessage>(message.Data));
     MessageHandlers[NdmMessageCode.DisableDataStream] =
         message => Handle(Deserialize <DisableDataStreamMessage>(message.Data));
     MessageHandlers[NdmMessageCode.EnableDataStream] =
         message => Handle(Deserialize <EnableDataStreamMessage>(message.Data));
     MessageHandlers[NdmMessageCode.FinishSession] =
         message => Handle(Deserialize <FinishSessionMessage>(message.Data));
     MessageHandlers[NdmMessageCode.DataRequest] =
         message => Handle(Deserialize <DataRequestMessage>(message.Data));
     MessageHandlers[NdmMessageCode.ConsumerAddressChanged] =
         message => Handle(Deserialize <ConsumerAddressChangedMessage>(message.Data));
     MessageHandlers[NdmMessageCode.RequestEth] =
         message => Handle(Deserialize <RequestEthMessage>(message.Data));
 }
        public PeerInfo?Allocate(PeerInfo?currentPeer, IEnumerable <PeerInfo> peers, INodeStatsManager nodeStatsManager, IBlockTree blockTree)
        {
            UInt256?currentDiffOrNull = blockTree.BestSuggestedHeader?.TotalDifficulty;

            if (currentDiffOrNull == null)
            {
                return(_strategy.Allocate(currentPeer, peers, nodeStatsManager, blockTree));
            }

            UInt256 currentDiff = currentDiffOrNull.Value;

            switch (_selectionType)
            {
            case TotalDiffSelectionType.Better:
                currentDiff += UInt256.One;
                break;

            case TotalDiffSelectionType.AtLeastTheSame:
                break;

            case TotalDiffSelectionType.CanBeSlightlyWorse:
                UInt256 lastBlockDiff = blockTree.BestSuggestedHeader?.Difficulty ?? 0;
                if (currentDiff >= lastBlockDiff)
                {
                    currentDiff -= lastBlockDiff;
                }

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(_strategy.Allocate(currentPeer, peers.Where(p => p.TotalDifficulty >= currentDiff), nodeStatsManager, blockTree));
        }
Exemple #10
0
        public void AllocateBestPeer(IEnumerable <PeerInfo> peers, INodeStatsManager nodeStatsManager, IBlockTree blockTree, string reason)
        {
            PeerInfo current  = Current;
            PeerInfo selected = _peerSelectionStrategy.Select(Current, peers, nodeStatsManager, blockTree);

            if (selected == current)
            {
                return;
            }

            AllocationChangeEventArgs args = null;

            lock (_allocationLock)
            {
                if (selected.IsAllocated)
                {
                    throw new InvalidAsynchronousStateException("Selected an already allocated peer");
                }

                selected.IsAllocated = true;
                Current = selected;
                args    = new AllocationChangeEventArgs(current, selected);
                if (current != null)
                {
                    current.IsAllocated = false;
                }
            }

            Replaced?.Invoke(this, args);
        }
 public Context()
 {
     BlockTree    = Substitute.For <IBlockTree>();
     Stats        = Substitute.For <INodeStatsManager>();
     PeerStrategy = new TotalDifficultyBetterPeerStrategy(LimboLogs.Instance);
     Pool         = new SyncPeerPool(BlockTree, Stats, PeerStrategy, 25, 50, LimboLogs.Instance);
 }
Exemple #12
0
        public PeerInfo Select(PeerInfo currentPeer, IEnumerable <PeerInfo> peers, INodeStatsManager nodeStatsManager, IBlockTree blockTree)
        {
            IPeerSelectionStrategy strategy = _priority ? BySpeedSelectionStrategy.Fastest : BySpeedSelectionStrategy.Slowest;

            peers = _minNumber == null ? peers : peers.Where(p => p.HeadNumber > _minNumber);
            return(strategy.Select(currentPeer, peers, nodeStatsManager, blockTree));
        }
 public SyncPeerPool(IBlockTree blockTree,
                     INodeStatsManager nodeStatsManager,
                     int peersMaxCount,
                     ILogManager logManager)
     : this(blockTree, nodeStatsManager, peersMaxCount, 1000, logManager)
 {
 }
Exemple #14
0
 public PeerLoader(INetworkConfig networkConfig, INodeStatsManager stats, INetworkStorage peerStorage, ILogManager logManager)
 {
     _networkConfig = networkConfig ?? throw new ArgumentNullException(nameof(networkConfig));
     _stats         = stats ?? throw new ArgumentNullException(nameof(stats));
     _peerStorage   = peerStorage ?? throw new ArgumentNullException(nameof(peerStorage));
     _logger        = logManager.GetClassLogger();
 }
Exemple #15
0
        public ProtocolsManager(
            ISynchronizationManager synchronizationManager,
            ITransactionPool transactionPool,
            IDiscoveryApp discoveryApp,
            IMessageSerializationService serializationService,
            IRlpxPeer localPeer,
            INodeStatsManager nodeStatsManager,
            IProtocolValidator protocolValidator,
            INetworkStorage peerStorage,
            IPerfService perfService,
            ILogManager logManager)
        {
            _syncManager       = synchronizationManager ?? throw new ArgumentNullException(nameof(synchronizationManager));
            _transactionPool   = transactionPool ?? throw new ArgumentNullException(nameof(transactionPool));
            _discoveryApp      = discoveryApp ?? throw new ArgumentNullException(nameof(discoveryApp));
            _serializer        = serializationService ?? throw new ArgumentNullException(nameof(serializationService));
            _localPeer         = localPeer ?? throw new ArgumentNullException(nameof(localPeer));
            _stats             = nodeStatsManager ?? throw new ArgumentNullException(nameof(nodeStatsManager));
            _protocolValidator = protocolValidator ?? throw new ArgumentNullException(nameof(protocolValidator));
            _perfService       = perfService ?? throw new ArgumentNullException(nameof(perfService));
            _peerStorage       = peerStorage ?? throw new ArgumentNullException(nameof(peerStorage));
            _logManager        = logManager ?? throw new ArgumentNullException(nameof(logManager));
            _logger            = _logManager.GetClassLogger();

            _syncManager.SyncEvent   += OnSyncEvent;
            localPeer.SessionCreated += SessionCreated;
        }
Exemple #16
0
 public Eth63ProtocolHandler(ISession session,
                             IMessageSerializationService serializer,
                             INodeStatsManager nodeStatsManager,
                             ISyncServer syncServer,
                             ILogManager logManager,
                             ITxPool txPool) : base(session, serializer, nodeStatsManager, syncServer, logManager, txPool)
 {
 }
Exemple #17
0
        public PeerInfo Allocate(PeerInfo currentPeer, IEnumerable <PeerInfo> peers, INodeStatsManager nodeStatsManager, IBlockTree blockTree)
        {
            IPeerAllocationStrategy strategy = _priority ? _fastest : _slowest;

            peers = _minNumber == null ? peers : peers.Where(p => p.HeadNumber > _minNumber);
            PeerInfo allocated = strategy.Allocate(currentPeer, peers, nodeStatsManager, blockTree);

            return(allocated);
        }
 public WitProtocolHandler(ISession session,
                           IMessageSerializationService serializer,
                           INodeStatsManager nodeStats,
                           ISyncServer syncServer,
                           ILogManager logManager) : base(session, nodeStats, serializer, logManager)
 {
     _syncServer      = syncServer ?? throw new ArgumentNullException(nameof(syncServer));
     _witnessRequests = new MessageQueue <GetBlockWitnessHashesMessage, Keccak[]>(Send);
 }
Exemple #19
0
 public SyncPeersReport(ISyncPeerPool peerPool, INodeStatsManager statsManager, ILogManager logManager)
 {
     lock (_writeLock)
     {
         _peerPool = peerPool ?? throw new ArgumentNullException(nameof(peerPool));
         _stats    = statsManager ?? throw new ArgumentNullException(nameof(statsManager));
         _logger   = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     }
 }
 public LesProtocolHandler(
     ISession session,
     IMessageSerializationService serializer,
     INodeStatsManager statsManager,
     ISyncServer syncServer,
     ILogManager logManager) : base(session, serializer, statsManager, syncServer, logManager)
 {
     _lastSentBlock = SyncServer.Head;
 }
Exemple #21
0
 public Eth63ProtocolHandler(
     ISession session,
     IMessageSerializationService serializer,
     INodeStatsManager nodeStatsManager,
     ISynchronizationManager syncManager,
     ILogManager logManager, IPerfService perfService,
     ITransactionPool transactionPool) : base(session, serializer, nodeStatsManager, syncManager, logManager, perfService, transactionPool)
 {
 }
Exemple #22
0
        public EthSyncPeerPool(IBlockTree blockTree, INodeStatsManager nodeStatsManager, ISyncConfig syncConfig, ILogManager logManager)
        {
            _blockTree  = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _stats      = nodeStatsManager ?? throw new ArgumentNullException(nameof(nodeStatsManager));
            _syncConfig = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig));
            _logger     = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            _syncPeersReport = new SyncPeersReport(this, _stats, logManager);
        }
Exemple #23
0
 public NodeLifecycleManagerFactory(INodeTable nodeTable, IDiscoveryMessageFactory discoveryMessageFactory, IEvictionManager evictionManager, INodeStatsManager nodeStatsManager, IDiscoveryConfig discoveryConfig, ILogManager logManager)
 {
     _logger                  = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _nodeTable               = nodeTable ?? throw new ArgumentNullException(nameof(nodeTable));
     _discoveryConfig         = discoveryConfig ?? throw new ArgumentNullException(nameof(discoveryConfig));
     _discoveryMessageFactory = discoveryMessageFactory ?? throw new ArgumentNullException(nameof(discoveryMessageFactory));
     _evictionManager         = evictionManager ?? throw new ArgumentNullException(nameof(evictionManager));
     _nodeStatsManager        = nodeStatsManager ?? throw new ArgumentNullException(nameof(nodeStatsManager));
 }
Exemple #24
0
        protected ProtocolHandlerBase(ISession session, INodeStatsManager nodeStats, IMessageSerializationService serializer, ILogManager logManager)
        {
            Logger       = logManager?.GetClassLogger(GetType()) ?? throw new ArgumentNullException(nameof(logManager));
            StatsManager = nodeStats ?? throw new ArgumentNullException(nameof(nodeStats));
            Session      = session ?? throw new ArgumentNullException(nameof(session));

            _serializer           = serializer ?? throw new ArgumentNullException(nameof(serializer));
            _initCompletionSource = new TaskCompletionSource <MessageBase>();
        }
        public void SetUp()
        {
            _networkConfig   = new NetworkConfig();
            _discoveryConfig = new DiscoveryConfig();
            _statsManager    = Substitute.For <INodeStatsManager>();
            _peerStorage     = Substitute.For <INetworkStorage>();
            IRlpxHost rlpxHost = Substitute.For <IRlpxHost>();

            _loader = new NodesLoader(_networkConfig, _statsManager, _peerStorage, rlpxHost, LimboLogs.Instance);
        }
Exemple #26
0
 public Eth62ProtocolHandler(
     ISession session,
     IMessageSerializationService serializer,
     INodeStatsManager statsManager,
     ISyncServer syncServer,
     ITxPool txPool,
     ILogManager logManager) : base(session, serializer, statsManager, syncServer, txPool, logManager)
 {
     _floodController = new TxFloodController(this, Logger);
 }
 public Eth63ProtocolHandler(ISession session,
                             IMessageSerializationService serializer,
                             INodeStatsManager nodeStatsManager,
                             ISyncServer syncServer,
                             ITxPool txPool,
                             ILogManager logManager) : base(session, serializer, nodeStatsManager, syncServer, txPool, logManager)
 {
     _nodeDataRequests = new MessageQueue <GetNodeDataMessage, byte[][]>(Send);
     _receiptsRequests = new MessageQueue <GetReceiptsMessage, TxReceipt[][]>(Send);
 }
 public Eth64ProtocolHandler(ISession session,
                             IMessageSerializationService serializer,
                             INodeStatsManager nodeStatsManager,
                             ISyncServer syncServer,
                             ITxPool txPool,
                             ISpecProvider specProvider,
                             ILogManager logManager) : base(session, serializer, nodeStatsManager, syncServer, txPool, logManager)
 {
     _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
 }
 public AaProtocolHandler(ISession session,
                          IMessageSerializationService serializer,
                          INodeStatsManager nodeStatsManager,
                          IUserOperationPool userOperationPool,
                          ILogManager logManager)
     : base(session, nodeStatsManager, serializer, logManager)
 {
     _session           = session ?? throw new ArgumentNullException(nameof(session));
     _userOperationPool = userOperationPool ?? throw new ArgumentNullException(nameof(userOperationPool));
 }
        public Task InitNetworkProtocol()
        {
            if (_accountAbstractionConfig.Enabled)
            {
                if (_nethermindApi is null)
                {
                    throw new ArgumentNullException(nameof(_nethermindApi));
                }

                // init all relevant objects if not already initialized
                foreach (Address entryPoint in _entryPointContractAddresses)
                {
                    UserOperationPool(entryPoint);
                    UserOperationSimulator(entryPoint);
                    UserOperationTxBuilder(entryPoint);
                }

                if (_userOperationPools.Count == 0)
                {
                    throw new ArgumentNullException(nameof(UserOperationPool));
                }

                IProtocolsManager protocolsManager = _nethermindApi.ProtocolsManager ??
                                                     throw new ArgumentNullException(
                                                               nameof(_nethermindApi.ProtocolsManager));
                IMessageSerializationService serializer = _nethermindApi.MessageSerializationService ??
                                                          throw new ArgumentNullException(
                                                                    nameof(_nethermindApi.MessageSerializationService));
                INodeStatsManager stats = _nethermindApi.NodeStatsManager ??
                                          throw new ArgumentNullException(nameof(_nethermindApi.NodeStatsManager));
                ILogManager logManager = _nethermindApi.LogManager ??
                                         throw new ArgumentNullException(nameof(_nethermindApi.LogManager));

                AccountAbstractionPeerManager peerManager = new(_userOperationPools, UserOperationBroadcaster, _accountAbstractionConfig.AaPriorityPeersMaxCount, _logger);

                serializer.Register(new UserOperationsMessageSerializer());
                protocolsManager.AddProtocol(Protocol.AA,
                                             session => new AaProtocolHandler(session, serializer, stats, _userOperationPools, peerManager, logManager));
                protocolsManager.AddSupportedCapability(new Capability(Protocol.AA, 0));

                if (_logger.IsInfo)
                {
                    _logger.Info("Initialized Account Abstraction network protocol");
                }
            }
            else
            {
                if (_logger.IsInfo)
                {
                    _logger.Info("Skipping Account Abstraction network protocol");
                }
            }

            return(Task.CompletedTask);
        }