Beispiel #1
0
        public void Difficulty_bomb_delays_loaded_correctly()
        {
            ChainSpec chainSpec = new()
            {
                Parameters = new ChainParameters(),
                Ethash     = new EthashParameters
                {
                    DifficultyBombDelays = new Dictionary <long, long>
                    {
                        { 3, 100 },
                        { 7, 200 },
                        { 13, 300 },
                        { 17, 400 },
                        { 19, 500 },
                    }
                }
            };

            ChainSpecBasedSpecProvider provider = new(chainSpec);

            Assert.AreEqual(100, provider.GetSpec(3).DifficultyBombDelay);
            Assert.AreEqual(300, provider.GetSpec(7).DifficultyBombDelay);
            Assert.AreEqual(600, provider.GetSpec(13).DifficultyBombDelay);
            Assert.AreEqual(1000, provider.GetSpec(17).DifficultyBombDelay);
            Assert.AreEqual(1500, provider.GetSpec(19).DifficultyBombDelay);
        }
Beispiel #2
0
        public void Bound_divisors_set_correctly()
        {
            ChainSpec chainSpec = new()
            {
                Parameters = new ChainParameters {
                    GasLimitBoundDivisor = 17
                },
                Ethash = new EthashParameters {
                    DifficultyBoundDivisor = 19
                }
            };

            ChainSpecBasedSpecProvider provider = new(chainSpec);

            Assert.AreEqual(19, provider.GenesisSpec.DifficultyBoundDivisor);
            Assert.AreEqual(17, provider.GenesisSpec.GasLimitBoundDivisor);
        }
