From e23ee704f3678fd06a7aea5b687b89f0f61ba919 Mon Sep 17 00:00:00 2001 From: tersec Date: Wed, 9 Apr 2025 11:27:12 +0000 Subject: [PATCH 1/2] reduce light client data store stack usage --- .../consensus_object_pools/attestation_pool.nim | 6 +++--- beacon_chain/nimbus_beacon_node.nim | 2 +- beacon_chain/rpc/rest_rewards_api.nim | 4 ++-- beacon_chain/spec/forks_light_client.nim | 6 +++--- beacon_chain/validators/beacon_validators.nim | 6 +++--- config.nims | 6 +++--- tests/consensus_spec/test_fixture_kzg.nim | 6 +++--- tests/test_keymanager_api.nim | 2 +- tests/test_sync_committee_pool.nim | 17 ++++++----------- 9 files changed, 25 insertions(+), 30 deletions(-) diff --git a/beacon_chain/consensus_object_pools/attestation_pool.nim b/beacon_chain/consensus_object_pools/attestation_pool.nim index 949374aa83..af9c5e3887 100644 --- a/beacon_chain/consensus_object_pools/attestation_pool.nim +++ b/beacon_chain/consensus_object_pools/attestation_pool.nim @@ -213,7 +213,7 @@ func candidateIdx( Opt[int] = static: doAssert pool.phase0Candidates.len == pool.electraCandidates.len - let poolLength = if candidateIdxtype == CandidateIdxType.electraIdx: + let poolLength = if candidateIdxType == CandidateIdxType.electraIdx: pool.electraCandidates.lenu64 else: pool.phase0Candidates.lenu64 if slot >= pool.startingSlot and @@ -1033,10 +1033,10 @@ proc getElectraAttestationsForBlock*( var e2 = entry.data e2.index = 0 e2 - key = (hash_tree_root(entry2), entry.data.slot.Slot) + key = (hash_tree_root(entry2), entry.data.slot) newAtt = entry[].toElectraAttestation(entry[].aggregates[j]) - candidatesPerBlock.mGetOrPut(key, @[]).add(newAtt) + candidatesPerBlock.mgetOrPut(key, @[]).add(newAtt) # Update cache so that the new votes are taken into account when updating # the score below diff --git a/beacon_chain/nimbus_beacon_node.nim b/beacon_chain/nimbus_beacon_node.nim index 1887c69961..e811d7244b 100644 --- a/beacon_chain/nimbus_beacon_node.nim +++ b/beacon_chain/nimbus_beacon_node.nim @@ -274,7 +274,7 @@ proc checkWeakSubjectivityCheckpoint( from ./spec/state_transition_block import kzg_commitment_to_versioned_hash -proc isSlotWithinWeakSubjectivityPeriod(dag: ChainDagRef, slot: Slot): bool = +proc isSlotWithinWeakSubjectivityPeriod(dag: ChainDAGRef, slot: Slot): bool = let checkpoint = Checkpoint( epoch: epoch(getStateField(dag.headState, slot)), diff --git a/beacon_chain/rpc/rest_rewards_api.nim b/beacon_chain/rpc/rest_rewards_api.nim index 44f5f9eb3e..629eeaca6a 100644 --- a/beacon_chain/rpc/rest_rewards_api.nim +++ b/beacon_chain/rpc/rest_rewards_api.nim @@ -169,11 +169,11 @@ proc installRewardsApiHandlers*(router: var RestRouter, node: BeaconNode) = let response = withState(tmpState[]): - let total_active_balance = - get_total_active_balance(forkyState.data, cache) var resp: seq[RestSyncCommitteeReward] when consensusFork > ConsensusFork.Phase0: let + total_active_balance = + get_total_active_balance(forkyState.data, cache) keys = block: var res: HashSet[ValidatorPubKey] diff --git a/beacon_chain/spec/forks_light_client.nim b/beacon_chain/spec/forks_light_client.nim index 21b590bbb3..3bec143396 100644 --- a/beacon_chain/spec/forks_light_client.nim +++ b/beacon_chain/spec/forks_light_client.nim @@ -958,13 +958,13 @@ func migrateToDataFork*( discard elif newKind < x.kind: # Downgrade not supported, re-initialize - x = ForkedLightClientStore(kind: newKind) + x = static(ForkedLightClientStore(kind: newKind)) else: # Upgrade to Altair when newKind >= LightClientDataFork.Altair: if x.kind == LightClientDataFork.None: - x = ForkedLightClientStore( - kind: LightClientDataFork.Altair) + x = static(ForkedLightClientStore( + kind: LightClientDataFork.Altair)) # Upgrade to Capella when newKind >= LightClientDataFork.Capella: diff --git a/beacon_chain/validators/beacon_validators.nim b/beacon_chain/validators/beacon_validators.nim index e5453eb850..b48365a9e1 100644 --- a/beacon_chain/validators/beacon_validators.nim +++ b/beacon_chain/validators/beacon_validators.nim @@ -1011,16 +1011,16 @@ proc getBuilderBid[ return err unsignedBlindedBlock.error() template execution_requests: untyped = - unsignedBlindedBlock.get.message.body.execution_requests + unsignedBlindedBlock.get.message.body.execution_requests when SBBB is deneb_mev.SignedBlindedBeaconBlock: - return ok(BuilderBid[SBBB]( + return ok(BuilderBid[SBBB]( blindedBlckPart: unsignedBlindedBlock.get, executionRequests: default(ExecutionRequests), executionPayloadValue: bidValue, consensusBlockValue: consensusValue)) elif SBBB is electra_mev.SignedBlindedBeaconBlock or SBBB is fulu_mev.SignedBlindedBeaconBlock: - return ok(BuilderBid[SBBB]( + return ok(BuilderBid[SBBB]( blindedBlckPart: unsignedBlindedBlock.get, executionRequests: execution_requests, executionPayloadValue: bidValue, diff --git a/config.nims b/config.nims index 5fbf327994..0e6af5334b 100644 --- a/config.nims +++ b/config.nims @@ -1,5 +1,5 @@ # beacon_chain -# Copyright (c) 2020-2024 Status Research & Development GmbH +# Copyright (c) 2020-2025 Status Research & Development GmbH # Licensed and distributed under either of # * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). # * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). @@ -114,8 +114,8 @@ elif defined(macosx) and defined(arm64): switch("passC", "-mcpu=apple-m1") switch("passL", "-mcpu=apple-m1") elif defined(riscv64): - # riscv64 needs specification of ISA with extensions. 'gc' is widely supported - # and seems to be the minimum extensions needed to build. + # riscv64 needs specification of ISA with extensions. 'gc' is widely supported + # and seems to be the minimum extensions needed to build. switch("passC", "-march=rv64gc") switch("passL", "-march=rv64gc") else: diff --git a/tests/consensus_spec/test_fixture_kzg.nim b/tests/consensus_spec/test_fixture_kzg.nim index 79bbc8cbf7..d340b39bcd 100644 --- a/tests/consensus_spec/test_fixture_kzg.nim +++ b/tests/consensus_spec/test_fixture_kzg.nim @@ -217,9 +217,9 @@ proc runComputeCellsTest(suiteName, suitePath, path: string) = if p[].isErr: check output.kind == JNull else: - let p_val = p[].get + let p_val = newClone p[].get for i in 0.. Date: Sat, 12 Apr 2025 03:06:34 +0000 Subject: [PATCH 2/2] copyright year linting --- beacon_chain/rpc/rest_rewards_api.nim | 2 +- beacon_chain/spec/forks_light_client.nim | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/beacon_chain/rpc/rest_rewards_api.nim b/beacon_chain/rpc/rest_rewards_api.nim index 629eeaca6a..dbc38897bb 100644 --- a/beacon_chain/rpc/rest_rewards_api.nim +++ b/beacon_chain/rpc/rest_rewards_api.nim @@ -1,5 +1,5 @@ # beacon_chain -# Copyright (c) 2018-2024 Status Research & Development GmbH +# Copyright (c) 2018-2025 Status Research & Development GmbH # Licensed and distributed under either of # * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). # * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). diff --git a/beacon_chain/spec/forks_light_client.nim b/beacon_chain/spec/forks_light_client.nim index 3bec143396..5b3a2c3062 100644 --- a/beacon_chain/spec/forks_light_client.nim +++ b/beacon_chain/spec/forks_light_client.nim @@ -1,5 +1,5 @@ # beacon_chain -# Copyright (c) 2023-2024 Status Research & Development GmbH +# Copyright (c) 2023-2025 Status Research & Development GmbH # Licensed and distributed under either of # * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). # * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).