コード例 #1
0
        private async Task Setup()
        {
            _peerChallenger = ContainerProvider.Container.Resolve <IPeerChallenger>();

            var eventLoopGroupFactoryConfiguration = new EventLoopGroupFactoryConfiguration
            {
                TcpClientHandlerWorkerThreads = 2,
                TcpServerHandlerWorkerThreads = 3,
                UdpServerHandlerWorkerThreads = 4,
                UdpClientHandlerWorkerThreads = 5
            };

            var keySigner = Substitute.For <IKeySigner>();

            keySigner.Verify(Arg.Any <ISignature>(), Arg.Any <byte[]>(), default).ReturnsForAnyArgs(true);
            var signature = Substitute.For <ISignature>();

            keySigner.Sign(Arg.Any <byte[]>(), default).ReturnsForAnyArgs(signature);

            _peerService = new PeerService(new UdpServerEventLoopGroupFactory(eventLoopGroupFactoryConfiguration),
                                           new PeerServerChannelFactory(ContainerProvider.Container.Resolve <IPeerMessageCorrelationManager>(),
                                                                        ContainerProvider.Container.Resolve <IBroadcastManager>(),
                                                                        keySigner,
                                                                        ContainerProvider.Container.Resolve <IPeerIdValidator>(),
                                                                        ContainerProvider.Container.Resolve <IPeerSettings>()),
                                           new DiscoveryHelper.DevDiscover(),
                                           ContainerProvider.Container.Resolve <IEnumerable <IP2PMessageObserver> >(),
                                           _peerSettings,
                                           ContainerProvider.Container.Resolve <ILogger>(),
                                           ContainerProvider.Container.Resolve <IHealthChecker>());

            await _peerService.StartAsync();
        }
コード例 #2
0
        private async Task Setup()
        {
            _peerChallengeRequest = ContainerProvider.Container.Resolve <IPeerChallengeRequest>();

            var eventLoopGroupFactoryConfiguration = new EventLoopGroupFactoryConfiguration
            {
                TcpClientHandlerWorkerThreads = 2,
                TcpServerHandlerWorkerThreads = 3,
                UdpServerHandlerWorkerThreads = 4,
                UdpClientHandlerWorkerThreads = 5
            };

            var keySigner = ContainerProvider.Container.Resolve <IKeySigner>(); // @@

            _peerService = new PeerService(
                new UdpServerEventLoopGroupFactory(eventLoopGroupFactoryConfiguration),
                new PeerServerChannelFactory(ContainerProvider.Container.Resolve <IPeerMessageCorrelationManager>(),
                                             ContainerProvider.Container.Resolve <IBroadcastManager>(),
                                             keySigner,
                                             ContainerProvider.Container.Resolve <IPeerIdValidator>(),
                                             ContainerProvider.Container.Resolve <IPeerSettings>()),
                new DiscoveryHelper.DevDiscover(),
                ContainerProvider.Container.Resolve <IEnumerable <IP2PMessageObserver> >(),
                _peerSettings,
                ContainerProvider.Container.Resolve <ILogger>(),
                ContainerProvider.Container.Resolve <IHealthChecker>());

            await _peerService.StartAsync();
        }
コード例 #3
0
        public SimpleRpcClient(IUserOutput userOutput,
                               IPasswordRegistry passwordRegistry,
                               X509Certificate2 certificate,
                               ILogger logger,
                               SigningContext signingContextProvider)
        {
            _logger      = logger;
            _certificate = certificate;

            var fileSystem = new FileSystem();

            var consolePasswordReader = new ConsolePasswordReader(userOutput, new ConsoleUserInput());
            var passwordManager       = new PasswordManager(consolePasswordReader, passwordRegistry);

            var cryptoContext = new FfiWrapper();

            var hashProvider = new HashProvider(HashingAlgorithm.GetAlgorithmMetadata("keccak-256"));

            var peerSettings = Substitute.For <IPeerSettings>();

            peerSettings.NetworkType.Returns(signingContextProvider.NetworkType);

            var localKeyStore = new LocalKeyStore(passwordManager, cryptoContext, fileSystem, hashProvider, _logger);

            var keyRegistry = new KeyRegistry();
            var keySigner   = new KeySigner(localKeyStore, cryptoContext, keyRegistry);

            var memoryCacheOptions        = new MemoryCacheOptions();
            var memoryCache               = new MemoryCache(memoryCacheOptions);
            var changeTokenProvider       = new TtlChangeTokenProvider(10000);
            var messageCorrelationManager = new RpcMessageCorrelationManager(memoryCache, _logger, changeTokenProvider);
            var peerIdValidator           = new PeerIdValidator(cryptoContext);

            var nodeRpcClientChannelFactory =
                new RpcClientChannelFactory(keySigner, messageCorrelationManager, peerIdValidator, peerSettings);

            var eventLoopGroupFactoryConfiguration = new EventLoopGroupFactoryConfiguration
            {
                TcpClientHandlerWorkerThreads = 4
            };

            var tcpClientEventLoopGroupFactory = new TcpClientEventLoopGroupFactory(eventLoopGroupFactoryConfiguration);

            var handlers = new List <IRpcResponseObserver>
            {
                new BroadcastRawTransactionResponseObserver(_logger),
                new GetVersionResponseObserver(_logger)
            };

            _rpcClientFactory =
                new RpcClientFactory(nodeRpcClientChannelFactory, tcpClientEventLoopGroupFactory, handlers);

            //PeerId for RPC/TCP is currently redundant.
            var publicKey = keyRegistry.GetItemFromRegistry(KeyRegistryTypes.DefaultKey).GetPublicKey().Bytes;

            _senderPeerId = publicKey.BuildPeerIdFromPublicKey(IPAddress.Any, 1026);
        }
