public async Task When_CurrentLeader_BroadcastsTransactionAsync()
        {
            this.federationGatewaySettings.PublicKey.Returns(PublicKey);
            this.leaderProvider.CurrentLeaderKey.Returns(new PubKey(PublicKey));

            var transactionPair = new Dictionary <uint256, Transaction>
            {
                { new uint256(), new Transaction() }
            };

            this.store.GetTransactionsByStatusAsync(CrossChainTransferStatus.FullySigned).Returns(transactionPair);

            IObservable <ILeaderProvider> leaderStream = new[] { this.leaderProvider }.ToObservable();

            this.leaderReceiver.LeaderProvidersStream.Returns(leaderStream);

            this.signedMultisigTransactionBroadcaster = new SignedMultisigTransactionBroadcaster(
                this.loggerFactory,
                this.store,
                this.leaderReceiver,
                this.federationGatewaySettings,
                this.mempoolManager,
                this.broadcasterManager);

            await this.signedMultisigTransactionBroadcaster.BroadcastTransactionsAsync(this.leaderProvider).ConfigureAwait(false);

            await this.store.Received().GetTransactionsByStatusAsync(CrossChainTransferStatus.FullySigned).ConfigureAwait(false);

            await this.broadcasterManager.Received().BroadcastTransactionAsync(Arg.Any <Transaction>());
        }
        public async Task When_CurrentLeader_Call_GetSignedTransactionsAsync()
        {
            this.federationGatewaySettings.PublicKey.Returns(PublicKey);
            this.leaderProvider.CurrentLeaderKey.Returns(new PubKey(PublicKey));

            IObservable <ILeaderProvider> leaderStream = new[] { this.leaderProvider }.ToObservable();

            this.leaderReceiver.LeaderProvidersStream.Returns(leaderStream);

            var emptyTransactionPair = new Dictionary <uint256, Transaction>();

            this.store.GetTransactionsByStatusAsync(CrossChainTransferStatus.FullySigned).Returns(emptyTransactionPair);

            this.signedMultisigTransactionBroadcaster = new SignedMultisigTransactionBroadcaster(
                this.loggerFactory,
                this.store,
                this.leaderReceiver,
                this.federationGatewaySettings,
                this.mempoolManager,
                this.broadcasterManager);

            await this.signedMultisigTransactionBroadcaster.BroadcastTransactionsAsync(this.leaderProvider).ConfigureAwait(false);

            await this.store.Received().GetTransactionsByStatusAsync(CrossChainTransferStatus.FullySigned).ConfigureAwait(false);

            this.logger.Received().Log(LogLevel.Trace,
                                       Arg.Any <EventId>(),
                                       Arg.Is <object>(o => o.ToString() == "Signed multisig transactions do not exist in the CrossChainTransfer store."),
                                       null,
                                       Arg.Any <Func <object, Exception, string> >());
        }
Пример #3
0
        public async Task When_CurrentLeader_BroadcastsTransactionAsync()
        {
            this.federationGatewaySettings.PublicKey.Returns(PublicKey);

            var transactionPair = new Dictionary <uint256, Transaction>
            {
                { new uint256(), new Transaction() }
            };

            this.store.GetTransactionsByStatusAsync(CrossChainTransferStatus.FullySigned).Returns(transactionPair);

            this.signedMultisigTransactionBroadcaster = new SignedMultisigTransactionBroadcaster(
                this.loopFactory,
                this.loggerFactory,
                this.store,
                this.nodeLifetime,
                this.mempoolManager,
                this.broadcasterManager);

            await this.signedMultisigTransactionBroadcaster.BroadcastTransactionsAsync().ConfigureAwait(false);

            await this.store.Received().GetTransactionsByStatusAsync(CrossChainTransferStatus.FullySigned).ConfigureAwait(false);

            await this.broadcasterManager.Received().BroadcastTransactionAsync(Arg.Any <Transaction>());
        }
Пример #4
0
        public FederationGatewayControllerTests()
        {
            this.network = CirrusNetwork.NetworksSelector.Regtest();

            this.crossChainTransferStore = Substitute.For <ICrossChainTransferStore>();
            this.loggerFactory           = Substitute.For <ILoggerFactory>();
            this.logger = Substitute.For <ILogger>();
            this.loggerFactory.CreateLogger(null).ReturnsForAnyArgs(this.logger);
            this.depositExtractor        = Substitute.For <IDepositExtractor>();
            this.consensusManager        = Substitute.For <IConsensusManager>();
            this.federatedPegSettings    = Substitute.For <IFederatedPegSettings>();
            this.federationWalletManager = Substitute.For <IFederationWalletManager>();
            this.signals = new Signals(this.loggerFactory, null);

            this.signedMultisigTransactionBroadcaster = Substitute.For <ISignedMultisigTransactionBroadcaster>();
        }
