public void TestReplayBlock()
{
using (var simulator = new MainnetSimulator())
{
simulator.AddBlockRange(0, 9999);
simulator.WaitForUpdate();
using (var chainState = simulator.CoreDaemon.GetChainState())
{
Assert.AreEqual(9999, chainState.Chain.Height);
for (var blockHeight = 0; blockHeight <= chainState.Chain.Height; blockHeight++)
{
var blockHash = chainState.Chain.Blocks[blockHeight].Hash;
var expectedTransactions = simulator.BlockProvider.GetBlock(blockHeight).Transactions;
var actualTransactions = BlockReplayer.ReplayBlock(simulator.CoreDaemon.CoreStorage, chainState, blockHash, replayForward: true)
.ToEnumerable().ToList();
CollectionAssert.AreEqual(
expectedTransactions.Select(x => x.Hash).ToList(),
actualTransactions.Select(x => x.Transaction.Hash).ToList(),
$"Transactions differ at block {blockHeight:N0}");
}
}
}
}