@lodestar/beacon-node 1.39.0-dev.c151a164f2 → 1.39.0-dev.f4236afdba
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +1 -1
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts +1 -2
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js +2 -2
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +4 -6
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -4
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +4 -4
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/opPool.d.ts +0 -3
- package/lib/chain/opPools/opPool.d.ts.map +1 -1
- package/lib/chain/opPools/opPool.js +8 -9
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +2 -2
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/rewards/attestationsRewards.d.ts +1 -2
- package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -1
- package/lib/chain/rewards/attestationsRewards.js +8 -8
- package/lib/chain/rewards/attestationsRewards.js.map +1 -1
- package/lib/chain/rewards/blockRewards.d.ts +1 -2
- package/lib/chain/rewards/blockRewards.d.ts.map +1 -1
- package/lib/chain/rewards/blockRewards.js +5 -5
- package/lib/chain/rewards/blockRewards.js.map +1 -1
- package/lib/chain/rewards/syncCommitteeRewards.d.ts +1 -2
- package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -1
- package/lib/chain/rewards/syncCommitteeRewards.js +2 -2
- package/lib/chain/rewards/syncCommitteeRewards.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +1 -4
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +2 -4
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +1 -1
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/block.js +1 -1
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/blsToExecutionChange.js +1 -1
- package/lib/chain/validation/proposerSlashing.js +1 -1
- package/lib/chain/validation/proposerSlashing.js.map +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.js +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +1 -2
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.js +2 -2
- package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts +1 -2
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.js +2 -2
- package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +1 -2
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +1 -2
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +2 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
- package/lib/chain/validation/syncCommittee.js +1 -1
- package/lib/chain/validation/syncCommittee.js.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.js +3 -3
- package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
- package/lib/chain/validation/voluntaryExit.js +1 -1
- package/lib/chain/validation/voluntaryExit.js.map +1 -1
- package/lib/sync/backfill/backfill.d.ts.map +1 -1
- package/lib/sync/backfill/backfill.js +4 -2
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/backfill/verify.d.ts +1 -1
- package/lib/sync/backfill/verify.d.ts.map +1 -1
- package/lib/sync/backfill/verify.js +2 -2
- package/lib/sync/backfill/verify.js.map +1 -1
- package/package.json +14 -14
- package/src/chain/blocks/verifyBlock.ts +0 -1
- package/src/chain/blocks/verifyBlocksSignatures.ts +1 -3
- package/src/chain/chain.ts +4 -6
- package/src/chain/opPools/aggregatedAttestationPool.ts +7 -7
- package/src/chain/opPools/opPool.ts +8 -8
- package/src/chain/produceBlock/produceBlockBody.ts +2 -2
- package/src/chain/rewards/attestationsRewards.ts +4 -13
- package/src/chain/rewards/blockRewards.ts +3 -6
- package/src/chain/rewards/syncCommitteeRewards.ts +1 -3
- package/src/chain/stateCache/persistentCheckpointsCache.ts +2 -15
- package/src/chain/validation/attesterSlashing.ts +1 -1
- package/src/chain/validation/block.ts +1 -1
- package/src/chain/validation/blsToExecutionChange.ts +1 -1
- package/src/chain/validation/proposerSlashing.ts +1 -1
- package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
- package/src/chain/validation/signatureSets/contributionAndProof.ts +1 -3
- package/src/chain/validation/signatureSets/syncCommittee.ts +1 -3
- package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +1 -3
- package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +1 -2
- package/src/chain/validation/syncCommittee.ts +1 -1
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +3 -8
- package/src/chain/validation/voluntaryExit.ts +1 -1
- package/src/sync/backfill/backfill.ts +3 -8
- package/src/sync/backfill/verify.ts +1 -3
|
@@ -44,7 +44,7 @@ async function validateProposerSlashing(
|
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
const signatureSets = getProposerSlashingSignatureSets(chain.
|
|
47
|
+
const signatureSets = getProposerSlashingSignatureSets(chain.index2pubkey, state, proposerSlashing);
|
|
48
48
|
if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
|
|
49
49
|
throw new ProposerSlashingError(GossipAction.REJECT, {
|
|
50
50
|
code: ProposerSlashingErrorCode.INVALID,
|
|
@@ -14,7 +14,7 @@ export function getAggregateAndProofSigningRoot(
|
|
|
14
14
|
epoch: Epoch,
|
|
15
15
|
aggregateAndProof: SignedAggregateAndProof
|
|
16
16
|
): Uint8Array {
|
|
17
|
-
// previously, we call `const aggregatorDomain = config.getDomain(state.slot, DOMAIN_AGGREGATE_AND_PROOF, slot);`
|
|
17
|
+
// previously, we call `const aggregatorDomain = state.config.getDomain(state.slot, DOMAIN_AGGREGATE_AND_PROOF, slot);`
|
|
18
18
|
// at fork boundary, it's required to dial to target epoch https://github.com/ChainSafe/lodestar/blob/v1.11.3/packages/beacon-node/src/chain/validation/attestation.ts#L573
|
|
19
19
|
// instead of that, just use the fork of slot in the attestation data
|
|
20
20
|
const slot = computeStartSlotAtEpoch(epoch);
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {BeaconConfig} from "@lodestar/config";
|
|
2
1
|
import {DOMAIN_CONTRIBUTION_AND_PROOF} from "@lodestar/params";
|
|
3
2
|
import {
|
|
4
3
|
CachedBeaconStateAllForks,
|
|
@@ -10,12 +9,11 @@ import {
|
|
|
10
9
|
import {altair, ssz} from "@lodestar/types";
|
|
11
10
|
|
|
12
11
|
export function getContributionAndProofSignatureSet(
|
|
13
|
-
config: BeaconConfig,
|
|
14
12
|
index2pubkey: Index2PubkeyCache,
|
|
15
13
|
state: CachedBeaconStateAllForks,
|
|
16
14
|
signedContributionAndProof: altair.SignedContributionAndProof
|
|
17
15
|
): ISignatureSet {
|
|
18
|
-
const domain = config.getDomain(
|
|
16
|
+
const domain = state.config.getDomain(
|
|
19
17
|
state.slot,
|
|
20
18
|
DOMAIN_CONTRIBUTION_AND_PROOF,
|
|
21
19
|
signedContributionAndProof.message.contribution.slot
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {BeaconConfig} from "@lodestar/config";
|
|
2
1
|
import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
|
|
3
2
|
import {
|
|
4
3
|
CachedBeaconStateAllForks,
|
|
@@ -10,12 +9,11 @@ import {
|
|
|
10
9
|
import {altair, ssz} from "@lodestar/types";
|
|
11
10
|
|
|
12
11
|
export function getSyncCommitteeSignatureSet(
|
|
13
|
-
config: BeaconConfig,
|
|
14
12
|
index2pubkey: Index2PubkeyCache,
|
|
15
13
|
state: CachedBeaconStateAllForks,
|
|
16
14
|
syncCommittee: altair.SyncCommitteeMessage
|
|
17
15
|
): ISignatureSet {
|
|
18
|
-
const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
|
|
16
|
+
const domain = state.config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
|
|
19
17
|
|
|
20
18
|
return {
|
|
21
19
|
type: SignatureSetType.single,
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import {PublicKey} from "@chainsafe/blst";
|
|
2
|
-
import {BeaconConfig} from "@lodestar/config";
|
|
3
2
|
import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
|
|
4
3
|
import {CachedBeaconStateAltair, ISignatureSet, SignatureSetType, computeSigningRoot} from "@lodestar/state-transition";
|
|
5
4
|
import {altair, ssz} from "@lodestar/types";
|
|
6
5
|
|
|
7
6
|
export function getSyncCommitteeContributionSignatureSet(
|
|
8
|
-
config: BeaconConfig,
|
|
9
7
|
state: CachedBeaconStateAltair,
|
|
10
8
|
contribution: altair.SyncCommitteeContribution,
|
|
11
9
|
pubkeys: PublicKey[]
|
|
12
10
|
): ISignatureSet {
|
|
13
|
-
const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, contribution.slot);
|
|
11
|
+
const domain = state.config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, contribution.slot);
|
|
14
12
|
return {
|
|
15
13
|
type: SignatureSetType.aggregate,
|
|
16
14
|
pubkeys,
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {BeaconConfig} from "@lodestar/config";
|
|
2
1
|
import {DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF} from "@lodestar/params";
|
|
3
2
|
import {
|
|
4
3
|
CachedBeaconStateAllForks,
|
|
@@ -10,11 +9,11 @@ import {
|
|
|
10
9
|
import {altair, ssz} from "@lodestar/types";
|
|
11
10
|
|
|
12
11
|
export function getSyncCommitteeSelectionProofSignatureSet(
|
|
13
|
-
config: BeaconConfig,
|
|
14
12
|
index2pubkey: Index2PubkeyCache,
|
|
15
13
|
state: CachedBeaconStateAllForks,
|
|
16
14
|
contributionAndProof: altair.ContributionAndProof
|
|
17
15
|
): ISignatureSet {
|
|
16
|
+
const {config} = state;
|
|
18
17
|
const slot = contributionAndProof.contribution.slot;
|
|
19
18
|
const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF, slot);
|
|
20
19
|
const signingData: altair.SyncAggregatorSelectionData = {
|
|
@@ -89,7 +89,7 @@ async function validateSyncCommitteeSigOnly(
|
|
|
89
89
|
syncCommittee: altair.SyncCommitteeMessage,
|
|
90
90
|
prioritizeBls = false
|
|
91
91
|
): Promise<void> {
|
|
92
|
-
const signatureSet = getSyncCommitteeSignatureSet(chain.
|
|
92
|
+
const signatureSet = getSyncCommitteeSignatureSet(chain.index2pubkey, headState, syncCommittee);
|
|
93
93
|
if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
|
|
94
94
|
throw new SyncCommitteeError(GossipAction.REJECT, {
|
|
95
95
|
code: SyncCommitteeErrorCode.INVALID_SIGNATURE,
|
|
@@ -78,19 +78,14 @@ export async function validateSyncCommitteeGossipContributionAndProof(
|
|
|
78
78
|
const signatureSets = [
|
|
79
79
|
// [REJECT] The contribution_and_proof.selection_proof is a valid signature of the SyncAggregatorSelectionData
|
|
80
80
|
// derived from the contribution by the validator with index contribution_and_proof.aggregator_index.
|
|
81
|
-
getSyncCommitteeSelectionProofSignatureSet(
|
|
81
|
+
getSyncCommitteeSelectionProofSignatureSet(index2pubkey, headState, contributionAndProof),
|
|
82
82
|
|
|
83
83
|
// [REJECT] The aggregator signature, signed_contribution_and_proof.signature, is valid.
|
|
84
|
-
getContributionAndProofSignatureSet(
|
|
84
|
+
getContributionAndProofSignatureSet(index2pubkey, headState, signedContributionAndProof),
|
|
85
85
|
|
|
86
86
|
// [REJECT] The aggregate signature is valid for the message beacon_block_root and aggregate pubkey derived from
|
|
87
87
|
// the participation info in aggregation_bits for the subcommittee specified by the contribution.subcommittee_index.
|
|
88
|
-
getSyncCommitteeContributionSignatureSet(
|
|
89
|
-
chain.config,
|
|
90
|
-
headState as CachedBeaconStateAltair,
|
|
91
|
-
contribution,
|
|
92
|
-
participantPubkeys
|
|
93
|
-
),
|
|
88
|
+
getSyncCommitteeContributionSignatureSet(headState as CachedBeaconStateAltair, contribution, participantPubkeys),
|
|
94
89
|
];
|
|
95
90
|
|
|
96
91
|
if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true}))) {
|
|
@@ -59,7 +59,7 @@ async function validateVoluntaryExit(
|
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
const signatureSet = getVoluntaryExitSignatureSet(chain.
|
|
62
|
+
const signatureSet = getVoluntaryExitSignatureSet(chain.index2pubkey, state, voluntaryExit);
|
|
63
63
|
if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
|
|
64
64
|
throw new VoluntaryExitError(GossipAction.REJECT, {
|
|
65
65
|
code: VoluntaryExitErrorCode.INVALID_SIGNATURE,
|
|
@@ -750,13 +750,9 @@ export class BackfillSync extends (EventEmitter as {new (): BackfillSyncEmitter}
|
|
|
750
750
|
|
|
751
751
|
// GENESIS_SLOT doesn't has valid signature
|
|
752
752
|
if (anchorBlock.message.slot === GENESIS_SLOT) return;
|
|
753
|
-
await verifyBlockProposerSignature(
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
this.chain.bls,
|
|
757
|
-
this.chain.getHeadState(),
|
|
758
|
-
[anchorBlock]
|
|
759
|
-
);
|
|
753
|
+
await verifyBlockProposerSignature(this.chain.index2pubkey, this.chain.bls, this.chain.getHeadState(), [
|
|
754
|
+
anchorBlock,
|
|
755
|
+
]);
|
|
760
756
|
|
|
761
757
|
// We can write to the disk if this is ahead of prevFinalizedCheckpointBlock otherwise
|
|
762
758
|
// we will need to go make checks on the top of sync loop before writing as it might
|
|
@@ -822,7 +818,6 @@ export class BackfillSync extends (EventEmitter as {new (): BackfillSyncEmitter}
|
|
|
822
818
|
// If any of the block's proposer signature fail, we can't trust this peer at all
|
|
823
819
|
if (verifiedBlocks.length > 0) {
|
|
824
820
|
await verifyBlockProposerSignature(
|
|
825
|
-
this.chain.config,
|
|
826
821
|
this.chain.index2pubkey,
|
|
827
822
|
this.chain.bls,
|
|
828
823
|
this.chain.getHeadState(),
|
|
@@ -46,7 +46,6 @@ export function verifyBlockSequence(
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
export async function verifyBlockProposerSignature(
|
|
49
|
-
config: BeaconConfig,
|
|
50
49
|
index2pubkey: Index2PubkeyCache,
|
|
51
50
|
bls: IBlsVerifier,
|
|
52
51
|
state: CachedBeaconStateAllForks,
|
|
@@ -55,8 +54,7 @@ export async function verifyBlockProposerSignature(
|
|
|
55
54
|
if (blocks.length === 1 && blocks[0].message.slot === GENESIS_SLOT) return;
|
|
56
55
|
const signatures = blocks.reduce((sigs: ISignatureSet[], block) => {
|
|
57
56
|
// genesis block doesn't have valid signature
|
|
58
|
-
if (block.message.slot !== GENESIS_SLOT)
|
|
59
|
-
sigs.push(getBlockProposerSignatureSet(config, index2pubkey, state, block));
|
|
57
|
+
if (block.message.slot !== GENESIS_SLOT) sigs.push(getBlockProposerSignatureSet(index2pubkey, state, block));
|
|
60
58
|
return sigs;
|
|
61
59
|
}, []);
|
|
62
60
|
|