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);
        }