コード例 #1
0
 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;
 }
コード例 #2
0
ファイル: NdmInitializer.cs プロジェクト: phahulin/nethermind
        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;
        }
コード例 #3
0
ファイル: PeerLoaderTests.cs プロジェクト: lhutyra/nethermind
 public void SetUp()
 {
     _networkConfig = new NetworkConfig();
     _statsManager  = Substitute.For <INodeStatsManager>();
     _peerStorage   = Substitute.For <INetworkStorage>();
     _loader        = new PeerLoader(_networkConfig, _statsManager, _peerStorage, LimboLogs.Instance);
 }
コード例 #4
0
        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;
        }
コード例 #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);
        }
コード例 #6
0
ファイル: Synchronizer.cs プロジェクト: fosfuan/nethermind
        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);
            }
        }
コード例 #7
0
    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
    }
コード例 #8
0
 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));
 }
コード例 #9
0
        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));
        }
コード例 #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);
        }
コード例 #11
0
 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);
 }
コード例 #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));
        }
コード例 #13
0
 public SyncPeerPool(IBlockTree blockTree,
                     INodeStatsManager nodeStatsManager,
                     int peersMaxCount,
                     ILogManager logManager)
     : this(blockTree, nodeStatsManager, peersMaxCount, 1000, logManager)
 {
 }
コード例 #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();
 }
コード例 #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;
        }
コード例 #16
0
 public Eth63ProtocolHandler(ISession session,
                             IMessageSerializationService serializer,
                             INodeStatsManager nodeStatsManager,
                             ISyncServer syncServer,
                             ILogManager logManager,
                             ITxPool txPool) : base(session, serializer, nodeStatsManager, syncServer, logManager, txPool)
 {
 }
コード例 #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);
        }
コード例 #18
0
 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);
 }
コード例 #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));
     }
 }
コード例 #20
0
 public LesProtocolHandler(
     ISession session,
     IMessageSerializationService serializer,
     INodeStatsManager statsManager,
     ISyncServer syncServer,
     ILogManager logManager) : base(session, serializer, statsManager, syncServer, logManager)
 {
     _lastSentBlock = SyncServer.Head;
 }
コード例 #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)
 {
 }
コード例 #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);
        }
コード例 #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));
 }
コード例 #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>();
        }
コード例 #25
0
        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);
        }
コード例 #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);
 }
コード例 #27
0
 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);
 }
コード例 #28
0
 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));
 }
コード例 #29
0
 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));
 }
コード例 #30
0
        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);
        }