예제 #1
0
 public InitializeNetwork(EthereumRunnerContext context)
 {
     _ctx           = context;
     _logger        = _ctx.LogManager.GetClassLogger();
     _networkConfig = _ctx.Config <INetworkConfig>();
     _syncConfig    = _ctx.Config <ISyncConfig>();
 }
예제 #2
0
        public EthereumRunner(IRpcModuleProvider rpcModuleProvider, IConfigProvider configurationProvider,
                              ILogManager logManager, IGrpcServer grpcServer,
                              INdmConsumerChannelManager ndmConsumerChannelManager, INdmDataPublisher ndmDataPublisher,
                              INdmInitializer ndmInitializer, IWebSocketsManager webSocketsManager,
                              IJsonSerializer ethereumJsonSerializer)
        {
            _logManager = logManager ?? throw new ArgumentNullException(nameof(logManager));
            _grpcServer = grpcServer;
            _ndmConsumerChannelManager = ndmConsumerChannelManager;
            _ndmDataPublisher          = ndmDataPublisher;
            _ndmInitializer            = ndmInitializer;
            _webSocketsManager         = webSocketsManager;
            _ethereumJsonSerializer    = ethereumJsonSerializer;
            _logger = _logManager.GetClassLogger();

            InitRlp();
            _configProvider    = configurationProvider ?? throw new ArgumentNullException(nameof(configurationProvider));
            _rpcModuleProvider = rpcModuleProvider ?? throw new ArgumentNullException(nameof(rpcModuleProvider));
            _initConfig        = configurationProvider.GetConfig <IInitConfig>();
            _txPoolConfig      = configurationProvider.GetConfig <ITxPoolConfig>();
            _perfService       = new PerfService(_logManager);

            _networkConfig            = _configProvider.GetConfig <INetworkConfig>();
            _ipResolver               = new IpResolver(_networkConfig, _logManager);
            _networkConfig.ExternalIp = _ipResolver.ExternalIp.ToString();
            _networkConfig.LocalIp    = _ipResolver.LocalIp.ToString();
        }
예제 #3
0
 public InitializeNetwork(INethermindApi api)
 {
     _api           = api;
     _logger        = _api.LogManager.GetClassLogger();
     _networkConfig = _api.Config <INetworkConfig>();
     _syncConfig    = _api.Config <ISyncConfig>();
 }
예제 #4
0
 public NodesLocator(INodeTable nodeTable, IDiscoveryManager discoveryManager, IConfigProvider configurationProvider, ILogManager logManager)
 {
     _logger = logManager?.GetClassLogger();
     _configurationProvider = configurationProvider.GetConfig <NetworkConfig>();
     _nodeTable             = nodeTable;
     _discoveryManager      = discoveryManager;
 }
        public void Initialize()
        {
            NetworkNodeDecoder.Init();
            SetupNodeIds();

            var logManager = NullLogManager.Instance;

            //setting config to store 3 nodes in a bucket and for table to have one bucket//setting config to store 3 nodes in a bucket and for table to have one bucket

            _configurationProvider = new ConfigProvider();
            INetworkConfig networkConfig = _configurationProvider.GetConfig <INetworkConfig>();

            networkConfig.PongTimeout  = 50;
            networkConfig.BucketSize   = 3;
            networkConfig.BucketsCount = 1;

            IKeyStoreConfig keyStoreConfig = _configurationProvider.GetConfig <IKeyStoreConfig>();
            IStatsConfig    statsConfig    = _configurationProvider.GetConfig <IStatsConfig>();

            _nodeFactory = new NodeFactory(LimboLogs.Instance);
            var calculator = new NodeDistanceCalculator(networkConfig);

            _nodeTable = new NodeTable(_nodeFactory, new FileKeyStore(keyStoreConfig, new EthereumJsonSerializer(), new AesEncrypter(keyStoreConfig, logManager), new CryptoRandom(), logManager), calculator, networkConfig, logManager);
            _nodeTable.Initialize();

            _timestamp = new Timestamp();

            var evictionManager  = new EvictionManager(_nodeTable, logManager);
            var lifecycleFactory = new NodeLifecycleManagerFactory(_nodeFactory, _nodeTable, new DiscoveryMessageFactory(networkConfig, _timestamp), evictionManager, new NodeStatsProvider(statsConfig, _nodeFactory, logManager, true), networkConfig, logManager);

            _udpClient = Substitute.For <IMessageSender>();

            _discoveryManager = new DiscoveryManager(lifecycleFactory, _nodeFactory, _nodeTable, new NetworkStorage("test", networkConfig, logManager, new PerfService(logManager)), networkConfig, logManager);
            _discoveryManager.MessageSender = _udpClient;
        }
