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