From 8e60dc12c6e019863635930525cc21ad5fc45882 Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Mon, 12 Dec 2022 19:19:12 +0700 Subject: [PATCH 1/3] Revert "Use state dialed to attestation target epoch (#4849)" This reverts commit b6032c53aac7886f5654017c3105286ba8d716c8. --- .../src/chain/validation/aggregateAndProof.ts | 27 ++++++------------- .../src/chain/validation/attestation.ts | 23 ++++++---------- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/packages/beacon-node/src/chain/validation/aggregateAndProof.ts b/packages/beacon-node/src/chain/validation/aggregateAndProof.ts index 71c7fbedd7d8..451a2e3e5dc3 100644 --- a/packages/beacon-node/src/chain/validation/aggregateAndProof.ts +++ b/packages/beacon-node/src/chain/validation/aggregateAndProof.ts @@ -76,25 +76,14 @@ export async function validateGossipAggregateAndProof( // -- i.e. get_ancestor(store, aggregate.data.beacon_block_root, compute_start_slot_at_epoch(store.finalized_checkpoint.epoch)) == store.finalized_checkpoint.root // > Altready check in `chain.forkChoice.hasBlock(attestation.data.beaconBlockRoot)` - // TODO: Must be a state in the same chain as attHeadBlock, but dialed to target.epoch - const attHeadState = - computeEpochAtSlot(attHeadBlock.slot) < attEpoch - ? await chain.regen - .getCheckpointState(attTarget, RegenCaller.validateGossipAggregateAndProof) - .catch((e: Error) => { - throw new AttestationError(GossipAction.REJECT, { - code: AttestationErrorCode.MISSING_ATTESTATION_HEAD_STATE, - error: e as Error, - }); - }) - : await chain.regen - .getState(attHeadBlock.stateRoot, RegenCaller.validateGossipAggregateAndProof) - .catch((e: Error) => { - throw new AttestationError(GossipAction.REJECT, { - code: AttestationErrorCode.MISSING_ATTESTATION_HEAD_STATE, - error: e as Error, - }); - }); + const attHeadState = await chain.regen + .getState(attHeadBlock.stateRoot, RegenCaller.validateGossipAggregateAndProof) + .catch((e: Error) => { + throw new AttestationError(GossipAction.REJECT, { + code: AttestationErrorCode.MISSING_ATTESTATION_HEAD_STATE, + error: e as Error, + }); + }); const committeeIndices: number[] = getCommitteeIndices(attHeadState, attSlot, attIndex); diff --git a/packages/beacon-node/src/chain/validation/attestation.ts b/packages/beacon-node/src/chain/validation/attestation.ts index 416417c76f99..3e6b057346fb 100644 --- a/packages/beacon-node/src/chain/validation/attestation.ts +++ b/packages/beacon-node/src/chain/validation/attestation.ts @@ -76,21 +76,14 @@ export async function validateGossipAttestation( // --i.e. get_ancestor(store, attestation.data.beacon_block_root, compute_start_slot_at_epoch(attestation.data.target.epoch)) == attestation.data.target.root // > Altready check in `verifyHeadBlockAndTargetRoot()` - // TODO: Must be a state in the same chain as attHeadBlock, but dialed to target.epoch - const attHeadState = - computeEpochAtSlot(attHeadBlock.slot) < attEpoch - ? await chain.regen.getCheckpointState(attTarget, RegenCaller.validateGossipAttestation).catch((e: Error) => { - throw new AttestationError(GossipAction.REJECT, { - code: AttestationErrorCode.MISSING_ATTESTATION_HEAD_STATE, - error: e as Error, - }); - }) - : await chain.regen.getState(attHeadBlock.stateRoot, RegenCaller.validateGossipAttestation).catch((e: Error) => { - throw new AttestationError(GossipAction.REJECT, { - code: AttestationErrorCode.MISSING_ATTESTATION_HEAD_STATE, - error: e as Error, - }); - }); + const attHeadState = await chain.regen + .getState(attHeadBlock.stateRoot, RegenCaller.validateGossipAttestation) + .catch((e: Error) => { + throw new AttestationError(GossipAction.REJECT, { + code: AttestationErrorCode.MISSING_ATTESTATION_HEAD_STATE, + error: e as Error, + }); + }); // [REJECT] The committee index is within the expected range // -- i.e. data.index < get_committee_count_per_slot(state, data.target.epoch) From 69d2034badbbbbb4bafb1bfd4ce4f01a8571b966 Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Mon, 12 Dec 2022 19:32:49 +0700 Subject: [PATCH 2/3] Add more comments --- .../beacon-node/src/chain/validation/aggregateAndProof.ts | 3 +++ packages/beacon-node/src/chain/validation/attestation.ts | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/packages/beacon-node/src/chain/validation/aggregateAndProof.ts b/packages/beacon-node/src/chain/validation/aggregateAndProof.ts index 451a2e3e5dc3..291821bb7ea6 100644 --- a/packages/beacon-node/src/chain/validation/aggregateAndProof.ts +++ b/packages/beacon-node/src/chain/validation/aggregateAndProof.ts @@ -76,6 +76,9 @@ export async function validateGossipAggregateAndProof( // -- i.e. get_ancestor(store, aggregate.data.beacon_block_root, compute_start_slot_at_epoch(store.finalized_checkpoint.epoch)) == store.finalized_checkpoint.root // > Altready check in `chain.forkChoice.hasBlock(attestation.data.beaconBlockRoot)` + // Using the target checkpoint state here caused unstable memory issue + // See https://github.com/ChainSafe/lodestar/issues/4896 + // TODO: https://github.com/ChainSafe/lodestar/issues/4900 const attHeadState = await chain.regen .getState(attHeadBlock.stateRoot, RegenCaller.validateGossipAggregateAndProof) .catch((e: Error) => { diff --git a/packages/beacon-node/src/chain/validation/attestation.ts b/packages/beacon-node/src/chain/validation/attestation.ts index 3e6b057346fb..6815af88cb17 100644 --- a/packages/beacon-node/src/chain/validation/attestation.ts +++ b/packages/beacon-node/src/chain/validation/attestation.ts @@ -76,6 +76,10 @@ export async function validateGossipAttestation( // --i.e. get_ancestor(store, attestation.data.beacon_block_root, compute_start_slot_at_epoch(attestation.data.target.epoch)) == attestation.data.target.root // > Altready check in `verifyHeadBlockAndTargetRoot()` + + // Using the target checkpoint state here caused unstable memory issue + // See https://github.com/ChainSafe/lodestar/issues/4896 + // TODO: https://github.com/ChainSafe/lodestar/issues/4900 const attHeadState = await chain.regen .getState(attHeadBlock.stateRoot, RegenCaller.validateGossipAttestation) .catch((e: Error) => { From b45b708873b6804ef48232bb652dda3e10090794 Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Mon, 12 Dec 2022 19:48:13 +0700 Subject: [PATCH 3/3] Fix lint --- packages/beacon-node/src/chain/validation/attestation.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/beacon-node/src/chain/validation/attestation.ts b/packages/beacon-node/src/chain/validation/attestation.ts index 6815af88cb17..b463dbdf9533 100644 --- a/packages/beacon-node/src/chain/validation/attestation.ts +++ b/packages/beacon-node/src/chain/validation/attestation.ts @@ -76,7 +76,6 @@ export async function validateGossipAttestation( // --i.e. get_ancestor(store, attestation.data.beacon_block_root, compute_start_slot_at_epoch(attestation.data.target.epoch)) == attestation.data.target.root // > Altready check in `verifyHeadBlockAndTargetRoot()` - // Using the target checkpoint state here caused unstable memory issue // See https://github.com/ChainSafe/lodestar/issues/4896 // TODO: https://github.com/ChainSafe/lodestar/issues/4900