Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
962dcad
initial draft implementation of EpochSwitchInfoManager
Demuirgos Sep 16, 2025
d890b8b
Merge branch 'master' into xdc/feature-epochswitch-manager
Demuirgos Sep 19, 2025
403d1b4
refactor and fix build issues
Demuirgos Sep 19, 2025
fd4617a
added some tests
Demuirgos Sep 22, 2025
6ebbbf5
Merge remote-tracking branch 'origin/master' into xdc/feature-epochsw…
Demuirgos Sep 25, 2025
0a5a339
refactor to use IXdcReleaseSpec
Demuirgos Sep 25, 2025
8f60b2f
fix build issue
Demuirgos Sep 25, 2025
54cb6ea
Merge remote-tracking branch 'origin/master' into xdc/feature-epochsw…
Demuirgos Oct 3, 2025
2ced1ca
refactors and tests and fixes
Demuirgos Oct 13, 2025
f3a7f6d
merge master and fix some merge issues
Demuirgos Oct 13, 2025
6383b9a
refactors and fixes and more tests
Demuirgos Oct 14, 2025
57190e1
Merge remote-tracking branch 'origin/master' into xdc/feature-epochsw…
Demuirgos Oct 14, 2025
75fbd9b
fixes, add missing field, refactor tests
Demuirgos Oct 15, 2025
cd691e4
refactor tests to be more predictable and consistent
Demuirgos Oct 15, 2025
b6b646d
Merge remote-tracking branch 'origin/master' into xdc/feature-epochsw…
Demuirgos Oct 16, 2025
ec8b284
ws fixes
Demuirgos Oct 16, 2025
38dd112
fix issues
Demuirgos Oct 16, 2025
d4482bb
refactors and applying suggeted changes
Demuirgos Oct 17, 2025
04d6935
fix test
Demuirgos Oct 17, 2025
7a5e0d1
apply Math.Max suggestion
Demuirgos Oct 17, 2025
2a304ab
refactors and suggetions
Demuirgos Oct 17, 2025
150afd5
remove redundent method
Demuirgos Oct 19, 2025
e2aa842
fix failing tests
Demuirgos Oct 20, 2025
4cf215b
refactor Spec moq-ing
Demuirgos Oct 20, 2025
7267fbc
cleanup and ws fixes
Demuirgos Oct 20, 2025
e0b58d5
Merge branch 'master' into xdc/feature-epochswitch-manager
Demuirgos Oct 21, 2025
1af76cb
Merge branch 'master' into xdc/feature-epochswitch-manager
Demuirgos Oct 21, 2025
e74244f
cleanup
ak88 Oct 22, 2025
24964f4
cleanup
Demuirgos Oct 23, 2025
537ebed
Merge branch 'xdc/feature-epochswitch-manager' of https://github.com/…
Demuirgos Oct 23, 2025
c937964
Merge branch 'master' into xdc/feature-epochswitch-manager
cicr99 Oct 23, 2025
5c3c825
modify calls to epochSwitch mgr methods
cicr99 Oct 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
686 changes: 686 additions & 0 deletions src/Nethermind/Nethermind.Xdc.Test/EpochSwitchManagerTests.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,11 @@ public void VerifyCertificate_QcWithDifferentParameters_ReturnsExpected(QuorumCe
{
IEpochSwitchManager epochSwitchManager = Substitute.For<IEpochSwitchManager>();
epochSwitchManager
.GetEpochSwitchInfo(Arg.Any<XdcBlockHeader>(), Arg.Any<Hash256>())
.Returns(new EpochSwitchInfo(masternodes.ToArray(), [], new BlockRoundInfo(Hash256.Zero, 1, 10)));
.GetEpochSwitchInfo(Arg.Any<XdcBlockHeader>())
.Returns(new EpochSwitchInfo(masternodes.ToArray(), [], [], new BlockRoundInfo(Hash256.Zero, 1, 10)));
epochSwitchManager
.GetEpochSwitchInfo(Arg.Any<Hash256>())
.Returns(new EpochSwitchInfo(masternodes.ToArray(), [], [], new BlockRoundInfo(Hash256.Zero, 1, 10)));
ISpecProvider specProvider = Substitute.For<ISpecProvider>();
IXdcReleaseSpec xdcReleaseSpec = Substitute.For<IXdcReleaseSpec>();
xdcReleaseSpec.EpochLength.Returns(900);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,12 @@ public void VerifyTCWithDifferentParameters_ReturnsExpected(TimeoutCertificate t
.Returns(new Snapshot(0, Hash256.Zero, masternodes));

IEpochSwitchManager epochSwitchManager = Substitute.For<IEpochSwitchManager>();
var epochSwitchInfo = new EpochSwitchInfo(masternodes, [], new BlockRoundInfo(Hash256.Zero, 1, 10));
var epochSwitchInfo = new EpochSwitchInfo(masternodes, [], [], new BlockRoundInfo(Hash256.Zero, 1, 10));
epochSwitchManager
.GetEpochSwitchInfo(Arg.Any<XdcBlockHeader>(), Arg.Any<Hash256>())
.GetEpochSwitchInfo(Arg.Any<XdcBlockHeader>())
.Returns(epochSwitchInfo);
epochSwitchManager
.GetEpochSwitchInfo(Arg.Any<Hash256>())
.Returns(epochSwitchInfo);
epochSwitchManager.GetTimeoutCertificateEpochInfo(Arg.Any<TimeoutCertificate>()).Returns(epochSwitchInfo);

Expand Down
25 changes: 24 additions & 1 deletion src/Nethermind/Nethermind.Xdc.Test/XdcSealValidatorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,24 @@
namespace Nethermind.Xdc.Test;
internal class XdcSealValidatorTests
{
private static bool IsEpochSwitch(XdcBlockHeader header, IXdcReleaseSpec spec)
{
if (spec.SwitchBlock == header.Number)
{
return true;
}
ExtraFieldsV2? extraFields = header.ExtraConsensusData;
if (extraFields is null)
{
//Should this throw instead?
return false;
}
ulong parentRound = extraFields.QuorumCert.ProposedBlockInfo.Round;
ulong epochStart = extraFields.CurrentRound - extraFields.CurrentRound % (ulong)spec.EpochLength;

return parentRound < epochStart;
}

[Test]
public void ValidateSeal_NotXdcHeader_ThrowArgumentException()
{
Expand Down Expand Up @@ -183,7 +201,12 @@ public void ValidateParams_HeaderHasDifferentSealParameters_ReturnsExpected(XdcB
.CalculateNextEpochMasternodes(Arg.Any<XdcBlockHeader>(), Arg.Any<IXdcReleaseSpec>())
.Returns((epochCandidates.ToArray(), penalties.ToArray()));
IEpochSwitchManager epochSwitchManager = Substitute.For<IEpochSwitchManager>();
epochSwitchManager.GetEpochSwitchInfo(Arg.Any<XdcBlockHeader>(), Arg.Any<Hash256>()).Returns(new EpochSwitchInfo(epochCandidates.ToArray(), [], new BlockRoundInfo(Hash256.Zero, 0, 0)));
epochSwitchManager.GetEpochSwitchInfo(Arg.Any<XdcBlockHeader>()).Returns(new EpochSwitchInfo(epochCandidates.ToArray(), [], [], new BlockRoundInfo(Hash256.Zero, 0, 0)));
epochSwitchManager.GetEpochSwitchInfo(Arg.Any<Hash256>()).Returns(new EpochSwitchInfo(epochCandidates.ToArray(), [], [], new BlockRoundInfo(Hash256.Zero, 0, 0)));

bool isEpochSwitch = IsEpochSwitch(header, releaseSpec);
epochSwitchManager.IsEpochSwitchAtBlock(Arg.Any<XdcBlockHeader>()).Returns(isEpochSwitch);

XdcSealValidator validator = new XdcSealValidator(snapshotManager, epochSwitchManager, specProvider);

Assert.That(validator.ValidateParams(parent, header), Is.EqualTo(expected));
Expand Down
Loading