예제 #6
0
 public PeerSessionLogger(ILogManager logManager, IConfigProvider configProvider, IPerfService perfService)
 {
     _perfService   = perfService;
     _logger        = logManager.GetClassLogger();
     _statsConfig   = configProvider.GetConfig <IStatsConfig>();
     _networkConfig = configProvider.GetConfig <INetworkConfig>();
 }
예제 #7
0
        public async Task Execute(CancellationToken cancellationToken)
        {
            // why is the await Task.Run here?
            await Task.Run(() =>
            {
                IKeyStoreConfig keyStoreConfig = _context.Config <IKeyStoreConfig>();
                INetworkConfig networkConfig   = _context.Config <INetworkConfig>();

                AesEncrypter encrypter = new AesEncrypter(
                    keyStoreConfig,
                    _context.LogManager);

                _context.KeyStore = new FileKeyStore(
                    keyStoreConfig,
                    _context.EthereumJsonSerializer,
                    encrypter,
                    _context.CryptoRandom,
                    _context.LogManager);

                _context.Wallet = _context.Config <IInitConfig>() switch
                {
                    var config when config.EnableUnsecuredDevWallet&& config.KeepDevWalletInMemory => new DevWallet(_context.Config <IWalletConfig>(), _context.LogManager),
                    var config when config.EnableUnsecuredDevWallet&& !config.KeepDevWalletInMemory => new DevKeyStoreWallet(_context.KeyStore, _context.LogManager),
                    _ => new ProtectedKeyStoreWallet(_context.KeyStore, new ProtectedPrivateKeyFactory(_context.CryptoRandom, _context.Timestamper), _context.Timestamper, _context.LogManager),
                };

                INodeKeyManager nodeKeyManager = new NodeKeyManager(_context.CryptoRandom, _context.KeyStore, keyStoreConfig, _context.LogManager);
                _context.NodeKey           = nodeKeyManager.LoadNodeKey();
                _context.OriginalSignerKey = nodeKeyManager.LoadSignerKey();
                _context.Enode             = new Enode(_context.NodeKey.PublicKey, IPAddress.Parse(networkConfig.ExternalIp), networkConfig.P2PPort);

                _context.LogManager.SetGlobalVariable("enode", _context.Enode.ToString());
            });
        }
예제 #8
0
        //TODO Timer to periodically check active peers and move new to active based on max size and compatibility - stats and capabilities + update peers in synchronization manager
        //TODO Remove active and synch on disconnect
        //TODO Update Stats on disconnect, other events
        //TODO update runner to run discovery

        public PeerManager(IRlpxPeer localPeer,
                           IDiscoveryManager discoveryManager,
                           ISynchronizationManager synchronizationManager,
                           INodeStatsProvider nodeStatsProvider,
                           IPeerStorage peerStorage,
                           INodeFactory nodeFactory,
                           IConfigProvider configurationProvider,
                           IPerfService perfService,
                           ILogManager logManager)
        {
            _logger                 = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _localPeer              = localPeer;
            _configurationProvider  = configurationProvider.GetConfig <NetworkConfig>();
            _synchronizationManager = synchronizationManager;
            _nodeStatsProvider      = nodeStatsProvider;
            _discoveryManager       = discoveryManager;
            _perfService            = perfService;
            _nodeFactory            = nodeFactory;
            _isDiscoveryEnabled     = _discoveryManager != null;

            if (_isDiscoveryEnabled)
            {
                discoveryManager.NodeDiscovered += async(s, e) => await OnNodeDiscovered(s, e);
            }
            localPeer.ConnectionInitialized   += OnRemoteConnectionInitialized;
            synchronizationManager.SyncFailed += async(s, e) => await OnSyncFailed(s, e);

            _peerStorage = peerStorage;
            _peerStorage.StartBatch();
        }