Пример #5
0
        public async Task When_Not_The_CurrentLeader_Dont_Call_GetSignedTransactionsAsync()
        {
            this.federationGatewaySettings.PublicKey.Returns("dummykey");

            this.signedMultisigTransactionBroadcaster = new SignedMultisigTransactionBroadcaster(
                this.loopFactory,
                this.loggerFactory,
                this.store,
                this.nodeLifetime,
                this.mempoolManager,
                this.broadcasterManager);

            await this.signedMultisigTransactionBroadcaster.BroadcastTransactionsAsync().ConfigureAwait(false);

            this.store.DidNotReceive();
        }
Пример #6
0
        public FederatedPegFeature(
            ILoggerFactory loggerFactory,
            IConnectionManager connectionManager,
            IFederatedPegSettings federatedPegSettings,
            IFullNode fullNode,
            IFederationWalletManager federationWalletManager,
            IFederationWalletSyncManager walletSyncManager,
            Network network,
            ChainIndexer chainIndexer,
            INodeStats nodeStats,
            ICrossChainTransferStore crossChainTransferStore,
            IPartialTransactionRequester partialTransactionRequester,
            MempoolCleaner mempoolCleaner,
            ISignedMultisigTransactionBroadcaster signedBroadcaster,
            IMaturedBlocksSyncManager maturedBlocksSyncManager,
            IWithdrawalHistoryProvider withdrawalHistoryProvider,
            IInputConsolidator inputConsolidator,
            ICollateralChecker collateralChecker = null)
        {
            this.loggerFactory           = loggerFactory;
            this.connectionManager       = connectionManager;
            this.federatedPegSettings    = federatedPegSettings;
            this.fullNode                = fullNode;
            this.chainIndexer            = chainIndexer;
            this.federationWalletManager = federationWalletManager;
            this.walletSyncManager       = walletSyncManager;
            this.network = network;
            this.crossChainTransferStore     = crossChainTransferStore;
            this.partialTransactionRequester = partialTransactionRequester;
            this.mempoolCleaner            = mempoolCleaner;
            this.maturedBlocksSyncManager  = maturedBlocksSyncManager;
            this.withdrawalHistoryProvider = withdrawalHistoryProvider;
            this.signedBroadcaster         = signedBroadcaster;
            this.inputConsolidator         = inputConsolidator;

            this.logger = loggerFactory.CreateLogger(this.GetType().FullName);

            // add our payload
            var payloadProvider = (PayloadProvider)this.fullNode.Services.ServiceProvider.GetService(typeof(PayloadProvider));

            payloadProvider.AddPayload(typeof(RequestPartialTransactionPayload));

            nodeStats.RegisterStats(this.AddComponentStats, StatsType.Component, this.GetType().Name);
            nodeStats.RegisterStats(this.AddInlineStats, StatsType.Inline, this.GetType().Name, 800);
        }
 public FederationGatewayController(
     ICrossChainTransferStore crossChainTransferStore,
     ILoggerFactory loggerFactory,
     IMaturedBlocksProvider maturedBlocksProvider,
     Network network,
     IFederatedPegSettings federatedPegSettings,
     IFederationWalletManager federationWalletManager,
     ISignedMultisigTransactionBroadcaster signedMultisigTransactionBroadcaster,
     IFederationManager federationManager = null)
 {
     this.crossChainTransferStore = crossChainTransferStore;
     this.federatedPegSettings    = federatedPegSettings;
     this.federationWalletManager = federationWalletManager;
     this.federationManager       = federationManager;
     this.logger = loggerFactory.CreateLogger(this.GetType().FullName);
     this.maturedBlocksProvider = maturedBlocksProvider;
     this.network = network;
     this.signedMultisigTransactionBroadcaster = signedMultisigTransactionBroadcaster;
 }
        public async Task When_Not_The_CurrentLeader_Dont_Call_GetSignedTransactionsAsync()
        {
            this.federationGatewaySettings.PublicKey.Returns("dummykey");
            this.leaderProvider.CurrentLeaderKey.Returns(new PubKey(PublicKey));

            IObservable <ILeaderProvider> leaderStream = new[] { this.leaderProvider }.ToObservable();

            this.leaderReceiver.LeaderProvidersStream.Returns(leaderStream);

            this.signedMultisigTransactionBroadcaster = new SignedMultisigTransactionBroadcaster(
                this.loggerFactory,
                this.store,
                this.leaderReceiver,
                this.federationGatewaySettings,
                this.mempoolManager,
                this.broadcasterManager);

            await this.signedMultisigTransactionBroadcaster.BroadcastTransactionsAsync(this.leaderProvider).ConfigureAwait(false);

            this.store.DidNotReceive();
        }
        public FederationGatewayFeature(
            ILoggerFactory loggerFactory,
            IConnectionManager connectionManager,
            IFederationGatewaySettings federationGatewaySettings,
            IFullNode fullNode,
            IFederationWalletManager federationWalletManager,
            IFederationWalletSyncManager walletSyncManager,
            Network network,
            ConcurrentChain chain,
            INodeStats nodeStats,
            ICrossChainTransferStore crossChainTransferStore,
            IPartialTransactionRequester partialTransactionRequester,
            ISignedMultisigTransactionBroadcaster signedBroadcaster,
            IMaturedBlocksSyncManager maturedBlocksSyncManager,
            IWithdrawalHistoryProvider withdrawalHistoryProvider)
        {
            this.loggerFactory             = loggerFactory;
            this.connectionManager         = connectionManager;
            this.federationGatewaySettings = federationGatewaySettings;
            this.fullNode = fullNode;
            this.chain    = chain;
            this.federationWalletManager = federationWalletManager;
            this.walletSyncManager       = walletSyncManager;
            this.network = network;
            this.crossChainTransferStore     = crossChainTransferStore;
            this.partialTransactionRequester = partialTransactionRequester;
            this.maturedBlocksSyncManager    = maturedBlocksSyncManager;
            this.withdrawalHistoryProvider   = withdrawalHistoryProvider;
            this.signedBroadcaster           = signedBroadcaster;

            this.logger = loggerFactory.CreateLogger(this.GetType().FullName);

            // add our payload
            var payloadProvider = (PayloadProvider)this.fullNode.Services.ServiceProvider.GetService(typeof(PayloadProvider));

            payloadProvider.AddPayload(typeof(RequestPartialTransactionPayload));

            nodeStats.RegisterStats(this.AddComponentStats, StatsType.Component);
            nodeStats.RegisterStats(this.AddInlineStats, StatsType.Inline, 800);
        }
