private CoinstakeContext BuildNewCoinstakeContext()
        {
            var scriptPubKey     = new Script();
            var coinStakeContext = new CoinstakeContext()
            {
                CoinstakeTx = new Transaction()
                {
                    Outputs =
                    {
                        new TxOut(Money.Zero, new Script()),
                        new TxOut(Money.Zero, scriptPubKey)
                    }
                }
            };

            return(coinStakeContext);
        }
        private (long coinstakeInputValue, Transaction transaction) GetCoinstakeTransaction(List <Money> amounts, CoinstakeContext coinStakeContext, bool expectToSplit)
        {
            long amountStaked = amounts.Sum(u => u.Satoshi);

            this.posMinting.ShouldSplitStake(
                stakedUtxosCount: amounts.Count,
                amountStaked: amountStaked,
                coinValue: amounts.Last(),
                chainHeight: ChainHeight).Should().Be(expectToSplit);

            var reward = 1.2M * Money.COIN;
            var coinstakeInputValue = amounts.Last().Satoshi + (long)reward;

            var transaction = this.posMinting.PrepareCoinStakeTransactions(
                currentChainHeight: ChainHeight,
                coinstakeContext: coinStakeContext,
                coinstakeOutputValue: coinstakeInputValue,
                utxosCount: amounts.Count,
                amountStaked: amountStaked);

            return(coinstakeInputValue, transaction);
        }
Ejemplo n.º 3
0
        public override Transaction PrepareCoinStakeTransactions(int currentChainHeight, CoinstakeContext coinstakeContext, long coinstakeOutputValue, int utxosCount, long amountStaked, long reward)
        {
            long cirrusReward = reward * StraxCoinviewRule.CirrusRewardPercentage / 100;

            coinstakeOutputValue -= cirrusReward;

            // Populate the initial coinstake with the modified overall reward amount, the outputs will be split as necessary
            base.PrepareCoinStakeTransactions(currentChainHeight, coinstakeContext, coinstakeOutputValue, utxosCount, amountStaked, reward);

            // Now add the remaining reward into an additional output on the coinstake
            var cirrusRewardOutput = new TxOut(cirrusReward, StraxCoinstakeRule.CirrusRewardScript);

            coinstakeContext.CoinstakeTx.Outputs.Add(cirrusRewardOutput);

            return(coinstakeContext.CoinstakeTx);
        }