Skip to content

Commit 52b537b

Browse files
committed
Require account-only BAL reads
1 parent 20d8348 commit 52b537b

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,19 @@ public void ParallelWorldState_bal_read_budget_ignores_reads_already_in_generate
278278
Assert.That(act, Throws.Nothing);
279279
}
280280

281+
[Test, MaxTime(Timeout.MaxTestTime)]
282+
public void ParallelWorldState_bal_validation_rejects_missing_account_only_reads()
283+
{
284+
ParallelWorldState stateProvider = new(TestWorldStateFactory.CreateForTest());
285+
stateProvider.LoadSuggestedBlockAccessList(new BlockAccessList(), 10_000);
286+
stateProvider.GeneratedBlockAccessList.IncrementBlockAccessIndex();
287+
stateProvider.GeneratedBlockAccessList.AddAccountRead(TestItem.AddressA);
288+
289+
TestDelegate act = () => stateProvider.ValidateBlockAccessList(Build.A.BlockHeader.TestObject, 1, 10_000);
290+
291+
Assert.Throws<ParallelWorldState.InvalidBlockLevelAccessListException>(act);
292+
}
293+
281294
[Test, MaxTime(Timeout.MaxTestTime)]
282295
public void BranchProcessor_no_prewarmer_still_processes_successfully()
283296
{

src/Nethermind/Nethermind.State/ParallelWorldState.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ void AdvanceSuggested()
280280
{
281281
if (suggestedHead is null)
282282
{
283-
if (HasNoChanges(generatedHead.Value))
283+
if (HasOptionalStorageReads(generatedHead.Value))
284284
{
285285
AdvanceGenerated();
286286
continue;
@@ -320,7 +320,7 @@ void AdvanceSuggested()
320320
}
321321
else
322322
{
323-
if (HasNoChanges(generatedHead.Value))
323+
if (HasOptionalStorageReads(generatedHead.Value))
324324
{
325325
AdvanceGenerated();
326326
continue;
@@ -367,4 +367,7 @@ private static bool HasNoChanges(in ChangeAtIndex c)
367367
c.NonceChange is null &&
368368
c.CodeChange is null &&
369369
!c.SlotChanges.GetEnumerator().MoveNext();
370+
371+
private static bool HasOptionalStorageReads(in ChangeAtIndex c)
372+
=> HasNoChanges(c) && c.Reads > 0;
370373
}

0 commit comments

Comments
 (0)