コード例 #1
0
 public AuRaRewardCalculator(AuRaParameters auRaParameters, IAbiEncoder abiEncoder, ITransactionProcessor transactionProcessor)
 {
     if (auRaParameters == null)
     {
         throw new ArgumentNullException(nameof(AuRaParameters));
     }
     _transactionProcessor          = transactionProcessor ?? throw new ArgumentNullException(nameof(transactionProcessor));
     _blockRewardContractTransition = auRaParameters.BlockRewardContractTransition;
     _contract = new RewardContract(abiEncoder, auRaParameters.BlockRewardContractAddress);
     _blockRewardCalculator = new StaticRewardCalculator(auRaParameters.BlockReward);
 }
コード例 #2
0
        private BlockReward[] CalculateRewardsWithContract(Block block, RewardContract contract)
        {
            (Address[] beneficieries, ushort[] kinds) GetBeneficiaries()
            {
                var length = block.Ommers.Length + 1;

                Address[] beneficiariesList = new Address[length];
                ushort[]  kindsList         = new ushort[length];
                beneficiariesList[0] = block.Beneficiary;
                kindsList[0]         = BenefactorKind.Author;

                for (int i = 0; i < block.Ommers.Length; i++)
                {
                    var uncle = block.Ommers[i];
                    if (BenefactorKind.TryGetUncle(block.Number - uncle.Number, out var kind))
                    {
                        beneficiariesList[i + 1] = uncle.Beneficiary;
                        kindsList[i + 1]         = kind;
                    }
                }

                return(beneficiariesList, kindsList);
            }

            var(beneficiaries, kinds) = GetBeneficiaries();
            var(addresses, rewards)   = contract.Reward(block.Header, beneficiaries, kinds);

            var blockRewards = new BlockReward[addresses.Length];

            for (int index = 0; index < addresses.Length; index++)
            {
                var address = addresses[index];
                blockRewards[index] = new BlockReward(address, rewards[index], BlockRewardType.External);
            }

            return(blockRewards);
        }