Skip to content

Commit 6e7c2f3

Browse files
authored
add slots sanity and forks fixtures for Fulu (#6911)
1 parent ca6ca83 commit 6e7c2f3

File tree

5 files changed

+125
-43
lines changed

5 files changed

+125
-43
lines changed

ConsensusSpecPreset-mainnet.md

+32-1
Original file line numberDiff line numberDiff line change
@@ -3478,6 +3478,22 @@ OK: 1/1 Fail: 0/1 Skip: 0/1
34783478
+ [Valid] EF - Fulu - Finality - finality_rule_4 [Preset: mainnet] OK
34793479
```
34803480
OK: 5/5 Fail: 0/5 Skip: 0/5
3481+
## EF - Fulu - Fork [Preset: mainnet]
3482+
```diff
3483+
+ EF - Fulu - Fork - fork_base_state [Preset: mainnet] OK
3484+
+ EF - Fulu - Fork - fork_many_next_epoch [Preset: mainnet] OK
3485+
+ EF - Fulu - Fork - fork_next_epoch [Preset: mainnet] OK
3486+
+ EF - Fulu - Fork - fork_next_epoch_with_block [Preset: mainnet] OK
3487+
+ EF - Fulu - Fork - fork_random_low_balances [Preset: mainnet] OK
3488+
+ EF - Fulu - Fork - fork_random_misc_balances [Preset: mainnet] OK
3489+
+ EF - Fulu - Fork - fulu_fork_random_0 [Preset: mainnet] OK
3490+
+ EF - Fulu - Fork - fulu_fork_random_1 [Preset: mainnet] OK
3491+
+ EF - Fulu - Fork - fulu_fork_random_2 [Preset: mainnet] OK
3492+
+ EF - Fulu - Fork - fulu_fork_random_3 [Preset: mainnet] OK
3493+
+ EF - Fulu - Fork - fulu_fork_random_low_balances [Preset: mainnet] OK
3494+
+ EF - Fulu - Fork - fulu_fork_random_misc_balances [Preset: mainnet] OK
3495+
```
3496+
OK: 12/12 Fail: 0/12 Skip: 0/12
34813497
## EF - Fulu - Operations - Attestation [Preset: mainnet]
34823498
```diff
34833499
+ [Invalid] EF - Fulu - Operations - Attestation - invalid_after_max_inclusion_slot OK
@@ -4061,6 +4077,21 @@ OK: 59/59 Fail: 0/59 Skip: 0/59
40614077
+ [Valid] EF - Fulu - Sanity - Blocks - zero_blob [Preset: mainnet] OK
40624078
```
40634079
OK: 73/73 Fail: 0/73 Skip: 0/73
4080+
## EF - Fulu - Sanity - Slots [Preset: mainnet]
4081+
```diff
4082+
+ EF - Fulu - Slots - double_empty_epoch [Preset: mainnet] OK
4083+
+ EF - Fulu - Slots - empty_epoch [Preset: mainnet] OK
4084+
+ EF - Fulu - Slots - historical_accumulator [Preset: mainnet] OK
4085+
+ EF - Fulu - Slots - multiple_pending_deposits_same_pubkey [Preset: mainnet] OK
4086+
+ EF - Fulu - Slots - multiple_pending_deposits_same_pubkey_above_upward_threshold [Preset: OK
4087+
+ EF - Fulu - Slots - multiple_pending_deposits_same_pubkey_below_upward_threshold [Preset: OK
4088+
+ EF - Fulu - Slots - multiple_pending_deposits_same_pubkey_compounding [Preset: mainnet] OK
4089+
+ EF - Fulu - Slots - over_epoch_boundary [Preset: mainnet] OK
4090+
+ EF - Fulu - Slots - pending_consolidation [Preset: mainnet] OK
4091+
+ EF - Fulu - Slots - slots_1 [Preset: mainnet] OK
4092+
+ EF - Fulu - Slots - slots_2 [Preset: mainnet] OK
4093+
```
4094+
OK: 11/11 Fail: 0/11 Skip: 0/11
40644095
## EF - Light client - Single merkle proof [Preset: mainnet]
40654096
```diff
40664097
+ Light client - Single merkle proof - mainnet/altair/light_client/single_merkle_proof/Beaco OK
@@ -4651,4 +4682,4 @@ OK: 106/133 Fail: 0/133 Skip: 27/133
46514682
OK: 5/5 Fail: 0/5 Skip: 0/5
46524683

46534684
---TOTAL---
4654-
OK: 3798/3825 Fail: 0/3825 Skip: 27/3825
4685+
OK: 3821/3848 Fail: 0/3848 Skip: 27/3848

ConsensusSpecPreset-minimal.md

+34-1
Original file line numberDiff line numberDiff line change
@@ -3672,6 +3672,24 @@ OK: 5/5 Fail: 0/5 Skip: 0/5
36723672
+ [Valid] EF - Fulu - Finality - finality_rule_4 [Preset: minimal] OK
36733673
```
36743674
OK: 5/5 Fail: 0/5 Skip: 0/5
3675+
## EF - Fulu - Fork [Preset: minimal]
3676+
```diff
3677+
+ EF - Fulu - Fork - fork_base_state [Preset: minimal] OK
3678+
+ EF - Fulu - Fork - fork_many_next_epoch [Preset: minimal] OK
3679+
+ EF - Fulu - Fork - fork_next_epoch [Preset: minimal] OK
3680+
+ EF - Fulu - Fork - fork_next_epoch_with_block [Preset: minimal] OK
3681+
+ EF - Fulu - Fork - fork_random_large_validator_set [Preset: minimal] OK
3682+
+ EF - Fulu - Fork - fork_random_low_balances [Preset: minimal] OK
3683+
+ EF - Fulu - Fork - fork_random_misc_balances [Preset: minimal] OK
3684+
+ EF - Fulu - Fork - fulu_fork_random_0 [Preset: minimal] OK
3685+
+ EF - Fulu - Fork - fulu_fork_random_1 [Preset: minimal] OK
3686+
+ EF - Fulu - Fork - fulu_fork_random_2 [Preset: minimal] OK
3687+
+ EF - Fulu - Fork - fulu_fork_random_3 [Preset: minimal] OK
3688+
+ EF - Fulu - Fork - fulu_fork_random_large_validator_set [Preset: minimal] OK
3689+
+ EF - Fulu - Fork - fulu_fork_random_low_balances [Preset: minimal] OK
3690+
+ EF - Fulu - Fork - fulu_fork_random_misc_balances [Preset: minimal] OK
3691+
```
3692+
OK: 14/14 Fail: 0/14 Skip: 0/14
36753693
## EF - Fulu - Operations - Attestation [Preset: minimal]
36763694
```diff
36773695
+ [Invalid] EF - Fulu - Operations - Attestation - invalid_after_max_inclusion_slot OK
@@ -4294,6 +4312,21 @@ OK: 59/59 Fail: 0/59 Skip: 0/59
42944312
+ [Valid] EF - Fulu - Sanity - Blocks - zero_blob [Preset: minimal] OK
42954313
```
42964314
OK: 80/80 Fail: 0/80 Skip: 0/80
4315+
## EF - Fulu - Sanity - Slots [Preset: minimal]
4316+
```diff
4317+
+ EF - Fulu - Slots - double_empty_epoch [Preset: minimal] OK
4318+
+ EF - Fulu - Slots - empty_epoch [Preset: minimal] OK
4319+
+ EF - Fulu - Slots - historical_accumulator [Preset: minimal] OK
4320+
+ EF - Fulu - Slots - multiple_pending_deposits_same_pubkey [Preset: minimal] OK
4321+
+ EF - Fulu - Slots - multiple_pending_deposits_same_pubkey_above_upward_threshold [Preset: OK
4322+
+ EF - Fulu - Slots - multiple_pending_deposits_same_pubkey_below_upward_threshold [Preset: OK
4323+
+ EF - Fulu - Slots - multiple_pending_deposits_same_pubkey_compounding [Preset: minimal] OK
4324+
+ EF - Fulu - Slots - over_epoch_boundary [Preset: minimal] OK
4325+
+ EF - Fulu - Slots - pending_consolidation [Preset: minimal] OK
4326+
+ EF - Fulu - Slots - slots_1 [Preset: minimal] OK
4327+
+ EF - Fulu - Slots - slots_2 [Preset: minimal] OK
4328+
```
4329+
OK: 11/11 Fail: 0/11 Skip: 0/11
42974330
## EF - Light client - Data collection [Preset: minimal]
42984331
```diff
42994332
+ Light client - Data collection - minimal/altair/light_client/data_collection/pyspec_tests/ OK
@@ -5131,4 +5164,4 @@ OK: 282/314 Fail: 0/314 Skip: 32/314
51315164
OK: 5/5 Fail: 0/5 Skip: 0/5
51325165

51335166
---TOTAL---
5134-
OK: 4237/4269 Fail: 0/4269 Skip: 32/4269
5167+
OK: 4262/4294 Fail: 0/4294 Skip: 32/4294

beacon_chain/sync/request_manager.nim

+20-20
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
# beacon_chain
2-
# Copyright (c) 2018-2024 Status Research & Development GmbH
2+
# Copyright (c) 2018-2025 Status Research & Development GmbH
33
# Licensed and distributed under either of
44
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
55
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
66
# at your option. This file may not be copied, modified, or distributed except according to those terms.
77

88
{.push raises: [].}
99

10-
import std/[sequtils, strutils]
1110
import chronos, chronicles
1211
import
13-
../spec/datatypes/[phase0, deneb, fulu],
1412
../spec/[forks, network, peerdas_helpers],
1513
../networking/eth2_network,
1614
../consensus_object_pools/block_quarantine,
@@ -20,47 +18,49 @@ import
2018
../gossip_processing/block_processor
2119

2220
from std/algorithm import binarySearch, sort
21+
from std/sequtils import mapIt
22+
from std/strutils import join
2323
from ../beacon_clock import GetBeaconTimeFn
2424
export block_quarantine, sync_manager
2525

2626
logScope:
2727
topics = "requman"
2828

2929
const
30-
SYNC_MAX_REQUESTED_BLOCKS* = 32 # Spec allows up to MAX_REQUEST_BLOCKS.
30+
SYNC_MAX_REQUESTED_BLOCKS = 32 # Spec allows up to MAX_REQUEST_BLOCKS.
3131
## Maximum number of blocks which will be requested in each
3232
## `beaconBlocksByRoot` invocation.
33-
PARALLEL_REQUESTS* = 2
34-
## Number of peers we using to resolve our request.
33+
PARALLEL_REQUESTS = 2
34+
## Number of peers we're using to resolve our request.
3535

36-
PARALLEL_REQUESTS_DATA_COLUMNS* = 32
36+
PARALLEL_REQUESTS_DATA_COLUMNS = 32
3737

38-
BLOB_GOSSIP_WAIT_TIME_NS* = 2 * 1_000_000_000
38+
BLOB_GOSSIP_WAIT_TIME_NS = 2 * 1_000_000_000
3939
## How long to wait for blobs to arri ve over gossip before fetching.
4040

41-
DATA_COLUMN_GOSSIP_WAIT_TIME_NS* = 2 * 1_000_000_000
41+
DATA_COLUMN_GOSSIP_WAIT_TIME_NS = 2 * 1_000_000_000
4242
## How long to wait for blobs to arri ve over gossip before fetching.
4343

4444
POLL_INTERVAL = 1.seconds
4545

4646
type
47-
BlockVerifierFn* = proc(
47+
BlockVerifierFn = proc(
4848
signedBlock: ForkedSignedBeaconBlock,
4949
maybeFinalized: bool
5050
): Future[Result[void, VerifierError]] {.async: (raises: [CancelledError]).}
5151

52-
BlockLoaderFn* = proc(
52+
BlockLoaderFn = proc(
5353
blockRoot: Eth2Digest
5454
): Opt[ForkedTrustedSignedBeaconBlock] {.gcsafe, raises: [].}
5555

56-
BlobLoaderFn* = proc(
56+
BlobLoaderFn = proc(
5757
blobId: BlobIdentifier): Opt[ref BlobSidecar] {.gcsafe, raises: [].}
5858

59-
DataColumnLoaderFn* = proc(
59+
DataColumnLoaderFn = proc(
6060
columnId: DataColumnIdentifier):
6161
Opt[ref DataColumnSidecar] {.gcsafe, raises: [].}
6262

63-
InhibitFn* = proc: bool {.gcsafe, raises: [].}
63+
InhibitFn = proc: bool {.gcsafe, raises: [].}
6464

6565
RequestManager* = object
6666
network*: Eth2Node
@@ -112,7 +112,7 @@ proc init*(T: type RequestManager, network: Eth2Node,
112112
blobLoader: blobLoader,
113113
dataColumnLoader: dataColumnLoader)
114114

115-
proc checkResponse(roots: openArray[Eth2Digest],
115+
func checkResponse(roots: openArray[Eth2Digest],
116116
blocks: openArray[ref ForkedSignedBeaconBlock]): bool =
117117
## This procedure checks peer's response.
118118
var checks = @roots
@@ -130,7 +130,7 @@ func cmpSidecarIdentifier(x: BlobIdentifier | DataColumnIdentifier,
130130
y: ref BlobSidecar | ref DataColumnSidecar): int =
131131
cmp(x.index, y.index)
132132

133-
proc checkResponse(idList: seq[BlobIdentifier],
133+
func checkResponse(idList: seq[BlobIdentifier],
134134
blobs: openArray[ref BlobSidecar]): bool =
135135
if blobs.len > idList.len:
136136
return false
@@ -154,7 +154,7 @@ proc checkResponse(idList: seq[BlobIdentifier],
154154
inc i
155155
true
156156

157-
proc checkResponse(idList: seq[DataColumnIdentifier],
157+
func checkResponse(idList: seq[DataColumnIdentifier],
158158
columns: openArray[ref DataColumnSidecar]): bool =
159159
if columns.len > idList.len:
160160
return false
@@ -295,9 +295,9 @@ proc fetchBlobsFromNetwork(self: RequestManager,
295295
if not(isNil(peer)):
296296
self.network.peerPool.release(peer)
297297

298-
proc checkPeerCustody*(rman: RequestManager,
299-
peer: Peer):
300-
bool =
298+
proc checkPeerCustody(rman: RequestManager,
299+
peer: Peer):
300+
bool =
301301
# Returns true if the peer custodies atleast
302302
# ONE of the common custody columns, straight
303303
# away returns true if the peer is a supernode.

tests/consensus_spec/test_fixture_fork.nim

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# beacon_chain
2-
# Copyright (c) 2021-2024 Status Research & Development GmbH
2+
# Copyright (c) 2021-2025 Status Research & Development GmbH
33
# Licensed and distributed under either of
44
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
55
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
@@ -85,4 +85,13 @@ suite "EF - Electra - Fork " & preset():
8585
SszTestsDir/const_preset/"electra"/"fork"/"fork"/"pyspec_tests"
8686
for kind, path in walkDir(OpForkDir, relative = true, checkDir = true):
8787
runTest(deneb.BeaconState, electra.BeaconState, "Electra", OpForkDir,
88-
upgrade_to_electra, suiteName, path)
88+
upgrade_to_electra, suiteName, path)
89+
90+
from ../../beacon_chain/spec/datatypes/fulu import BeaconState
91+
92+
suite "EF - Fulu - Fork " & preset():
93+
const OpForkDir =
94+
SszTestsDir/const_preset/"fulu"/"fork"/"fork"/"pyspec_tests"
95+
for kind, path in walkDir(OpForkDir, relative = true, checkDir = true):
96+
runTest(electra.BeaconState, fulu.BeaconState, "Fulu", OpForkDir,
97+
upgrade_to_fulu, suiteName, path)

tests/consensus_spec/test_fixture_sanity_slots.nim

+28-19
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# beacon_chain
2-
# Copyright (c) 2018-2024 Status Research & Development GmbH
2+
# Copyright (c) 2018-2025 Status Research & Development GmbH
33
# Licensed and distributed under either of
44
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
55
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
@@ -53,48 +53,57 @@ func sanitySlotsDir(preset_dir: string): string {.compileTime.} =
5353
from ../../beacon_chain/spec/datatypes/phase0 import BeaconState
5454

5555
suite "EF - Phase 0 - Sanity - Slots " & preset():
56-
const phase0SanitySlotsDir = sanitySlotsDir("phase0")
56+
const sanitySlotsDir = sanitySlotsDir("phase0")
5757
for kind, path in walkDir(
58-
phase0SanitySlotsDir, relative = true, checkDir = true):
59-
runTest(phase0.BeaconState, phase0SanitySlotsDir, "Phase 0", suiteName, path)
58+
sanitySlotsDir, relative = true, checkDir = true):
59+
runTest(phase0.BeaconState, sanitySlotsDir, "Phase 0", suiteName, path)
6060

6161
from ../../beacon_chain/spec/datatypes/altair import BeaconState
6262

6363
suite "EF - Altair - Sanity - Slots " & preset():
64-
const altairSanitySlotsDir = sanitySlotsDir("altair")
64+
const sanitySlotsDir = sanitySlotsDir("altair")
6565
for kind, path in walkDir(
66-
altairSanitySlotsDir, relative = true, checkDir = true):
67-
runTest(altair.BeaconState, altairSanitySlotsDir, "Altair", suiteName, path)
66+
sanitySlotsDir, relative = true, checkDir = true):
67+
runTest(altair.BeaconState, sanitySlotsDir, "Altair", suiteName, path)
6868

6969
from ../../beacon_chain/spec/datatypes/bellatrix import BeaconState
7070

7171
suite "EF - Bellatrix - Sanity - Slots " & preset():
72-
const bellatrixSanitySlotsDir = sanitySlotsDir("bellatrix")
72+
const sanitySlotsDir = sanitySlotsDir("bellatrix")
7373
for kind, path in walkDir(
74-
bellatrixSanitySlotsDir, relative = true, checkDir = true):
75-
runTest(bellatrix.BeaconState, bellatrixSanitySlotsDir, "Bellatrix", suiteName, path)
74+
sanitySlotsDir, relative = true, checkDir = true):
75+
runTest(bellatrix.BeaconState, sanitySlotsDir, "Bellatrix", suiteName, path)
7676

7777
from ../../beacon_chain/spec/datatypes/capella import BeaconState
7878

7979
suite "EF - Capella - Sanity - Slots " & preset():
80-
const capellaSanitySlotsDir = sanitySlotsDir("capella")
80+
const sanitySlotsDir = sanitySlotsDir("capella")
8181
for kind, path in walkDir(
82-
capellaSanitySlotsDir, relative = true, checkDir = true):
83-
runTest(capella.BeaconState, capellaSanitySlotsDir, "Capella", suiteName, path)
82+
sanitySlotsDir, relative = true, checkDir = true):
83+
runTest(capella.BeaconState, sanitySlotsDir, "Capella", suiteName, path)
8484

8585
from ../../beacon_chain/spec/datatypes/deneb import BeaconState
8686

8787
suite "EF - Deneb - Sanity - Slots " & preset():
88-
const denebSanitySlotsDir = sanitySlotsDir("deneb")
88+
const sanitySlotsDir = sanitySlotsDir("deneb")
8989
for kind, path in walkDir(
90-
denebSanitySlotsDir, relative = true, checkDir = true):
91-
runTest(deneb.BeaconState, denebSanitySlotsDir, "Deneb", suiteName, path)
90+
sanitySlotsDir, relative = true, checkDir = true):
91+
runTest(deneb.BeaconState, sanitySlotsDir, "Deneb", suiteName, path)
9292

9393
from ../../beacon_chain/spec/datatypes/electra import BeaconState
9494

9595
suite "EF - Electra - Sanity - Slots " & preset():
96-
const electraSanitySlotsDir = sanitySlotsDir("electra")
96+
const sanitySlotsDir = sanitySlotsDir("electra")
9797
for kind, path in walkDir(
98-
electraSanitySlotsDir, relative = true, checkDir = true):
98+
sanitySlotsDir, relative = true, checkDir = true):
9999
runTest(
100-
electra.BeaconState, electraSanitySlotsDir, "Electra", suiteName, path)
100+
electra.BeaconState, sanitySlotsDir, "Electra", suiteName, path)
101+
102+
from ../../beacon_chain/spec/datatypes/fulu import BeaconState
103+
104+
suite "EF - Fulu - Sanity - Slots " & preset():
105+
const sanitySlotsDir = sanitySlotsDir("fulu")
106+
for kind, path in walkDir(
107+
sanitySlotsDir, relative = true, checkDir = true):
108+
runTest(
109+
fulu.BeaconState, sanitySlotsDir, "Fulu", suiteName, path)

0 commit comments

Comments
 (0)