예제 #9
0
        public SessionMonitor(INetworkConfig config, ILogManager logManager)
        {
            _logger        = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _networkConfig = config ?? throw new ArgumentNullException(nameof(config));

            _pingInterval = TimeSpan.FromMilliseconds(_networkConfig.P2PPingInterval);
        }
예제 #10
0
        public EthereumRunner(
            IRpcModuleProvider rpcModuleProvider,
            IConfigProvider configurationProvider,
            ILogManager logManager,
            IGrpcServer?grpcServer,
            INdmConsumerChannelManager?ndmConsumerChannelManager,
            INdmDataPublisher?ndmDataPublisher,
            INdmInitializer?ndmInitializer,
            IWebSocketsManager webSocketsManager,
            IJsonSerializer ethereumJsonSerializer,
            IMonitoringService monitoringService)
        {
            _logger             = logManager.GetClassLogger();
            _context            = new EthereumRunnerContextFactory(configurationProvider, ethereumJsonSerializer, logManager).Context;
            _context.LogManager = logManager;
            _context.GrpcServer = grpcServer;
            _context.NdmConsumerChannelManager = ndmConsumerChannelManager;
            _context.NdmDataPublisher          = ndmDataPublisher;
            _context.NdmInitializer            = ndmInitializer;
            _context.WebSocketsManager         = webSocketsManager;
            _context.EthereumJsonSerializer    = ethereumJsonSerializer;
            _context.MonitoringService         = monitoringService;

            _context.ConfigProvider    = configurationProvider ?? throw new ArgumentNullException(nameof(configurationProvider));
            _context.RpcModuleProvider = rpcModuleProvider ?? throw new ArgumentNullException(nameof(rpcModuleProvider));

            INetworkConfig networkConfig = _context.Config <INetworkConfig>();

            _context.IpResolver      = new IPResolver(networkConfig, _context.LogManager);
            networkConfig.ExternalIp = _context.IpResolver.ExternalIp.ToString();
            networkConfig.LocalIp    = _context.IpResolver.LocalIp.ToString();
        }
예제 #11
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();
 }
예제 #12
0
 public DiscoveryApp(INodesLocator nodesLocator,
     IDiscoveryManager? discoveryManager,
     INodeTable? nodeTable,
     IMessageSerializationService? msgSerializationService,
     ICryptoRandom? cryptoRandom,
     INetworkStorage? discoveryStorage,
     INetworkConfig? networkConfig,
     IDiscoveryConfig? discoveryConfig,
     ITimestamper? timestamper,
     ILogManager? logManager)
 {
     _logManager = logManager ?? throw new ArgumentNullException(nameof(logManager));
     _logger = _logManager.GetClassLogger();
     _discoveryConfig = discoveryConfig ?? throw new ArgumentNullException(nameof(discoveryConfig));
     _timestamper = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
     _nodesLocator = nodesLocator ?? throw new ArgumentNullException(nameof(nodesLocator));
     _discoveryManager = discoveryManager ?? throw new ArgumentNullException(nameof(discoveryManager));
     _nodeTable = nodeTable ?? throw new ArgumentNullException(nameof(nodeTable));
     _messageSerializationService =
         msgSerializationService ?? throw new ArgumentNullException(nameof(msgSerializationService));
     _cryptoRandom = cryptoRandom ?? throw new ArgumentNullException(nameof(cryptoRandom));
     _discoveryStorage = discoveryStorage ?? throw new ArgumentNullException(nameof(discoveryStorage));
     _networkConfig = networkConfig ?? throw new ArgumentNullException(nameof(networkConfig));
     _discoveryStorage.StartBatch();
 }
 public TestConnection(ISocket socket, IChannelSink sink, string id, INetworkConfig config, CancellationTokenSource source, ILogger logger, Func <ReadOnlySequence <byte> > buildAliveMessage)
     : base(id, config, source, logger)
 {
     _socket = socket;
     _sink   = sink;
     StartPipeline();
 }
 public void Initialize()
 {
     _config      = new NetworkConfig();
     _farAddress  = new IPEndPoint(IPAddress.Parse("192.168.1.2"), 1);
     _nearAddress = new IPEndPoint(IPAddress.Parse(_config.MasterExternalIp), _config.MasterPort);
     _messageSerializationService = Build.A.SerializationService().WithDiscovery(_privateKey).TestObject;
 }
