Ejemplo n.º 1
0
        public void Byzantium_reward_two_uncles()
        {
            long  blockNumber = RopstenSpecProvider.ByzantiumBlockNumber;
            Block uncle       = Build.A.Block.WithNumber(blockNumber - 2).TestObject;
            Block uncle2      = Build.A.Block.WithNumber(blockNumber - 2).TestObject;
            Block block       = Build.A.Block.WithNumber(blockNumber).WithUncles(uncle, uncle2).WithTotalDifficulty(1L).WithDifficulty(300).TestObject;
            Block block2      = Build.A.Block.WithNumber(blockNumber + 1).WithUncles(uncle, uncle2).WithTotalDifficulty(3L).WithDifficulty(0).TestObject;

            PoSSwitcher poSSwitcher = CreatePosSwitcher();

            poSSwitcher.TryUpdateTerminalBlock(block.Header);

            MergeRewardCalculator calculator = new(new RewardCalculator(RopstenSpecProvider.Instance), poSSwitcher);

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

            Assert.AreEqual(3, rewards.Length);
            Assert.AreEqual(3187500000000000000, (long)rewards[0].Value, "miner");
            Assert.AreEqual(2250000000000000000, (long)rewards[1].Value, "uncle1");
            Assert.AreEqual(2250000000000000000, (long)rewards[2].Value, "uncle2");

            rewards = calculator.CalculateRewards(block2);

            Assert.AreEqual(0, rewards.Length);
        }
Ejemplo n.º 2
0
        public void No_block_rewards_calculator()
        {
            Block block  = Build.A.Block.WithTotalDifficulty(1L).WithDifficulty(0).TestObject;
            Block block2 = Build.A.Block.WithTotalDifficulty(3L).WithDifficulty(0).TestObject;

            PoSSwitcher poSSwitcher = CreatePosSwitcher();

            poSSwitcher.TryUpdateTerminalBlock(block.Header);
            MergeRewardCalculator calculator = new(NoBlockRewards.Instance, poSSwitcher);

            BlockReward[] rewards = calculator.CalculateRewards(block);
            Assert.AreEqual(0, rewards.Length);

            rewards = calculator.CalculateRewards(block2);
            Assert.AreEqual(0, rewards.Length);
        }
Ejemplo n.º 3
0
        public void No_uncles()
        {
            Block block  = Build.A.Block.WithNumber(2).WithTotalDifficulty(1L).WithDifficulty(300).TestObject;
            Block block2 = Build.A.Block.WithNumber(3).WithTotalDifficulty(3L).WithDifficulty(0).TestObject;

            PoSSwitcher poSSwitcher = CreatePosSwitcher();

            poSSwitcher.TryUpdateTerminalBlock(block.Header);

            MergeRewardCalculator calculator = new(new RewardCalculator(RopstenSpecProvider.Instance), poSSwitcher);

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

            Assert.AreEqual(1, rewards.Length);
            Assert.AreEqual(5000000000000000000, (long)rewards[0].Value, "miner");

            rewards = calculator.CalculateRewards(block2);
            Assert.AreEqual(0, rewards.Length);
        }
Ejemplo n.º 4
0
        public void Two_uncles_from_the_same_coinbase()
        {
            Block uncle  = Build.A.Block.WithNumber(1).TestObject;
            Block uncle2 = Build.A.Block.WithNumber(1).TestObject;
            Block block  = Build.A.Block.WithNumber(3).WithUncles(uncle, uncle2).WithTotalDifficulty(1L).WithDifficulty(30).TestObject;
            Block block2 = Build.A.Block.WithNumber(4).WithUncles(uncle, uncle2).WithTotalDifficulty(2L).WithDifficulty(0).TestObject;

            PoSSwitcher poSSwitcher = CreatePosSwitcher();

            poSSwitcher.TryUpdateTerminalBlock(block.Header);
            MergeRewardCalculator calculator = new(new RewardCalculator(RopstenSpecProvider.Instance), poSSwitcher);

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

            rewards = calculator.CalculateRewards(block2);

            Assert.AreEqual(0, rewards.Length);
        }