Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
19 changes: 12 additions & 7 deletions src/Nethermind/Nethermind.Blockchain/BlockTree.cs
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,8 @@ public BlockHeader? LowestInsertedBeaconHeader

private TaskCompletionSource? _taskCompletionSource;

private readonly long _genesisBlockNumber;

public BlockTree(
IBlockStore? blockStore,
IHeaderStore? headerDb,
Expand All @@ -116,7 +118,8 @@ public BlockTree(
ISpecProvider? specProvider,
IBloomStorage? bloomStorage,
ISyncConfig? syncConfig,
ILogManager? logManager)
ILogManager? logManager,
long genesisBlockNumber = 0)
{
_logger = logManager?.GetClassLogger<BlockTree>() ?? throw new ArgumentNullException(nameof(logManager));
_blockStore = blockStore ?? throw new ArgumentNullException(nameof(blockStore));
Expand All @@ -131,6 +134,8 @@ public BlockTree(
throw new ArgumentNullException(nameof(chainLevelInfoRepository));
_oldestBlock = syncConfig.AncientBodiesBarrierCalc;

_genesisBlockNumber = genesisBlockNumber;

LoadSyncPivot();

byte[]? deletePointer = _blockInfoDb.Get(DeletePointerAddressInDb);
Expand All @@ -142,7 +147,7 @@ public BlockTree(
// Need to be here because it still need to run even if there are no genesis to store the null entry.
LoadLowestInsertedHeader();

ChainLevelInfo? genesisLevel = LoadLevel(0);
ChainLevelInfo? genesisLevel = LoadLevel(_genesisBlockNumber);
if (genesisLevel is not null)
{
BlockInfo genesisBlockInfo = genesisLevel.BlockInfos[0];
Expand Down Expand Up @@ -203,7 +208,7 @@ public AddBlockResult Insert(BlockHeader header, BlockTreeInsertHeaderOptions he
throw new InvalidOperationException("An attempt to insert a block header without a known bloom.");
}

if (header.Number == 0)
if (header.Number == _genesisBlockNumber)
{
throw new InvalidOperationException("Genesis block should not be inserted.");
}
Expand Down Expand Up @@ -301,7 +306,7 @@ public void BulkInsertHeader(IReadOnlyList<BlockHeader> headers,
throw new InvalidOperationException("An attempt to insert a block header without a known bloom.");
}

if (header.Number == 0)
if (header.Number == _genesisBlockNumber)
{
throw new InvalidOperationException("Genesis block should not be inserted.");
}
Expand Down Expand Up @@ -405,7 +410,7 @@ public AddBlockResult Insert(Block block, BlockTreeInsertBlockOptions insertBloc
return AddBlockResult.CannotAccept;
}

if (block.Number == 0)
if (block.Number == _genesisBlockNumber)
{
throw new InvalidOperationException("Genesis block should not be inserted.");
}
Expand Down Expand Up @@ -1178,7 +1183,7 @@ private void MoveToMain(Block block, BatchWrite batch, bool wasProcessed, bool f

if (forceUpdateHeadBlock || block.IsGenesis || HeadImprovementRequirementsSatisfied(block.Header))
{
if (block.Number == 0)
if (block.Number == _genesisBlockNumber)
{
Genesis = block.Header;
}
Expand Down Expand Up @@ -1408,7 +1413,7 @@ private void UpdateOrCreateLevel(in ArrayPoolListRef<(long number, BlockInfo blo
/// <returns></returns>
private bool ShouldCache(long number)
{
return number == 0L || Head is null || number >= Head.Number - BlockStore.CacheSize;
return number == _genesisBlockNumber || Head is null || number >= Head.Number - BlockStore.CacheSize;
}

public ChainLevelInfo? FindLevel(long number)
Expand Down
3 changes: 2 additions & 1 deletion src/Nethermind/Nethermind.Core/BlockHeader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ public BlockHeader(
ExcessBlobGas = excessBlobGas;
}

public bool IsGenesis => Number == 0L;
public virtual long GenesisBlockNumber => 0;
public bool IsGenesis => Number == GenesisBlockNumber;
public Hash256? ParentHash { get; set; }
public Hash256? UnclesHash { get; set; }
public Address? Author { get; set; }
Expand Down