예제 #15
0
 public DiscoveryStorage(IConfigProvider configurationProvider, INodeFactory nodeFactory, ILogManager logManager, IPerfService perfService)
 {
     _logger = logManager.GetClassLogger();
     _configurationProvider = configurationProvider.GetConfig <NetworkConfig>();
     _nodeFactory           = nodeFactory;
     _perfService           = perfService;
     _db = new FullDbOnTheRocks(Path.Combine(_configurationProvider.DbBasePath, FullDbOnTheRocks.DiscoveryNodesDbPath));
 }
예제 #16
0
        public NodeTable(INodeDistanceCalculator nodeDistanceCalculator, IDiscoveryConfig discoveryConfig, INetworkConfig networkConfig, ILogManager logManager)
        {
            _logger          = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _networkConfig   = networkConfig ?? throw new ArgumentNullException(nameof(networkConfig));
            _discoveryConfig = discoveryConfig ?? throw new ArgumentNullException(nameof(discoveryConfig));

            _nodeDistanceCalculator = nodeDistanceCalculator ?? throw new ArgumentNullException(nameof(nodeDistanceCalculator));
        }
예제 #17
0
 public NodeTable(INodeFactory nodeFactory, IKeyStore keyStore, INodeDistanceCalculator nodeDistanceCalculator, INetworkConfig networkConfig, ILogManager logManager)
 {
     _logger                 = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _networkConfig          = networkConfig;
     _nodeFactory            = nodeFactory;
     _keyStore               = keyStore;
     _nodeDistanceCalculator = nodeDistanceCalculator;
 }
예제 #18
0
 public NodeTable(INodeFactory nodeFactory, IKeyStore keyStore, INodeDistanceCalculator nodeDistanceCalculator, IConfigProvider configurationProvider, ILogManager logManager)
 {
     _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _configurationProvider = configurationProvider.GetConfig <INetworkConfig>();
     _nodeFactory           = nodeFactory;
     _keyStore = keyStore;
     _nodeDistanceCalculator = nodeDistanceCalculator;
 }
예제 #19
0
        public IpResolver(INetworkConfig networkConfig, ILogManager logManager)
        {
            _logger        = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _networkConfig = networkConfig ?? throw new ArgumentNullException(nameof(networkConfig));

            LocalIp    = InitializeLocalIp();
            ExternalIp = InitializeExternalIp();
        }
 protected ListenerBase(string id, INetworkConfig config, CancellationTokenSource source, ILogger logger)
 {
     Id      = id.Required(nameof(id));
     _logger = logger.Required(nameof(logger));
     _source = source.Required(nameof(source));
     _config = config.Required(nameof(config));
     _source.Token.Register(Dispose);
 }
예제 #21
0
 public ApplyMemoryHint(EthereumRunnerContext context)
 {
     _context       = context ?? throw new ArgumentNullException(nameof(context));
     _initConfig    = context.Config <IInitConfig>();
     _dbConfig      = context.Config <IDbConfig>();
     _networkConfig = context.Config <INetworkConfig>();
     _syncConfig    = context.Config <ISyncConfig>();
 }
예제 #22
0
 public void Setup()
 {
     _dbConfig      = new DbConfig();
     _syncConfig    = new SyncConfig();
     _initConfig    = new InitConfig();
     _txPoolConfig  = new TxPoolConfig();
     _networkConfig = new NetworkConfig();
     _memoryHintMan = new MemoryHintMan(LimboLogs.Instance);
 }
예제 #23
0
 public ApplyMemoryHint(NethermindApi context)
 {
     _api           = context ?? throw new ArgumentNullException(nameof(context));
     _initConfig    = context.Config <IInitConfig>();
     _dbConfig      = context.Config <IDbConfig>();
     _networkConfig = context.Config <INetworkConfig>();
     _syncConfig    = context.Config <ISyncConfig>();
     _txPoolConfig  = context.Config <ITxPoolConfig>();
 }
