コード例 #1
0
        public void CalculateRewards_NullRewardPeriod_Throws_NullArgumentException_Test()
        {
            // 1. ARRANGE
            var calculator = new RewardCalculator(null);

            // 2. ACTION
            calculator.CalculateRewards(null);
        }
コード例 #2
0
        public void No_uncles()
        {
            Block block = Build.A.Block.WithNumber(3).TestObject;

            RewardCalculator calculator = new RewardCalculator(RopstenSpecProvider.Instance);

            BlockReward[] rewards = calculator.CalculateRewards(block);

            Assert.AreEqual(1, rewards.Length);
            Assert.AreEqual(5000000000000000000, (long)rewards[0].Value, "miner");
        }
コード例 #3
0
        public void One_uncle()
        {
            Block ommer = Build.A.Block.WithNumber(1).TestObject;
            Block block = Build.A.Block.WithNumber(3).WithOmmers(ommer).TestObject;

            RewardCalculator calculator = new RewardCalculator(RopstenSpecProvider.Instance);

            BlockReward[] rewards = calculator.CalculateRewards(block);

            Assert.AreEqual(2, rewards.Length);
            Assert.AreEqual(5156250000000000000, (long)rewards[0].Value, "miner");
            Assert.AreEqual(3750000000000000000, (long)rewards[1].Value, "uncle1");
        }
コード例 #4
0
        public void Two_uncles_from_the_same_coinbase()
        {
            Block ommer  = Build.A.Block.WithNumber(1).TestObject;
            Block ommer2 = Build.A.Block.WithNumber(1).TestObject;
            Block block  = Build.A.Block.WithNumber(3).WithOmmers(ommer, ommer2).TestObject;

            RewardCalculator calculator = new RewardCalculator(RopstenSpecProvider.Instance);

            BlockReward[] rewards = calculator.CalculateRewards(block);

            Assert.AreEqual(3, rewards.Length);
            Assert.AreEqual(5312500000000000000, (long)rewards[0].Value, "miner");
            Assert.AreEqual(3750000000000000000, (long)rewards[1].Value, "uncle1");
            Assert.AreEqual(3750000000000000000, (long)rewards[2].Value, "uncle2");
        }
コード例 #5
0
        public void Constantinople_reward_two_uncles()
        {
            UInt256 blockNumber = RopstenSpecProvider.ConstantinopleBlockNumber;
            Block   ommer       = Build.A.Block.WithNumber(blockNumber - 2).TestObject;
            Block   ommer2      = Build.A.Block.WithNumber(blockNumber - 2).TestObject;
            Block   block       = Build.A.Block.WithNumber(blockNumber).WithOmmers(ommer, ommer2).TestObject;

            RewardCalculator calculator = new RewardCalculator(RopstenSpecProvider.Instance);

            BlockReward[] rewards = calculator.CalculateRewards(block);

            Assert.AreEqual(3, rewards.Length);
            Assert.AreEqual(2125000000000000000, (long)rewards[0].Value, "miner");
            Assert.AreEqual(1500000000000000000, (long)rewards[1].Value, "uncle1");
            Assert.AreEqual(1500000000000000000, (long)rewards[2].Value, "uncle2");
        }
コード例 #6
0
        public Task <BlockVisitOutcome> VisitBlock(Block block, CancellationToken cancellationToken)
        {
            BlockReward[] rewards = _rewardCalculator.CalculateRewards(block);
            for (int i = 0; i < rewards.Length; i++)
            {
                if (rewards[i].RewardType == BlockRewardType.Uncle)
                {
                    _uncles += rewards[i].Value;
                }
                else
                {
                    _blockRewards += rewards[i].Value;
                }
            }

            _logger.Info($"Visiting block {block.Number}, total supply is (genesis + miner rewards + uncle rewards) | {_genesisAllocations} + {_blockRewards} + {_uncles}");
            return(Task.FromResult(BlockVisitOutcome.None));
        }