Beispiel #3
0
        public void Eip_transitions_loaded_correctly()
        {
            const long maxCodeTransition = 1;
            const long maxCodeSize       = 1;

            ChainSpec chainSpec = new()
            {
                Ethash =
                    new EthashParameters
                {
                    HomesteadTransition = 70,
                    Eip100bTransition   = 1000
                },
                ByzantiumBlockNumber      = 1960,
                ConstantinopleBlockNumber = 6490,
                Parameters = new ChainParameters
                {
                    MaxCodeSizeTransition            = maxCodeTransition,
                    MaxCodeSize                      = maxCodeSize,
                    Registrar                        = Address.Zero,
                    MinGasLimit                      = 11,
                    GasLimitBoundDivisor             = 13,
                    MaximumExtraDataSize             = 17,
                    Eip140Transition                 = 1400L,
                    Eip145Transition                 = 1450L,
                    Eip150Transition                 = 1500L,
                    Eip152Transition                 = 1520L,
                    Eip155Transition                 = 1550L,
                    Eip160Transition                 = 1600L,
                    Eip161abcTransition              = 1580L,
                    Eip161dTransition                = 1580L,
                    Eip211Transition                 = 2110L,
                    Eip214Transition                 = 2140L,
                    Eip658Transition                 = 6580L,
                    Eip1014Transition                = 10140L,
                    Eip1052Transition                = 10520L,
                    Eip1108Transition                = 11080L,
                    Eip1283Transition                = 12830L,
                    Eip1283DisableTransition         = 12831L,
                    Eip1344Transition                = 13440L,
                    Eip1884Transition                = 18840L,
                    Eip2028Transition                = 20280L,
                    Eip2200Transition                = 22000L,
                    Eip2315Transition                = 23150L,
                    Eip2537Transition                = 25370L,
                    Eip2565Transition                = 25650L,
                    Eip2929Transition                = 29290L,
                    Eip2930Transition                = 29300L,
                    Eip1559Transition                = 15590L,
                    Eip1559FeeCollectorTransition    = 15591L,
                    Eip1559FeeCollector              = Address.SystemUser,
                    Eip1559BaseFeeMinValueTransition = 15592L,
                    Eip1559BaseFeeMinValue           = UInt256.UInt128MaxValue,
                    Eip3198Transition                = 31980L,
                    Eip3529Transition                = 35290L,
                    Eip3541Transition                = 35410L,
                    Eip3675Transition                = 36750L,
                    Eip1283ReenableTransition        = 23000L,
                    ValidateChainIdTransition        = 24000L,
                    ValidateReceiptsTransition       = 24000L,
                }
            };

            ChainSpecBasedSpecProvider provider = new(chainSpec);

            Assert.AreEqual(long.MaxValue, provider.GetSpec(maxCodeTransition - 1).MaxCodeSize, "one before");
            Assert.AreEqual(maxCodeSize, provider.GetSpec(maxCodeTransition).MaxCodeSize, "at transition");
            Assert.AreEqual(maxCodeSize, provider.GetSpec(maxCodeTransition + 1).MaxCodeSize, "one after");

            ReleaseSpec expected = new();

            void TestTransitions(long blockNumber, Action <ReleaseSpec> changes)
            {
                changes(expected);
                IReleaseSpec underTest = provider.GetSpec(blockNumber);

                expected.Should().BeEquivalentTo(underTest);
            }

            TestTransitions(0L, r =>
            {
                r.MinGasLimit                 = 11L;
                r.GasLimitBoundDivisor        = 13L;
                r.MaximumExtraDataSize        = 17L;
                r.MaxCodeSize                 = long.MaxValue;
                r.Eip1559TransitionBlock      = 15590L;
                r.IsTimeAdjustmentPostOlympic = true;
                r.MaximumUncleCount           = 2;
            });

            TestTransitions(1L, r =>
            {
                r.MaxCodeSize     = maxCodeSize;
                r.IsEip170Enabled = true;
            });
            TestTransitions(70L, r => { r.IsEip2Enabled = r.IsEip7Enabled = true; });
            TestTransitions(1000L, r => { r.IsEip100Enabled = true; });
            TestTransitions(1400L, r => { r.IsEip140Enabled = true; });
            TestTransitions(1450L, r => { r.IsEip145Enabled = true; });
            TestTransitions(1500L, r => { r.IsEip150Enabled = true; });
            TestTransitions(1520L, r => { r.IsEip152Enabled = true; });
            TestTransitions(1550L, r => { r.IsEip155Enabled = true; });
            TestTransitions(1580L, r => { r.IsEip158Enabled = true; });
            TestTransitions(1600L, r => { r.IsEip160Enabled = true; });
            TestTransitions(1960L,
                            r => { r.IsEip196Enabled = r.IsEip197Enabled = r.IsEip198Enabled = r.IsEip649Enabled = true; });
            TestTransitions(2110L, r => { r.IsEip211Enabled = true; });
            TestTransitions(2140L, r => { r.IsEip214Enabled = true; });
            TestTransitions(6580L, r => { r.IsEip658Enabled = r.IsEip1234Enabled = true; });
            TestTransitions(10140L, r => { r.IsEip1014Enabled = true; });
            TestTransitions(10520L, r => { r.IsEip1052Enabled = true; });
            TestTransitions(11180L, r => { r.IsEip1108Enabled = true; });
            TestTransitions(12830L, r => { r.IsEip1283Enabled = true; });
            TestTransitions(12831L, r => { r.IsEip1283Enabled = false; });
            TestTransitions(13440L, r => { r.IsEip1344Enabled = true; });
            TestTransitions(15590L, r => { r.IsEip1559Enabled = true; });
            TestTransitions(15591L, r => { r.Eip1559FeeCollector = Address.SystemUser; });
            TestTransitions(15592L, r => { r.Eip1559BaseFeeMinValue = UInt256.UInt128MaxValue; });
            TestTransitions(18840L, r => { r.IsEip1884Enabled = true; });
            TestTransitions(20280L, r => { r.IsEip2028Enabled = true; });
            TestTransitions(22000L, r => { r.IsEip2200Enabled = true; });
            TestTransitions(23000L, r => { r.IsEip1283Enabled = r.IsEip1344Enabled = true; });
            TestTransitions(24000L, r => { r.IsEip2315Enabled = r.ValidateChainId = r.ValidateReceipts = true; });
            TestTransitions(29290L, r => { r.IsEip2929Enabled = r.IsEip2537Enabled = r.IsEip2565Enabled = true; });
            TestTransitions(29300L, r => { r.IsEip2930Enabled = true; });
            TestTransitions(31980L, r => { r.IsEip3198Enabled = true; });
            TestTransitions(35290L, r => { r.IsEip3529Enabled = true; });
            TestTransitions(35410L, r => { r.IsEip3541Enabled = true; });
            TestTransitions(36750L, r => { r.IsEip3675Enabled = true; });
        }
    }