예제 #24
0
 public static NetworkStream GetInstance(INetworkConfig config, string romName = null)
 {
     if (_instance == null)
     {
         _instance = new NetworkStream();
     }
     _instance.Init(config, romName);
     return(_instance);
 }
예제 #25
0
 public ApplyMemoryHint(INethermindApi api)
 {
     _api           = api ?? throw new ArgumentNullException(nameof(api));
     _initConfig    = api.Config <IInitConfig>();
     _dbConfig      = api.Config <IDbConfig>();
     _networkConfig = api.Config <INetworkConfig>();
     _syncConfig    = api.Config <ISyncConfig>();
     _txPoolConfig  = api.Config <ITxPoolConfig>();
 }
 public NodeLifecycleManagerFactory(INodeTable nodeTable, IDiscoveryMessageFactory discoveryMessageFactory, IEvictionManager evictionManager, INodeStatsManager nodeStatsManager, INetworkConfig networkConfig, ILogManager logManager)
 {
     _logger                  = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _nodeTable               = nodeTable ?? throw new ArgumentNullException(nameof(nodeTable));
     _networkConfig           = networkConfig ?? throw new ArgumentNullException(nameof(networkConfig));
     _discoveryMessageFactory = discoveryMessageFactory ?? throw new ArgumentNullException(nameof(discoveryMessageFactory));
     _evictionManager         = evictionManager ?? throw new ArgumentNullException(nameof(evictionManager));
     _nodeStatsManager        = nodeStatsManager ?? throw new ArgumentNullException(nameof(nodeStatsManager));
 }
예제 #27
0
 private void AssignPeersMemory(INetworkConfig networkConfig)
 {
     PeersMemory = networkConfig.MaxActivePeers.MB();
     if (PeersMemory > _remainingMemory * 0.75)
     {
         throw new InvalidDataException(
                   $"Memory hint is not enough to satisfy the {nameof(NetworkConfig)}.{nameof(INetworkConfig.MaxActivePeers)}. " +
                   $"Assign at least MaxActivePeers * ~1MB * ~1.25 of memory.");
     }
 }
예제 #28
0
        public void Network_defaults_are_correct(string configFile)
        {
            ConfigProvider configProvider = GetConfigProviderFromFile(configFile);
            INetworkConfig networkConfig  = configProvider.GetConfig <INetworkConfig>();

            Assert.AreEqual(30303, networkConfig.DiscoveryPort, nameof(networkConfig.DiscoveryPort));
            Assert.AreEqual(30303, networkConfig.P2PPort, nameof(networkConfig.P2PPort));
            Assert.Null(networkConfig.ExternalIp, nameof(networkConfig.ExternalIp));
            Assert.Null(networkConfig.LocalIp, nameof(networkConfig.LocalIp));
            Assert.AreEqual(50, networkConfig.ActivePeersMaxCount, 50);
        }
예제 #29
0
        public virtual async Task Execute(CancellationToken _)
        {
            // this should be outside of Ethereum Runner I guess
            INetworkConfig networkConfig = _api.Config <INetworkConfig>();

            _api.IpResolver = new IPResolver(networkConfig, _api.LogManager);
            await _api.IpResolver.Initialize();

            networkConfig.ExternalIp = _api.IpResolver.ExternalIp.ToString();
            networkConfig.LocalIp    = _api.IpResolver.LocalIp.ToString();
        }
예제 #30
0
 public void SetUp()
 {
     _rlpxPeer      = new RlpxMock(_sessions);
     _discoveryApp  = Substitute.For <IDiscoveryApp>();
     _stats         = new NodeStatsManager(new StatsConfig(), LimboLogs.Instance);
     _storage       = new InMemoryStorage();
     _peerLoader    = new PeerLoader(new NetworkConfig(), _stats, _storage, LimboLogs.Instance);
     _networkConfig = new NetworkConfig();
     _networkConfig.PeersPersistenceInterval = 50;
     _peerManager = new PeerManager(_rlpxPeer, _discoveryApp, _stats, _storage, _peerLoader, _networkConfig, LimboLogs.Instance);
 }