public void ConsolidationTransactionOnlyBuiltWhenWalletHasManyInputs()
        {
            var dataFolder = new DataFolder(TestBase.CreateTestDir(this));

            this.Init(dataFolder);

            var broadcasterManager = new Mock <IBroadcasterManager>();

            var inputConsolidator = new InputConsolidator(
                this.FederationWalletTransactionHandler,
                this.federationWalletManager,
                broadcasterManager.Object,
                this.federatedPegSettings,
                this.signals,
                this.asyncProvider,
                this.network);

            Assert.Null(inputConsolidator.CreateRequiredConsolidationTransactions(Money.Coins(100m)));
        }
Exemple #2
0
        public void ConsolidationTransactionBuildsCorrectly()
        {
            var dataFolder = new DataFolder(TestBase.CreateTestDir(this));

            this.Init(dataFolder);

            var broadcasterManager = new Mock <IBroadcasterManager>();

            var inputConsolidator = new InputConsolidator(
                this.FederationWalletTransactionHandler,
                this.federationWalletManager,
                broadcasterManager.Object,
                this.federatedPegSettings,
                this.loggerFactory,
                this.signals,
                this.asyncProvider,
                this.network);

            // Lets set the funding transactions to many really small outputs
            const int      numUtxos         = FederatedPegSettings.MaxInputs * 2;
            const decimal  individualAmount = 0.1m;
            const decimal  depositAmount    = numUtxos * individualAmount - 1; // Large amount minus some for fees.
            BitcoinAddress address          = new Script("").Hash.GetAddress(this.network);

            this.wallet.MultiSigAddress.Transactions.Clear();
            this.fundingTransactions.Clear();

            Money[] funding = new Money[numUtxos];

            for (int i = 0; i < funding.Length; i++)
            {
                funding[i] = new Money(individualAmount, MoneyUnit.BTC);
            }

            this.AddFundingTransaction(funding);

            List <ConsolidationTransaction> transactions = inputConsolidator.CreateRequiredConsolidationTransactions(Money.Coins(depositAmount));

            Assert.Equal(2, transactions.Count);
            Assert.Equal(this.federatedPegSettings.MultiSigAddress.ScriptPubKey, transactions[0].PartialTransaction.Outputs[0].ScriptPubKey);
        }