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