예제 #1
0
        public Block AttachBlockFee(Block block, Node speaker)
        {
            if (block.Transactions == null)
            {
                throw new Exception("AttachBlockFee: Block transactions is null.");
            }

            if (block.Transactions.Count > 0 &&
                block.Transactions.Last() is TransactionBlockFee)
            {
                throw new Exception("Fee already attached to this block");
            }

            TransactionBlockFee blockFeeTx = new TransactionBlockFee();

            blockFeeTx.Nonce         = block.Header.Index; //Nonce of block fee is block index for block fee to standardize across all nodes without network transfer
            blockFeeTx.TotalFee      = block.Transactions.Sum(x => x.Fee);
            blockFeeTx.ToAddress     = speaker.WalletAddress;
            blockFeeTx.TransactionId = GenerateTransactionId(blockFeeTx);
            blockFeeTx.Type          = blockFeeTx.GetType().Name;

            block.Transactions.Add(blockFeeTx);
            block.Header.TransactionCount += 1;
            block.Header.Hash              = HashBlockHeaderAndTransactions(block.Header, block.Transactions);

            return(block);
        }
예제 #2
0
 public void AddToFeeIndex(TransactionBlockFee record)
 {
     UpdateBalanceIndex(ReservedAddresses.FeeWallet, record.ToAddress, nativeToken, record.TotalFee);
 }