Пример #10
0
        public FederatedPegFeature(
            IConnectionManager connectionManager,
            IFederatedPegSettings federatedPegSettings,
            IFullNode fullNode,
            IFederationWalletManager federationWalletManager,
            IFederationWalletSyncManager walletSyncManager,
            Network network,
            INodeStats nodeStats,
            ICrossChainTransferStore crossChainTransferStore,
            IPartialTransactionRequester partialTransactionRequester,
            MempoolCleaner mempoolCleaner,
            ISignedMultisigTransactionBroadcaster signedBroadcaster,
            IMaturedBlocksSyncManager maturedBlocksSyncManager,
            IInputConsolidator inputConsolidator)
        {
            this.connectionManager       = connectionManager;
            this.federatedPegSettings    = federatedPegSettings;
            this.fullNode                = fullNode;
            this.federationWalletManager = federationWalletManager;
            this.walletSyncManager       = walletSyncManager;
            this.network = network;
            this.crossChainTransferStore     = crossChainTransferStore;
            this.partialTransactionRequester = partialTransactionRequester;
            this.mempoolCleaner           = mempoolCleaner;
            this.maturedBlocksSyncManager = maturedBlocksSyncManager;
            this.signedBroadcaster        = signedBroadcaster;
            this.inputConsolidator        = inputConsolidator;

            this.logger = LogManager.GetCurrentClassLogger();

            // add our payload
            var payloadProvider = (PayloadProvider)this.fullNode.Services.ServiceProvider.GetService(typeof(PayloadProvider));

            payloadProvider.AddPayload(typeof(RequestPartialTransactionPayload));

            nodeStats.RegisterStats(this.AddComponentStats, StatsType.Component, this.GetType().Name);
        }