private void ApplyMinerRewards(Block block, IBlockTracer tracer) { if (_logger.IsTrace) { _logger.Trace("Applying miner rewards:"); } var rewards = _rewardCalculator.CalculateRewards(block); for (int i = 0; i < rewards.Length; i++) { BlockReward reward = rewards[i]; ITxTracer txTracer = null; if (tracer.IsTracingRewards) { txTracer = tracer.StartNewTxTrace(null); } ApplyMinerReward(block, reward, tracer.IsTracingRewards ? tracer : NullBlockTracer.Instance); if (tracer.IsTracingRewards) { tracer.EndTxTrace(); tracer.ReportReward(reward.Address, reward.RewardType.ToLowerString(), (UInt256)reward.Value); if (txTracer?.IsTracingState ?? false) { _stateProvider.Commit(_specProvider.GetSpec(block.Number), txTracer); } } } }
private void ApplyMinerReward(Block block, BlockReward reward, IBlockTracer tracer) { if (_logger.IsTrace) { _logger.Trace($" {(decimal) reward.Value / (decimal) Unit.Ether:N3}{Unit.EthSymbol} for account at {reward.Address}"); } if (!_stateProvider.AccountExists(reward.Address)) { _stateProvider.CreateAccount(reward.Address, (UInt256)reward.Value); } else { _stateProvider.AddToBalance(reward.Address, (UInt256)reward.Value, _specProvider.GetSpec(block.Number)); } }
public BlockReward[] CalculateRewards(Block block) { IReleaseSpec spec = _specProvider.GetSpec(block.Number); UInt256 blockReward = spec.IsEip649Enabled ? spec.IsEip1234Enabled ? 2.Ether() : 3.Ether() : 5.Ether(); BlockReward[] rewards = new BlockReward[1 + block.Ommers.Length]; BlockHeader blockHeader = block.Header; BigInteger mainReward = blockReward + (uint)block.Ommers.Length * (blockReward >> 5); rewards[0] = new BlockReward(blockHeader.Beneficiary, mainReward); for (int i = 0; i < block.Ommers.Length; i++) { BigInteger ommerReward = blockReward - ((uint)(blockHeader.Number - block.Ommers[i].Number) * blockReward >> 3); rewards[i + 1] = new BlockReward(block.Ommers[i].Beneficiary, ommerReward, BlockRewardType.Uncle); } return(rewards); }
public BlockReward[] CalculateRewards(Block block) { IReleaseSpec spec = _specProvider.GetSpec(block.Number); BigInteger blockReward = spec.IsEip649Enabled ? 3.Ether() : 5.Ether(); BlockReward[] rewards = new BlockReward[1 + block.Ommers.Length]; BlockHeader blockHeader = block.Header; rewards[0] = new BlockReward(); rewards[0].Address = blockHeader.Beneficiary; rewards[0].Value = blockReward + block.Ommers.Length * blockReward / 32; for (int i = 0; i < block.Ommers.Length; i++) { rewards[i + 1] = new BlockReward(); rewards[i + 1].Address = block.Ommers[i].Beneficiary; rewards[i + 1].Value = blockReward + (block.Ommers[i].Number - blockHeader.Number) * blockReward / 8; } return(rewards); }
public BlockReward[] CalculateRewards(Block block) { IReleaseSpec spec = _specProvider.GetSpec(block.Number); UInt256 blockReward = spec.IsEip649Enabled ? (spec.IsEip1234Enabled ? 2.Ether() : 3.Ether()) : 5.Ether(); BlockReward[] rewards = new BlockReward[1 + block.Ommers.Length]; BlockHeader blockHeader = block.Header; rewards[0] = new BlockReward(); rewards[0].Address = blockHeader.Beneficiary; rewards[0].Value = blockReward + (uint)block.Ommers.Length * (blockReward >> 5); for (int i = 0; i < block.Ommers.Length; i++) { rewards[i + 1] = new BlockReward(); rewards[i + 1].Address = block.Ommers[i].Beneficiary; rewards[i + 1].Value = blockReward - ((uint)(blockHeader.Number - block.Ommers[i].Number) * blockReward >> 3); } return(rewards); }