|
1 | 1 | // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited
|
2 | 2 | // SPDX-License-Identifier: LGPL-3.0-only
|
3 | 3 |
|
4 |
| -using Nethermind.Core.Test.Builders; |
5 |
| -using NUnit.Framework; |
6 |
| -using FluentAssertions; |
| 4 | +using System.Threading.Tasks; |
| 5 | +using System.Collections.Generic; |
7 | 6 | using System;
|
| 7 | +using NUnit.Framework; |
8 | 8 | using NSubstitute;
|
9 |
| -using Nethermind.Core.Specs; |
| 9 | +using Nethermind.State; |
| 10 | +using Nethermind.Optimism.Rpc; |
10 | 11 | using Nethermind.Merge.Plugin.BlockProduction;
|
11 |
| -using Nethermind.Core.Timers; |
12 | 12 | using Nethermind.Logging;
|
13 |
| -using Nethermind.Optimism.Rpc; |
| 13 | +using Nethermind.Int256; |
| 14 | +using Nethermind.Evm.Tracing; |
| 15 | +using Nethermind.Core.Timers; |
| 16 | +using Nethermind.Core.Test.Builders; |
| 17 | +using Nethermind.Core.Specs; |
| 18 | +using Nethermind.Core.Crypto; |
| 19 | +using Nethermind.Core; |
14 | 20 | using Nethermind.Consensus.Transactions;
|
15 | 21 | using Nethermind.Consensus.Processing;
|
16 |
| -using Nethermind.Blockchain; |
17 |
| -using Nethermind.State; |
18 | 22 | using Nethermind.Consensus;
|
19 |
| -using Nethermind.Core; |
20 | 23 | using Nethermind.Config;
|
21 |
| -using Nethermind.Core.Crypto; |
22 |
| -using Nethermind.Evm.Tracing; |
23 |
| -using System.Buffers.Binary; |
24 |
| -using System.Threading.Tasks; |
| 24 | +using Nethermind.Blockchain; |
| 25 | +using FluentAssertions; |
| 26 | +using Nethermind.Crypto; |
25 | 27 |
|
26 | 28 | namespace Nethermind.Optimism.Test;
|
27 | 29 |
|
28 | 30 | [Parallelizable(ParallelScope.All)]
|
29 | 31 | public class OptimismPayloadPreparationServiceTests
|
30 | 32 | {
|
31 |
| - [TestCase(8u, 2u)] |
32 |
| - [TestCase(2u, 2u)] |
33 |
| - [TestCase(2u, 10u)] |
34 |
| - public async Task Writes_EIP1559Params_Into_HeaderExtraData(UInt32 denominator, UInt32 elasticity) |
| 33 | + private static IEnumerable<(OptimismPayloadAttributes, EIP1559Parameters?)> TestCases() |
| 34 | + { |
| 35 | + foreach (var noTxPool in (bool[])[true, false]) |
| 36 | + { |
| 37 | + yield return (new OptimismPayloadAttributes { EIP1559Params = [0, 0, 0, 8, 0, 0, 0, 2], NoTxPool = noTxPool }, new EIP1559Parameters(0, 8, 2)); |
| 38 | + yield return (new OptimismPayloadAttributes { EIP1559Params = [0, 0, 0, 2, 0, 0, 0, 2], NoTxPool = noTxPool }, new EIP1559Parameters(0, 2, 2)); |
| 39 | + yield return (new OptimismPayloadAttributes { EIP1559Params = [0, 0, 0, 2, 0, 0, 0, 10], NoTxPool = noTxPool }, new EIP1559Parameters(0, 2, 10)); |
| 40 | + yield return (new OptimismPayloadAttributes { EIP1559Params = [0, 0, 0, 0, 0, 0, 0, 0], NoTxPool = noTxPool }, new EIP1559Parameters(0, 250, 6)); |
| 41 | + } |
| 42 | + } |
| 43 | + [TestCaseSource(nameof(TestCases))] |
| 44 | + public async Task Writes_EIP1559Params_Into_HeaderExtraData((OptimismPayloadAttributes Attributes, EIP1559Parameters? ExpectedEIP1559Parameters) testCase) |
35 | 45 | {
|
36 | 46 | var parent = Build.A.BlockHeader.TestObject;
|
37 | 47 |
|
38 | 48 | var releaseSpec = Substitute.For<IReleaseSpec>();
|
39 | 49 | releaseSpec.IsOpHoloceneEnabled.Returns(true);
|
| 50 | + releaseSpec.BaseFeeMaxChangeDenominator.Returns((UInt256)250); |
| 51 | + releaseSpec.ElasticityMultiplier.Returns(6); |
40 | 52 | var specProvider = Substitute.For<ISpecProvider>();
|
41 | 53 | specProvider.GetSpec(parent).Returns(releaseSpec);
|
42 | 54 |
|
@@ -69,23 +81,16 @@ public async Task Writes_EIP1559Params_Into_HeaderExtraData(UInt32 denominator,
|
69 | 81 | logManager: TestLogManager.Instance
|
70 | 82 | );
|
71 | 83 |
|
72 |
| - var eip1559Params = new byte[8]; |
73 |
| - BinaryPrimitives.WriteUInt32BigEndian(eip1559Params.AsSpan(0, 4), denominator); |
74 |
| - BinaryPrimitives.WriteUInt32BigEndian(eip1559Params.AsSpan(4, 4), elasticity); |
75 |
| - |
76 |
| - var attributes = new OptimismPayloadAttributes() |
77 |
| - { |
78 |
| - PrevRandao = Hash256.Zero, |
79 |
| - SuggestedFeeRecipient = TestItem.AddressA, |
80 |
| - EIP1559Params = eip1559Params, |
81 |
| - }; |
| 84 | + testCase.Attributes.PrevRandao = Hash256.Zero; |
| 85 | + testCase.Attributes.SuggestedFeeRecipient = TestItem.AddressA; |
82 | 86 |
|
83 |
| - var payloadId = service.StartPreparingPayload(parent, attributes); |
| 87 | + var payloadId = service.StartPreparingPayload(parent, testCase.Attributes); |
84 | 88 | var context = await service.GetPayload(payloadId);
|
85 | 89 | var currentBestBlock = context?.CurrentBestBlock!;
|
86 | 90 |
|
87 | 91 | currentBestBlock.Should().Be(block);
|
88 | 92 | currentBestBlock.Header.TryDecodeEIP1559Parameters(out var parameters, out _).Should().BeTrue();
|
89 |
| - parameters.Should().BeEquivalentTo(new EIP1559Parameters(0, denominator, elasticity)); |
| 93 | + parameters.Should().BeEquivalentTo(testCase.ExpectedEIP1559Parameters); |
| 94 | + currentBestBlock.Header.Hash.Should().BeEquivalentTo(currentBestBlock.Header.CalculateHash()); |
90 | 95 | }
|
91 | 96 | }
|
0 commit comments