コード例 #4
0
        public void Init()
        {
            Setup(TestContext.CurrentContext);

            var logger = Substitute.For <ILogger>();

            var keyRegistry = TestKeyRegistry.MockKeyRegistry();

            ContainerProvider.ContainerBuilder.RegisterInstance(keyRegistry).As <IKeyRegistry>();

            ContainerProvider.ContainerBuilder.RegisterModule(new KeystoreModule());
            ContainerProvider.ContainerBuilder.RegisterModule(new KeySignerModule());
            ContainerProvider.ContainerBuilder.RegisterModule(new HashingModule());
            ContainerProvider.ContainerBuilder.RegisterModule(new BulletProofsModule());

            _peerSettings = new PeerSettings(ContainerProvider.ConfigurationRoot);

            var peerSettings =
                PeerIdHelper.GetPeerId("sender", _peerSettings.BindAddress, _peerSettings.Port)
                .ToSubstitutedPeerSettings();

            ContainerProvider.ContainerBuilder.Register(c =>
            {
                var peerClient = c.Resolve <IPeerClient>();
                peerClient.StartAsync().ConfigureAwait(false).GetAwaiter().GetResult();
                return(new PeerChallengeRequest(logger, peerClient, peerSettings, 10));
            }).As <IPeerChallengeRequest>().SingleInstance();

            _peerChallengeRequest = ContainerProvider.Container.Resolve <IPeerChallengeRequest>();

            var eventLoopGroupFactoryConfiguration = new EventLoopGroupFactoryConfiguration
            {
                TcpClientHandlerWorkerThreads = 2,
                TcpServerHandlerWorkerThreads = 3,
                UdpServerHandlerWorkerThreads = 4,
                UdpClientHandlerWorkerThreads = 5
            };

            var keySigner = ContainerProvider.Container.Resolve <IKeySigner>(); // @@

            _peerService = new PeerService(
                new UdpServerEventLoopGroupFactory(eventLoopGroupFactoryConfiguration),
                new PeerServerChannelFactory(ContainerProvider.Container.Resolve <IPeerMessageCorrelationManager>(),
                                             ContainerProvider.Container.Resolve <IBroadcastManager>(),
                                             keySigner,
                                             ContainerProvider.Container.Resolve <IPeerIdValidator>(),
                                             ContainerProvider.Container.Resolve <IPeerSettings>()),
                new DiscoveryHelper.DevDiscover(),
                ContainerProvider.Container.Resolve <IEnumerable <IP2PMessageObserver> >(),
                _peerSettings,
                ContainerProvider.Container.Resolve <ILogger>(),
                ContainerProvider.Container.Resolve <IHealthChecker>());

            _peerService.StartAsync().Wait();
        }
コード例 #5
0
        public TcpServerChannelFactoryTests()
        {
            var eventLoopGroupFactoryConfiguration = new EventLoopGroupFactoryConfiguration
            {
                TcpServerHandlerWorkerThreads = 2
            };

            _eventLoopGroupFactory = new TcpServerEventLoopGroupFactory(eventLoopGroupFactoryConfiguration);
            _ipAddress             = IPAddress.Loopback;
            _port = 9000;

            _testTcServerChannelFactory = new TestTcpServerChannelFactory();
        }
コード例 #6
0
        public async Task TcpClientChannelFactory_BuildChannel_Should_Return_IObservableChannel()
        {
            var eventLoopGroupFactoryConfiguration = new EventLoopGroupFactoryConfiguration
            {
                TcpClientHandlerWorkerThreads = 2
            };

            var eventLoopGroupFactory = new TcpClientEventLoopGroupFactory(eventLoopGroupFactoryConfiguration);
            var ipAddress             = IPAddress.Loopback;
            var port = 9000;

            var testTcpClientChannelFactory = new TestTcpClientChannelFactory();
            var channel = await testTcpClientChannelFactory.BuildChannelAsync(eventLoopGroupFactory, ipAddress, port).ConfigureAwait(false);

            channel.Should().BeOfType <ObservableChannel>();
        }