コード例 #1
0
ファイル: BlockProcessor.cs プロジェクト: sounak98/nethermind
        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);
                    }
                }
            }
        }
コード例 #2
0
ファイル: BlockProcessor.cs プロジェクト: sounak98/nethermind
        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));
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }