Skip to content

Commit bf2c5dc

Browse files
ak88Demuirgos
andauthored
Block producer runner for XDC running hotstuff (#9524)
* start * more dependencies * build * rename * voting * vote task * bit of refactor * invoke block produced dont seal * refactor context * format * timeout missing * block producer * format * test * block production test * format * merge cleanup * merged * use the constant * use timestamp from attributes * Merged * Merged fix * cleanup * fixes * cleanup * commit cert before vote propose in background * merge and refactor * rename * format * comment * refactor to continuous loop * remove TCM * Format * fix * cleanup * test fix * test fix * test and container setup fix * not a required plugin * package ref update * QC manager fixes * init QC --------- Co-authored-by: Ayman Bouchareb <[email protected]>
1 parent bc640e8 commit bf2c5dc

32 files changed

+1163
-483
lines changed

src/Nethermind/Nethermind.Runner/packages.lock.json

Lines changed: 227 additions & 226 deletions
Large diffs are not rendered by default.

src/Nethermind/Nethermind.Xdc.Test/EpochSwitchManagerTests.cs

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ private XdcBlockHeader GetChainOfBlocks(IBlockTree tree, ISnapshotManager snapMa
4343
block = GenNormalBlock(spec, block!);
4444
}
4545

46-
if ((block.ExtraConsensusData?.CurrentRound ?? 0ul) % (ulong)spec.EpochLength == 0)
46+
if ((block.ExtraConsensusData?.BlockRound ?? 0ul) % (ulong)spec.EpochLength == 0)
4747
{
4848
snapManager.GetSnapshot(block.Hash!).Returns(new Snapshot(block.Number, block.Hash!, [.. StandbyAddresses, .. SignerAddresses]));
4949
}
@@ -64,9 +64,9 @@ private XdcBlockHeader GenNormalBlock(IXdcReleaseSpec spec, XdcBlockHeader? pare
6464
long blockNumber = 0;
6565
if (parent is not null)
6666
{
67-
newRound = 1 + (parent.ExtraConsensusData?.CurrentRound ?? 0);
67+
newRound = 1 + (parent.ExtraConsensusData?.BlockRound ?? 0);
6868
blockNumber = 1 + parent.Number;
69-
prevRound = parent.ExtraConsensusData?.CurrentRound ?? 0;
69+
prevRound = parent.ExtraConsensusData?.BlockRound ?? 0;
7070
parentHash = parent.Hash;
7171

7272
}
@@ -205,8 +205,8 @@ public void IsEpochSwitchAtBlock_ShouldReturnTrue_WhenProposedHeaderNumberIsSwit
205205
proposedHeader.Number = (long)releaseSpec.SwitchBlock;
206206
proposedHeader.ParentHash = chainHead.Hash;
207207

208-
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.CurrentRound, chainHead.Number), SignerSignatures.ToArray(), gapNumber);
209-
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.CurrentRound + 1, qc);
208+
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.BlockRound, chainHead.Number), SignerSignatures.ToArray(), gapNumber);
209+
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.BlockRound + 1, qc);
210210
proposedHeader.ExtraConsensusData = extraFieldsV2;
211211

212212
// Act
@@ -236,13 +236,13 @@ public void IsEpochSwitchAtBlock_ShouldReturnTrue_WhenParentRoundIsLessThanEpoch
236236
proposedHeader.Number = (long)chainHead.Number + 1;
237237
proposedHeader.ParentHash = chainHead.Hash;
238238

239-
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.CurrentRound, chainHead.Number), SignerSignatures.ToArray(), 1);
240-
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.CurrentRound + 1, qc);
239+
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.BlockRound, chainHead.Number), SignerSignatures.ToArray(), 1);
240+
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.BlockRound + 1, qc);
241241
proposedHeader.ExtraConsensusData = extraFieldsV2;
242242
// Act
243243
bool result = _epochSwitchManager.IsEpochSwitchAtBlock(proposedHeader);
244244
// Assert
245-
Assert.That(chainHead.ExtraConsensusData!.CurrentRound, Is.LessThan(extraFieldsV2.CurrentRound));
245+
Assert.That(chainHead.ExtraConsensusData!.BlockRound, Is.LessThan(extraFieldsV2.BlockRound));
246246

247247
Assert.That(result, Is.True);
248248
}
@@ -268,13 +268,13 @@ public void IsEpochSwitchAtBlock_ShouldReturnFalse_WhenParentRoundIsGreaterThanE
268268
proposedHeader.Number = (long)chainHead.Number + 1;
269269
proposedHeader.ParentHash = chainHead.Hash;
270270

271-
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.CurrentRound, chainHead.Number), SignerSignatures.ToArray(), 1);
272-
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.CurrentRound - 1, qc);
271+
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.BlockRound, chainHead.Number), SignerSignatures.ToArray(), 1);
272+
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.BlockRound - 1, qc);
273273
proposedHeader.ExtraConsensusData = extraFieldsV2;
274274
// Act
275275
bool result = _epochSwitchManager.IsEpochSwitchAtBlock(proposedHeader);
276276
// Assert
277-
Assert.That(chainHead.ExtraConsensusData!.CurrentRound, Is.GreaterThan(extraFieldsV2.CurrentRound));
277+
Assert.That(chainHead.ExtraConsensusData!.BlockRound, Is.GreaterThan(extraFieldsV2.BlockRound));
278278

279279
Assert.That(result, Is.False);
280280
}
@@ -300,13 +300,13 @@ public void IsEpochSwitchAtBlock_ShouldReturnFalse_WhenParentRoundIsEqualToEpoch
300300
proposedHeader.Number = (long)chainHead.Number + 1;
301301
proposedHeader.ParentHash = chainHead.Hash;
302302

303-
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.CurrentRound, chainHead.Number), SignerSignatures.ToArray(), 1);
304-
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.CurrentRound, qc);
303+
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.BlockRound, chainHead.Number), SignerSignatures.ToArray(), 1);
304+
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.BlockRound, qc);
305305
proposedHeader.ExtraConsensusData = extraFieldsV2;
306306
// Act
307307
bool result = _epochSwitchManager.IsEpochSwitchAtBlock(proposedHeader);
308308
// Assert
309-
Assert.That(chainHead.ExtraConsensusData!.CurrentRound, Is.EqualTo(extraFieldsV2.CurrentRound));
309+
Assert.That(chainHead.ExtraConsensusData!.BlockRound, Is.EqualTo(extraFieldsV2.BlockRound));
310310

311311
Assert.That(result, Is.False);
312312
}
@@ -363,7 +363,7 @@ public void IsEpochSwitchAtRound_ShouldReturnFalse_WhenExtraConsensusDataIsNull(
363363
}
364364

365365
[Test]
366-
public void IsEpochSwitchAtRound_ShouldReturnFalse_WhenParentRoundIsGreaterThanCurrentRound()
366+
public void IsEpochSwitchAtRound_ShouldReturnFalse_WhenParentRoundIsGreaterThanBlockRound()
367367
{
368368
// Arrange
369369
var currRound = 42ul;
@@ -379,7 +379,7 @@ public void IsEpochSwitchAtRound_ShouldReturnFalse_WhenParentRoundIsGreaterThanC
379379
bool result = _epochSwitchManager.IsEpochSwitchAtRound(currRound, chainHead);
380380
// Assert
381381
Assert.That(result, Is.False);
382-
Assert.That(chainHead.ExtraConsensusData!.CurrentRound, Is.GreaterThan(currRound));
382+
Assert.That(chainHead.ExtraConsensusData!.BlockRound, Is.GreaterThan(currRound));
383383
}
384384

385385
[Test]
@@ -405,19 +405,19 @@ public void IsEpochSwitchAtRound_ShouldReturnTrue_WhenParentRoundIsLessThanEpoch
405405
proposedHeader.Number = (long)chainHead.Number + 1;
406406
proposedHeader.ParentHash = chainHead.Hash;
407407

408-
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.CurrentRound, chainHead.Number), SignerSignatures.ToArray(), 1);
409-
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.CurrentRound + 1, qc);
408+
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.BlockRound, chainHead.Number), SignerSignatures.ToArray(), 1);
409+
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.BlockRound + 1, qc);
410410
proposedHeader.ExtraConsensusData = extraFieldsV2;
411411

412-
ulong currentEpochNumber = (ulong)releaseSpec.SwitchEpoch + extraFieldsV2.CurrentRound / (ulong)releaseSpec.EpochLength;
412+
ulong currentEpochNumber = (ulong)releaseSpec.SwitchEpoch + extraFieldsV2.BlockRound / (ulong)releaseSpec.EpochLength;
413413
ulong currentEpochStartRound = currentEpochNumber * (ulong)releaseSpec.EpochLength;
414414

415-
bool result = _epochSwitchManager.IsEpochSwitchAtRound(extraFieldsV2.CurrentRound, chainHead);
415+
bool result = _epochSwitchManager.IsEpochSwitchAtRound(extraFieldsV2.BlockRound, chainHead);
416416

417417
// Assert
418-
Assert.That(chainHead.ExtraConsensusData!.CurrentRound, Is.EqualTo(extraFieldsV2.CurrentRound - 1));
419-
Assert.That(currentEpochStartRound, Is.GreaterThan(chainHead.ExtraConsensusData!.CurrentRound));
420-
Assert.That(chainHead.ExtraConsensusData!.CurrentRound, Is.LessThan(extraFieldsV2.CurrentRound));
418+
Assert.That(chainHead.ExtraConsensusData!.BlockRound, Is.EqualTo(extraFieldsV2.BlockRound - 1));
419+
Assert.That(currentEpochStartRound, Is.GreaterThan(chainHead.ExtraConsensusData!.BlockRound));
420+
Assert.That(chainHead.ExtraConsensusData!.BlockRound, Is.LessThan(extraFieldsV2.BlockRound));
421421
Assert.That(result, Is.True);
422422
}
423423

@@ -444,19 +444,19 @@ public void IsEpochSwitchAtRound_ShouldReturnFalse_WhenParentRoundIsEqualToEpoch
444444
proposedHeader.Number = (long)chainHead.Number + 1;
445445
proposedHeader.ParentHash = chainHead.Hash;
446446

447-
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.CurrentRound, chainHead.Number), SignerSignatures.ToArray(), 1);
448-
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.CurrentRound + 1, qc);
447+
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.BlockRound, chainHead.Number), SignerSignatures.ToArray(), 1);
448+
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.BlockRound + 1, qc);
449449
proposedHeader.ExtraConsensusData = extraFieldsV2;
450450

451-
ulong currentEpochNumber = ((ulong)releaseSpec.SwitchEpoch + extraFieldsV2.CurrentRound) / (ulong)releaseSpec.EpochLength;
451+
ulong currentEpochNumber = ((ulong)releaseSpec.SwitchEpoch + extraFieldsV2.BlockRound) / (ulong)releaseSpec.EpochLength;
452452
ulong currentEpochStartRound = currentEpochNumber * (ulong)releaseSpec.EpochLength;
453453

454-
bool result = _epochSwitchManager.IsEpochSwitchAtRound(extraFieldsV2.CurrentRound, chainHead);
454+
bool result = _epochSwitchManager.IsEpochSwitchAtRound(extraFieldsV2.BlockRound, chainHead);
455455

456456
// Assert
457-
Assert.That(chainHead.ExtraConsensusData!.CurrentRound, Is.EqualTo(extraFieldsV2.CurrentRound - 1));
458-
Assert.That(currentEpochStartRound, Is.EqualTo(chainHead.ExtraConsensusData!.CurrentRound));
459-
Assert.That(chainHead.ExtraConsensusData!.CurrentRound, Is.LessThan(extraFieldsV2.CurrentRound));
457+
Assert.That(chainHead.ExtraConsensusData!.BlockRound, Is.EqualTo(extraFieldsV2.BlockRound - 1));
458+
Assert.That(currentEpochStartRound, Is.EqualTo(chainHead.ExtraConsensusData!.BlockRound));
459+
Assert.That(chainHead.ExtraConsensusData!.BlockRound, Is.LessThan(extraFieldsV2.BlockRound));
460460
Assert.That(result, Is.False);
461461
}
462462

@@ -483,19 +483,19 @@ public void IsEpochSwitchAtRound_ShouldReturnFalse_WhenParentRoundIsGreaterThanE
483483
proposedHeader.Number = (long)chainHead.Number + 1;
484484
proposedHeader.ParentHash = chainHead.Hash;
485485

486-
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.CurrentRound, chainHead.Number), SignerSignatures.ToArray(), 1);
487-
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.CurrentRound + 1, qc);
486+
QuorumCertificate qc = new QuorumCertificate(new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.BlockRound, chainHead.Number), SignerSignatures.ToArray(), 1);
487+
ExtraFieldsV2 extraFieldsV2 = new ExtraFieldsV2(chainHead.ExtraConsensusData!.BlockRound + 1, qc);
488488
proposedHeader.ExtraConsensusData = extraFieldsV2;
489489

490-
ulong currentEpochNumber = ((ulong)releaseSpec.SwitchEpoch + extraFieldsV2.CurrentRound) / (ulong)releaseSpec.EpochLength;
490+
ulong currentEpochNumber = ((ulong)releaseSpec.SwitchEpoch + extraFieldsV2.BlockRound) / (ulong)releaseSpec.EpochLength;
491491
ulong currentEpochStartRound = currentEpochNumber * (ulong)releaseSpec.EpochLength;
492492

493-
bool result = _epochSwitchManager.IsEpochSwitchAtRound(extraFieldsV2.CurrentRound, chainHead);
493+
bool result = _epochSwitchManager.IsEpochSwitchAtRound(extraFieldsV2.BlockRound, chainHead);
494494

495495
// Assert
496-
Assert.That(chainHead.ExtraConsensusData!.CurrentRound, Is.EqualTo(extraFieldsV2.CurrentRound - 1));
497-
Assert.That(currentEpochStartRound, Is.LessThan(chainHead.ExtraConsensusData!.CurrentRound));
498-
Assert.That(chainHead.ExtraConsensusData!.CurrentRound, Is.LessThan(extraFieldsV2.CurrentRound));
496+
Assert.That(chainHead.ExtraConsensusData!.BlockRound, Is.EqualTo(extraFieldsV2.BlockRound - 1));
497+
Assert.That(currentEpochStartRound, Is.LessThan(chainHead.ExtraConsensusData!.BlockRound));
498+
Assert.That(chainHead.ExtraConsensusData!.BlockRound, Is.LessThan(extraFieldsV2.BlockRound));
499499
Assert.That(result, Is.False);
500500
}
501501

@@ -567,8 +567,8 @@ public void GetEpochSwitchInfo_ShouldReturnEpochSwitchIfBlockIsAtEpoch()
567567
XdcBlockHeader chainHead = GetChainOfBlocks(_tree, _snapshotManager, releaseSpec, 100);
568568
var parentHeader = (XdcBlockHeader)_tree.FindHeader(chainHead.ParentHash!)!;
569569

570-
EpochSwitchInfo expected = new(SignerAddresses.ToArray(), StandbyAddresses.ToArray(), PenalizedAddresses.ToArray(), new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.CurrentRound, chainHead.Number));
571-
expected.EpochSwitchParentBlockInfo = new(parentHeader.Hash!, parentHeader.ExtraConsensusData!.CurrentRound, parentHeader.Number);
570+
EpochSwitchInfo expected = new(SignerAddresses.ToArray(), StandbyAddresses.ToArray(), PenalizedAddresses.ToArray(), new BlockRoundInfo(chainHead.Hash!, chainHead.ExtraConsensusData!.BlockRound, chainHead.Number));
571+
expected.EpochSwitchParentBlockInfo = new(parentHeader.Hash!, parentHeader.ExtraConsensusData!.BlockRound, parentHeader.Number);
572572

573573
var result = _epochSwitchManager.GetEpochSwitchInfo(chainHead.Hash!);
574574

@@ -600,9 +600,9 @@ public void GetEpochSwitchInfo_ShouldReturnEpochNumbersIfParentBlockIsAtEpoch()
600600
parentHeader.ValidatorsAddress!.Value.ToArray(),
601601
StandbyAddresses.ToArray(),
602602
parentHeader.PenaltiesAddress!.Value.ToArray(),
603-
new BlockRoundInfo(parentHeader.Hash!, parentHeader.ExtraConsensusData!.CurrentRound, (long)blockNumber));
603+
new BlockRoundInfo(parentHeader.Hash!, parentHeader.ExtraConsensusData!.BlockRound, (long)blockNumber));
604604

605-
expected.EpochSwitchParentBlockInfo = new(parentHeader.ParentHash!, parentHeader.ExtraConsensusData.CurrentRound - (ulong)1, parentHeader.Number - 1);
605+
expected.EpochSwitchParentBlockInfo = new(parentHeader.ParentHash!, parentHeader.ExtraConsensusData.BlockRound - (ulong)1, parentHeader.Number - 1);
606606

607607
var result = _epochSwitchManager.GetEpochSwitchInfo(chainHead.Hash!);
608608
Assert.That(result, Is.Not.Null);

src/Nethermind/Nethermind.Xdc.Test/QuorumCertificateManagerTest.cs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,10 @@ public class QuorumCertificateManagerTest
2626
public void VerifyCertificate_CertificateIsNull_ThrowsArgumentNullException()
2727
{
2828
var quorumCertificateManager = new QuorumCertificateManager(
29-
new XdcContext(),
29+
new XdcConsensusContext(),
3030
Substitute.For<IBlockTree>(),
31-
Substitute.For<IDb>(),
3231
Substitute.For<ISpecProvider>(),
33-
Substitute.For<IEpochSwitchManager>(),
34-
new BlockInfoValidator());
32+
Substitute.For<IEpochSwitchManager>());
3533

3634
Assert.That(() => quorumCertificateManager.VerifyCertificate(null!, Build.A.XdcBlockHeader().TestObject, out _), Throws.ArgumentNullException);
3735
}
@@ -40,12 +38,10 @@ public void VerifyCertificate_CertificateIsNull_ThrowsArgumentNullException()
4038
public void VerifyCertificate_HeaderIsNull_ThrowsArgumentNullException()
4139
{
4240
var quorumCertificateManager = new QuorumCertificateManager(
43-
new XdcContext(),
41+
new XdcConsensusContext(),
4442
Substitute.For<IBlockTree>(),
45-
Substitute.For<IDb>(),
4643
Substitute.For<ISpecProvider>(),
47-
Substitute.For<IEpochSwitchManager>(),
48-
new BlockInfoValidator());
44+
Substitute.For<IEpochSwitchManager>());
4945

5046
Assert.That(() => quorumCertificateManager.VerifyCertificate(Build.A.QuorumCertificate().TestObject, null!, out _), Throws.ArgumentNullException);
5147
}
@@ -95,12 +91,10 @@ public void VerifyCertificate_QcWithDifferentParameters_ReturnsExpected(QuorumCe
9591
xdcReleaseSpec.CertThreshold.Returns(0.667);
9692
specProvider.GetSpec(Arg.Any<ForkActivation>()).Returns(xdcReleaseSpec);
9793
var quorumCertificateManager = new QuorumCertificateManager(
98-
new XdcContext(),
94+
new XdcConsensusContext(),
9995
Substitute.For<IBlockTree>(),
100-
Substitute.For<IDb>(),
10196
specProvider,
102-
epochSwitchManager,
103-
new BlockInfoValidator());
97+
epochSwitchManager);
10498

10599
Assert.That(quorumCertificateManager.VerifyCertificate(quorumCert, xdcBlockHeaderBuilder.TestObject, out _), Is.EqualTo(expected));
106100
}

src/Nethermind/Nethermind.Xdc.Test/TimeoutCertificateManagerTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void VerifyTC_SnapshotMissing_ReturnsFalse()
4747
XdcBlockHeader header = Build.A.XdcBlockHeader().TestObject;
4848
blockTree.FindHeader(Arg.Any<long>()).Returns(header);
4949
var tcManager = new TimeoutCertificateManager(
50-
new XdcContext(),
50+
new XdcConsensusContext(),
5151
snapshotManager,
5252
Substitute.For<IEpochSwitchManager>(),
5353
Substitute.For<ISpecProvider>(),
@@ -71,7 +71,7 @@ public void VerifyTC_EmptyCandidates_ReturnsFalse()
7171
XdcBlockHeader header = Build.A.XdcBlockHeader().TestObject;
7272
blockTree.FindHeader(Arg.Any<long>()).Returns(header);
7373
var tcManager = new TimeoutCertificateManager(
74-
new XdcContext(),
74+
new XdcConsensusContext(),
7575
snapshotManager,
7676
Substitute.For<IEpochSwitchManager>(),
7777
Substitute.For<ISpecProvider>(),
@@ -137,7 +137,7 @@ public void VerifyTCWithDifferentParameters_ReturnsExpected(TimeoutCertificate t
137137
blockTree.Head.Returns(new Block(header, new BlockBody()));
138138
blockTree.FindHeader(Arg.Any<long>()).Returns(header);
139139

140-
var context = new XdcContext();
140+
var context = new XdcConsensusContext();
141141
ISyncInfoManager syncInfoManager = Substitute.For<ISyncInfoManager>();
142142
ISigner signer = Substitute.For<ISigner>();
143143

@@ -150,7 +150,7 @@ public void VerifyTCWithDifferentParameters_ReturnsExpected(TimeoutCertificate t
150150
private TimeoutCertificateManager BuildTimeoutCertificateManager()
151151
{
152152
return new TimeoutCertificateManager(
153-
new XdcContext(),
153+
new XdcConsensusContext(),
154154
Substitute.For<ISnapshotManager>(),
155155
Substitute.For<IEpochSwitchManager>(),
156156
Substitute.For<ISpecProvider>(),

0 commit comments

Comments
 (0)