@lodestar/state-transition 1.41.0-dev.0b3690a9ad → 1.41.0-dev.0df187678b
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/block/externalData.d.ts +2 -1
- package/lib/block/externalData.d.ts.map +1 -1
- package/lib/block/externalData.js +2 -0
- package/lib/block/externalData.js.map +1 -1
- package/lib/block/isValidIndexedAttestation.d.ts +3 -3
- package/lib/block/isValidIndexedAttestation.d.ts.map +1 -1
- package/lib/block/isValidIndexedAttestation.js +4 -4
- package/lib/block/isValidIndexedAttestation.js.map +1 -1
- package/lib/block/isValidIndexedPayloadAttestation.js +1 -1
- package/lib/block/isValidIndexedPayloadAttestation.js.map +1 -1
- package/lib/block/processAttestationPhase0.js +1 -1
- package/lib/block/processAttestationPhase0.js.map +1 -1
- package/lib/block/processAttestationsAltair.js +1 -1
- package/lib/block/processAttestationsAltair.js.map +1 -1
- package/lib/block/processAttesterSlashing.d.ts +2 -2
- package/lib/block/processAttesterSlashing.d.ts.map +1 -1
- package/lib/block/processAttesterSlashing.js +3 -3
- package/lib/block/processAttesterSlashing.js.map +1 -1
- package/lib/block/processExecutionPayloadEnvelope.js +5 -1
- package/lib/block/processExecutionPayloadEnvelope.js.map +1 -1
- package/lib/block/processProposerSlashing.d.ts +2 -2
- package/lib/block/processProposerSlashing.d.ts.map +1 -1
- package/lib/block/processProposerSlashing.js +3 -3
- package/lib/block/processProposerSlashing.js.map +1 -1
- package/lib/block/processRandao.js +1 -1
- package/lib/block/processRandao.js.map +1 -1
- package/lib/block/processSyncCommittee.js +1 -1
- package/lib/block/processSyncCommittee.js.map +1 -1
- package/lib/block/processVoluntaryExit.js +1 -1
- package/lib/block/processVoluntaryExit.js.map +1 -1
- package/lib/block/processWithdrawalRequest.js +2 -2
- package/lib/block/processWithdrawalRequest.js.map +1 -1
- package/lib/cache/epochCache.d.ts +8 -15
- package/lib/cache/epochCache.d.ts.map +1 -1
- package/lib/cache/epochCache.js +34 -33
- package/lib/cache/epochCache.js.map +1 -1
- package/lib/cache/pubkeyCache.d.ts +21 -6
- package/lib/cache/pubkeyCache.d.ts.map +1 -1
- package/lib/cache/pubkeyCache.js +39 -14
- package/lib/cache/pubkeyCache.js.map +1 -1
- package/lib/cache/stateCache.d.ts +1 -1
- package/lib/cache/stateCache.d.ts.map +1 -1
- package/lib/cache/stateCache.js +3 -7
- package/lib/cache/stateCache.js.map +1 -1
- package/lib/cache/syncCommitteeCache.d.ts +3 -2
- package/lib/cache/syncCommitteeCache.d.ts.map +1 -1
- package/lib/cache/syncCommitteeCache.js +4 -4
- package/lib/cache/syncCommitteeCache.js.map +1 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/lightClient/proofs.d.ts +10 -0
- package/lib/lightClient/proofs.d.ts.map +1 -0
- package/lib/lightClient/proofs.js +63 -0
- package/lib/lightClient/proofs.js.map +1 -0
- package/lib/lightClient/types.d.ts +34 -0
- package/lib/lightClient/types.d.ts.map +1 -0
- package/lib/lightClient/types.js +2 -0
- package/lib/lightClient/types.js.map +1 -0
- package/lib/rewards/attestationsRewards.d.ts +2 -2
- package/lib/rewards/attestationsRewards.d.ts.map +1 -1
- package/lib/rewards/attestationsRewards.js +4 -4
- package/lib/rewards/attestationsRewards.js.map +1 -1
- package/lib/rewards/syncCommitteeRewards.d.ts +2 -2
- package/lib/rewards/syncCommitteeRewards.d.ts.map +1 -1
- package/lib/rewards/syncCommitteeRewards.js +5 -2
- package/lib/rewards/syncCommitteeRewards.js.map +1 -1
- package/lib/signatureSets/proposer.d.ts +2 -2
- package/lib/signatureSets/proposer.d.ts.map +1 -1
- package/lib/signatureSets/proposer.js +2 -2
- package/lib/signatureSets/proposer.js.map +1 -1
- package/lib/signatureSets/randao.d.ts +2 -2
- package/lib/signatureSets/randao.d.ts.map +1 -1
- package/lib/signatureSets/randao.js +2 -2
- package/lib/signatureSets/randao.js.map +1 -1
- package/lib/signatureSets/voluntaryExits.d.ts +2 -2
- package/lib/signatureSets/voluntaryExits.d.ts.map +1 -1
- package/lib/signatureSets/voluntaryExits.js +2 -2
- package/lib/signatureSets/voluntaryExits.js.map +1 -1
- package/lib/stateTransition.js +1 -1
- package/lib/stateTransition.js.map +1 -1
- package/lib/stateView/beaconStateView.d.ts +144 -0
- package/lib/stateView/beaconStateView.d.ts.map +1 -0
- package/lib/stateView/beaconStateView.js +496 -0
- package/lib/stateView/beaconStateView.js.map +1 -0
- package/lib/stateView/index.d.ts +3 -0
- package/lib/stateView/index.d.ts.map +1 -0
- package/lib/stateView/index.js +3 -0
- package/lib/stateView/index.js.map +1 -0
- package/lib/stateView/interface.d.ts +118 -0
- package/lib/stateView/interface.d.ts.map +1 -0
- package/lib/stateView/interface.js +2 -0
- package/lib/stateView/interface.js.map +1 -0
- package/lib/util/signatureSets.d.ts +7 -7
- package/lib/util/signatureSets.d.ts.map +1 -1
- package/lib/util/signatureSets.js +18 -12
- package/lib/util/signatureSets.js.map +1 -1
- package/lib/util/weakSubjectivity.js +1 -1
- package/lib/util/weakSubjectivity.js.map +1 -1
- package/package.json +7 -7
- package/src/block/externalData.ts +2 -0
- package/src/block/isValidIndexedAttestation.ts +5 -5
- package/src/block/isValidIndexedPayloadAttestation.ts +1 -1
- package/src/block/processAttestationPhase0.ts +1 -1
- package/src/block/processAttestationsAltair.ts +1 -1
- package/src/block/processAttesterSlashing.ts +4 -4
- package/src/block/processExecutionPayloadEnvelope.ts +5 -1
- package/src/block/processProposerSlashing.ts +4 -4
- package/src/block/processRandao.ts +1 -1
- package/src/block/processSyncCommittee.ts +1 -1
- package/src/block/processVoluntaryExit.ts +1 -1
- package/src/block/processWithdrawalRequest.ts +2 -2
- package/src/cache/epochCache.ts +44 -36
- package/src/cache/pubkeyCache.ts +62 -21
- package/src/cache/stateCache.ts +4 -8
- package/src/cache/syncCommitteeCache.ts +4 -5
- package/src/index.ts +3 -1
- package/src/lightClient/proofs.ts +83 -0
- package/src/lightClient/types.ts +33 -0
- package/src/rewards/attestationsRewards.ts +5 -5
- package/src/rewards/syncCommitteeRewards.ts +6 -5
- package/src/signatureSets/proposer.ts +3 -3
- package/src/signatureSets/randao.ts +3 -7
- package/src/signatureSets/voluntaryExits.ts +3 -3
- package/src/stateTransition.ts +1 -1
- package/src/stateView/beaconStateView.ts +744 -0
- package/src/stateView/index.ts +2 -0
- package/src/stateView/interface.ts +196 -0
- package/src/util/signatureSets.ts +23 -17
- package/src/util/weakSubjectivity.ts +1 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { CompactMultiProof } from "@chainsafe/persistent-merkle-tree";
|
|
2
|
+
import { ByteViews } from "@chainsafe/ssz";
|
|
3
|
+
import { BeaconBlock, BlindedBeaconBlock, BuilderIndex, Bytes32, Epoch, ExecutionPayloadBid, ExecutionPayloadHeader, Root, RootHex, SignedBeaconBlock, SignedBlindedBeaconBlock, Slot, ValidatorIndex, altair, capella, electra, fulu, gloas, phase0, rewards } from "@lodestar/types";
|
|
4
|
+
import { Checkpoint, Fork } from "@lodestar/types/phase0";
|
|
5
|
+
import { VoluntaryExitValidity } from "../block/processVoluntaryExit.js";
|
|
6
|
+
import { EffectiveBalanceIncrements } from "../cache/effectiveBalanceIncrements.js";
|
|
7
|
+
import { EpochTransitionCacheOpts } from "../cache/epochTransitionCache.js";
|
|
8
|
+
import { RewardCache } from "../cache/rewardCache.js";
|
|
9
|
+
import { SyncCommitteeCache } from "../cache/syncCommitteeCache.js";
|
|
10
|
+
import { SyncCommitteeWitness } from "../lightClient/types.js";
|
|
11
|
+
import { StateTransitionModules, StateTransitionOpts } from "../stateTransition.js";
|
|
12
|
+
import { EpochShuffling } from "../util/epochShuffling.js";
|
|
13
|
+
/**
|
|
14
|
+
* A read-only view of the BeaconState.
|
|
15
|
+
*/
|
|
16
|
+
export interface IBeaconStateView {
|
|
17
|
+
slot: Slot;
|
|
18
|
+
fork: Fork;
|
|
19
|
+
epoch: Epoch;
|
|
20
|
+
genesisTime: number;
|
|
21
|
+
genesisValidatorsRoot: Root;
|
|
22
|
+
eth1Data: phase0.Eth1Data;
|
|
23
|
+
latestBlockHeader: phase0.BeaconBlockHeader;
|
|
24
|
+
previousJustifiedCheckpoint: Checkpoint;
|
|
25
|
+
currentJustifiedCheckpoint: Checkpoint;
|
|
26
|
+
finalizedCheckpoint: Checkpoint;
|
|
27
|
+
getBlockRootAtSlot(slot: Slot): Root;
|
|
28
|
+
getBlockRootAtEpoch(epoch: Epoch): Root;
|
|
29
|
+
getStateRootAtSlot(slot: Slot): Root;
|
|
30
|
+
getRandaoMix(epoch: Epoch): Bytes32;
|
|
31
|
+
previousEpochParticipation: number[];
|
|
32
|
+
currentEpochParticipation: number[];
|
|
33
|
+
latestExecutionPayloadHeader: ExecutionPayloadHeader;
|
|
34
|
+
historicalSummaries: capella.HistoricalSummaries;
|
|
35
|
+
pendingDeposits: electra.PendingDeposits;
|
|
36
|
+
pendingDepositsCount: number;
|
|
37
|
+
pendingPartialWithdrawals: electra.PendingPartialWithdrawals;
|
|
38
|
+
pendingPartialWithdrawalsCount: number;
|
|
39
|
+
pendingConsolidations: electra.PendingConsolidations;
|
|
40
|
+
pendingConsolidationsCount: number;
|
|
41
|
+
proposerLookahead: fulu.ProposerLookahead;
|
|
42
|
+
executionPayloadAvailability: boolean[];
|
|
43
|
+
latestExecutionPayloadBid: ExecutionPayloadBid;
|
|
44
|
+
getBuilder(index: BuilderIndex): gloas.Builder;
|
|
45
|
+
canBuilderCoverBid(builderIndex: BuilderIndex, bidAmount: number): boolean;
|
|
46
|
+
validatorPTCCommitteeIndex(validatorIndex: ValidatorIndex, slot: Slot): number;
|
|
47
|
+
getShufflingAtEpoch(epoch: Epoch): EpochShuffling;
|
|
48
|
+
previousDecisionRoot: RootHex;
|
|
49
|
+
currentDecisionRoot: RootHex;
|
|
50
|
+
nextDecisionRoot: RootHex;
|
|
51
|
+
getShufflingDecisionRoot(epoch: Epoch): RootHex;
|
|
52
|
+
getPreviousShuffling(): EpochShuffling;
|
|
53
|
+
getCurrentShuffling(): EpochShuffling;
|
|
54
|
+
getNextShuffling(): EpochShuffling;
|
|
55
|
+
previousProposers: ValidatorIndex[] | null;
|
|
56
|
+
currentProposers: ValidatorIndex[];
|
|
57
|
+
nextProposers: ValidatorIndex[];
|
|
58
|
+
getBeaconProposer(slot: Slot): ValidatorIndex;
|
|
59
|
+
computeAnchorCheckpoint(): {
|
|
60
|
+
checkpoint: phase0.Checkpoint;
|
|
61
|
+
blockHeader: phase0.BeaconBlockHeader;
|
|
62
|
+
};
|
|
63
|
+
currentSyncCommittee: altair.SyncCommittee;
|
|
64
|
+
nextSyncCommittee: altair.SyncCommittee;
|
|
65
|
+
currentSyncCommitteeIndexed: SyncCommitteeCache;
|
|
66
|
+
syncProposerReward: number;
|
|
67
|
+
getIndexedSyncCommitteeAtEpoch(epoch: Epoch): SyncCommitteeCache;
|
|
68
|
+
effectiveBalanceIncrements: EffectiveBalanceIncrements;
|
|
69
|
+
getEffectiveBalanceIncrementsZeroInactive(): EffectiveBalanceIncrements;
|
|
70
|
+
getBalance(index: number): number;
|
|
71
|
+
getValidator(index: ValidatorIndex): phase0.Validator;
|
|
72
|
+
getValidatorsByStatus(statuses: Set<string>, currentEpoch: Epoch): phase0.Validator[];
|
|
73
|
+
validatorCount: number;
|
|
74
|
+
activeValidatorCount: number;
|
|
75
|
+
getAllValidators(): phase0.Validator[];
|
|
76
|
+
getAllBalances(): number[];
|
|
77
|
+
isExecutionStateType: boolean;
|
|
78
|
+
isMergeTransitionComplete: boolean;
|
|
79
|
+
isExecutionEnabled(block: BeaconBlock | BlindedBeaconBlock): boolean;
|
|
80
|
+
getExpectedWithdrawals(): {
|
|
81
|
+
expectedWithdrawals: capella.Withdrawal[];
|
|
82
|
+
processedBuilderWithdrawalsCount: number;
|
|
83
|
+
processedPartialWithdrawalsCount: number;
|
|
84
|
+
processedValidatorSweepCount: number;
|
|
85
|
+
};
|
|
86
|
+
proposerRewards: RewardCache;
|
|
87
|
+
computeBlockRewards(block: BeaconBlock, proposerRewards?: RewardCache): Promise<rewards.BlockRewards>;
|
|
88
|
+
computeAttestationsRewards(validatorIds?: (ValidatorIndex | string)[]): Promise<rewards.AttestationsRewards>;
|
|
89
|
+
computeSyncCommitteeRewards(block: BeaconBlock, validatorIds: (ValidatorIndex | string)[]): Promise<rewards.SyncCommitteeRewards>;
|
|
90
|
+
getLatestWeakSubjectivityCheckpointEpoch(): Epoch;
|
|
91
|
+
getVoluntaryExitValidity(signedVoluntaryExit: phase0.SignedVoluntaryExit, verifySignature: boolean): VoluntaryExitValidity;
|
|
92
|
+
isValidVoluntaryExit(signedVoluntaryExit: phase0.SignedVoluntaryExit, verifySignature: boolean): boolean;
|
|
93
|
+
getFinalizedRootProof(): Uint8Array[];
|
|
94
|
+
getSyncCommitteesWitness(): SyncCommitteeWitness;
|
|
95
|
+
getSingleProof(gindex: bigint): Uint8Array[];
|
|
96
|
+
createMultiProof(descriptor: Uint8Array): CompactMultiProof;
|
|
97
|
+
computeUnrealizedCheckpoints(): {
|
|
98
|
+
justifiedCheckpoint: phase0.Checkpoint;
|
|
99
|
+
finalizedCheckpoint: phase0.Checkpoint;
|
|
100
|
+
};
|
|
101
|
+
clonedCount: number;
|
|
102
|
+
clonedCountWithTransferCache: number;
|
|
103
|
+
createdWithTransferCache: boolean;
|
|
104
|
+
isStateValidatorsNodesPopulated(): boolean;
|
|
105
|
+
loadOtherState(stateBytes: Uint8Array, seedValidatorsBytes?: Uint8Array): IBeaconStateView;
|
|
106
|
+
serialize(): Uint8Array;
|
|
107
|
+
serializedSize(): number;
|
|
108
|
+
serializeToBytes(output: ByteViews, offset: number): number;
|
|
109
|
+
serializeValidators(): Uint8Array;
|
|
110
|
+
serializedValidatorsSize(): number;
|
|
111
|
+
serializeValidatorsToBytes(output: ByteViews, offset: number): number;
|
|
112
|
+
hashTreeRoot(): Uint8Array;
|
|
113
|
+
stateTransition(signedBlock: SignedBeaconBlock | SignedBlindedBeaconBlock, options: StateTransitionOpts, modules: StateTransitionModules): IBeaconStateView;
|
|
114
|
+
processSlots(slot: Slot, epochTransitionCacheOpts?: EpochTransitionCacheOpts & {
|
|
115
|
+
dontTransferCache?: boolean;
|
|
116
|
+
}, modules?: StateTransitionModules): IBeaconStateView;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/stateView/interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/stateView/interface.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PublicKey } from "@chainsafe/blst";
|
|
2
2
|
import { Root } from "@lodestar/types";
|
|
3
|
-
import {
|
|
3
|
+
import { PubkeyCache } from "../cache/pubkeyCache.js";
|
|
4
4
|
export declare enum SignatureSetType {
|
|
5
5
|
single = "single",
|
|
6
6
|
aggregate = "aggregate",
|
|
@@ -43,13 +43,13 @@ export type AggregatedSignatureSet = {
|
|
|
43
43
|
export type ISignatureSet = SingleSignatureSet | IndexedSignatureSet | AggregatedSignatureSet;
|
|
44
44
|
/**
|
|
45
45
|
* Get the pubkey for a signature set, performing aggregation if necessary.
|
|
46
|
-
* Requires
|
|
46
|
+
* Requires pubkeyCache for indexed and aggregate sets.
|
|
47
47
|
*/
|
|
48
|
-
export declare function getSignatureSetPubkey(signatureSet: ISignatureSet,
|
|
49
|
-
export declare function verifySignatureSet(signatureSet: SingleSignatureSet,
|
|
50
|
-
export declare function verifySignatureSet(signatureSet: IndexedSignatureSet,
|
|
51
|
-
export declare function verifySignatureSet(signatureSet: AggregatedSignatureSet,
|
|
52
|
-
export declare function verifySignatureSet(signatureSet: ISignatureSet,
|
|
48
|
+
export declare function getSignatureSetPubkey(signatureSet: ISignatureSet, pubkeyCache: PubkeyCache): PublicKey;
|
|
49
|
+
export declare function verifySignatureSet(signatureSet: SingleSignatureSet, pubkeyCache?: PubkeyCache): boolean;
|
|
50
|
+
export declare function verifySignatureSet(signatureSet: IndexedSignatureSet, pubkeyCache: PubkeyCache): boolean;
|
|
51
|
+
export declare function verifySignatureSet(signatureSet: AggregatedSignatureSet, pubkeyCache: PubkeyCache): boolean;
|
|
52
|
+
export declare function verifySignatureSet(signatureSet: ISignatureSet, pubkeyCache: PubkeyCache): boolean;
|
|
53
53
|
export declare function createSingleSignatureSetFromComponents(pubkey: PublicKey, signingRoot: Root, signature: Uint8Array): SingleSignatureSet;
|
|
54
54
|
export declare function createIndexedSignatureSetFromComponents(index: number, signingRoot: Root, signature: Uint8Array): IndexedSignatureSet;
|
|
55
55
|
export declare function createAggregateSignatureSetFromComponents(indices: number[], signingRoot: Root, signature: Uint8Array): AggregatedSignatureSet;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signatureSets.d.ts","sourceRoot":"","sources":["../../src/util/signatureSets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAA8D,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"signatureSets.d.ts","sourceRoot":"","sources":["../../src/util/signatureSets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAA8D,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AAEpD,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB;;;OAGG;IACH,OAAO,YAAY;CACpB;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;IAC9B,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,sBAAsB,CAAC;AAE9F;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,GAAG,SAAS,CAmBtG;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,kBAAkB,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;AACzG,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC;AACzG,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,sBAAsB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC;AAC5G,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC;AAgCnG,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,IAAI,EACjB,SAAS,EAAE,UAAU,GACpB,kBAAkB,CAOpB;AAED,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,IAAI,EACjB,SAAS,EAAE,UAAU,GACpB,mBAAmB,CAOrB;AAED,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,EAAE,IAAI,EACjB,SAAS,EAAE,UAAU,GACpB,sBAAsB,CAOxB"}
|
|
@@ -11,39 +11,45 @@ export var SignatureSetType;
|
|
|
11
11
|
})(SignatureSetType || (SignatureSetType = {}));
|
|
12
12
|
/**
|
|
13
13
|
* Get the pubkey for a signature set, performing aggregation if necessary.
|
|
14
|
-
* Requires
|
|
14
|
+
* Requires pubkeyCache for indexed and aggregate sets.
|
|
15
15
|
*/
|
|
16
|
-
export function getSignatureSetPubkey(signatureSet,
|
|
16
|
+
export function getSignatureSetPubkey(signatureSet, pubkeyCache) {
|
|
17
17
|
switch (signatureSet.type) {
|
|
18
18
|
case SignatureSetType.single:
|
|
19
19
|
return signatureSet.pubkey;
|
|
20
|
-
case SignatureSetType.indexed:
|
|
21
|
-
return
|
|
20
|
+
case SignatureSetType.indexed: {
|
|
21
|
+
return pubkeyCache.getOrThrow(signatureSet.index);
|
|
22
|
+
}
|
|
22
23
|
case SignatureSetType.aggregate: {
|
|
23
|
-
const pubkeys = signatureSet.indices.map((i) =>
|
|
24
|
+
const pubkeys = signatureSet.indices.map((i) => {
|
|
25
|
+
return pubkeyCache.getOrThrow(i);
|
|
26
|
+
});
|
|
24
27
|
return aggregatePublicKeys(pubkeys);
|
|
25
28
|
}
|
|
26
29
|
default:
|
|
27
30
|
throw Error("Unknown signature set type");
|
|
28
31
|
}
|
|
29
32
|
}
|
|
30
|
-
export function verifySignatureSet(signatureSet,
|
|
33
|
+
export function verifySignatureSet(signatureSet, pubkeyCache) {
|
|
31
34
|
// All signatures are not trusted and must be group checked (p2.subgroup_check)
|
|
32
35
|
const signature = Signature.fromBytes(signatureSet.signature, true);
|
|
33
36
|
switch (signatureSet.type) {
|
|
34
37
|
case SignatureSetType.single:
|
|
35
38
|
return verify(signatureSet.signingRoot, signatureSet.pubkey, signature);
|
|
36
39
|
case SignatureSetType.indexed: {
|
|
37
|
-
if (!
|
|
38
|
-
throw Error("
|
|
40
|
+
if (!pubkeyCache) {
|
|
41
|
+
throw Error("pubkeyCache required for indexed signature set");
|
|
39
42
|
}
|
|
40
|
-
|
|
43
|
+
const pubkey = pubkeyCache.getOrThrow(signatureSet.index);
|
|
44
|
+
return verify(signatureSet.signingRoot, pubkey, signature);
|
|
41
45
|
}
|
|
42
46
|
case SignatureSetType.aggregate: {
|
|
43
|
-
if (!
|
|
44
|
-
throw Error("
|
|
47
|
+
if (!pubkeyCache) {
|
|
48
|
+
throw Error("pubkeyCache required for aggregate signature set");
|
|
45
49
|
}
|
|
46
|
-
const pubkeys = signatureSet.indices.map((i) =>
|
|
50
|
+
const pubkeys = signatureSet.indices.map((i) => {
|
|
51
|
+
return pubkeyCache.getOrThrow(i);
|
|
52
|
+
});
|
|
47
53
|
return fastAggregateVerify(signatureSet.signingRoot, pubkeys, signature);
|
|
48
54
|
}
|
|
49
55
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signatureSets.js","sourceRoot":"","sources":["../../src/util/signatureSets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAIvG,MAAM,CAAN,IAAY,gBAQX;AARD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,2CAAuB,CAAA;IACvB;;;OAGG;IACH,uCAAmB,CAAA;AACrB,CAAC,EARW,gBAAgB,KAAhB,gBAAgB,QAQ3B;AAqCD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAA2B,EAAE,
|
|
1
|
+
{"version":3,"file":"signatureSets.js","sourceRoot":"","sources":["../../src/util/signatureSets.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ export function getLatestWeakSubjectivityCheckpointEpoch(config, state) {
|
|
|
24
24
|
*/
|
|
25
25
|
export function computeWeakSubjectivityPeriodCachedState(config, state) {
|
|
26
26
|
const activeValidatorCount = state.epochCtx.currentShuffling.activeIndices.length;
|
|
27
|
-
const fork =
|
|
27
|
+
const fork = config.getForkName(state.slot);
|
|
28
28
|
return isForkPostElectra(fork)
|
|
29
29
|
? computeWeakSubjectivityPeriodFromConstituentsElectra(state.epochCtx.totalActiveBalanceIncrements, getBalanceChurnLimitFromCache(state.epochCtx), config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY)
|
|
30
30
|
: computeWeakSubjectivityPeriodFromConstituentsPhase0(activeValidatorCount, state.epochCtx.totalActiveBalanceIncrements, getChurnLimit(config, activeValidatorCount), config.MIN_VALIDATOR_WITHDRAWABILITY_DELAY);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weakSubjectivity.js","sourceRoot":"","sources":["../../src/util/weakSubjectivity.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAc,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,SAAS,EAAC,MAAM,2BAA2B,CAAC;AAEpD,OAAO,EAAC,iCAAiC,EAAE,kBAAkB,EAAE,eAAe,EAAC,MAAM,YAAY,CAAC;AAClG,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,6BAA6B,EAC7B,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,IAAI,CAAC,CAAC;AACnC,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB;;;GAGG;AACH,MAAM,UAAU,wCAAwC,CACtD,MAAuB,EACvB,KAAgC;IAEhC,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,wCAAwC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACxF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wCAAwC,CACtD,MAAuB,EACvB,KAAgC;IAEhC,MAAM,oBAAoB,GAAG,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,MAAM,CAAC;IAClF,MAAM,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"weakSubjectivity.js","sourceRoot":"","sources":["../../src/util/weakSubjectivity.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.41.0-dev.
|
|
14
|
+
"version": "1.41.0-dev.0df187678b",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -62,14 +62,14 @@
|
|
|
62
62
|
"@chainsafe/pubkey-index-map": "^3.0.0",
|
|
63
63
|
"@chainsafe/ssz": "^1.2.2",
|
|
64
64
|
"@chainsafe/swap-or-not-shuffle": "^1.2.1",
|
|
65
|
-
"@lodestar/config": "^1.41.0-dev.
|
|
66
|
-
"@lodestar/params": "^1.41.0-dev.
|
|
67
|
-
"@lodestar/types": "^1.41.0-dev.
|
|
68
|
-
"@lodestar/utils": "^1.41.0-dev.
|
|
65
|
+
"@lodestar/config": "^1.41.0-dev.0df187678b",
|
|
66
|
+
"@lodestar/params": "^1.41.0-dev.0df187678b",
|
|
67
|
+
"@lodestar/types": "^1.41.0-dev.0df187678b",
|
|
68
|
+
"@lodestar/utils": "^1.41.0-dev.0df187678b",
|
|
69
69
|
"@vekexasia/bigint-buffer2": "^1.1.0"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
|
-
"@lodestar/api": "^1.41.0-dev.
|
|
72
|
+
"@lodestar/api": "^1.41.0-dev.0df187678b"
|
|
73
73
|
},
|
|
74
74
|
"keywords": [
|
|
75
75
|
"ethereum",
|
|
@@ -77,5 +77,5 @@
|
|
|
77
77
|
"beacon",
|
|
78
78
|
"blockchain"
|
|
79
79
|
],
|
|
80
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "322d242cb2c57638744d875afb2ea30d96394f02"
|
|
81
81
|
}
|
|
@@ -18,6 +18,8 @@ export enum DataAvailabilityStatus {
|
|
|
18
18
|
/* validator activities can't be performed on out of range data */
|
|
19
19
|
OutOfRange = "OutOfRange",
|
|
20
20
|
Available = "Available",
|
|
21
|
+
/* Gloas: beacon blocks have no DA requirement, execution payload is separate */
|
|
22
|
+
NotRequired = "NotRequired",
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
export interface BlockExternalData {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {BeaconConfig} from "@lodestar/config";
|
|
2
2
|
import {ForkSeq, MAX_COMMITTEES_PER_SLOT, MAX_VALIDATORS_PER_COMMITTEE} from "@lodestar/params";
|
|
3
3
|
import {IndexedAttestation, IndexedAttestationBigint, Slot} from "@lodestar/types";
|
|
4
|
-
import {
|
|
4
|
+
import {PubkeyCache} from "../cache/pubkeyCache.js";
|
|
5
5
|
import {getIndexedAttestationBigintSignatureSet, getIndexedAttestationSignatureSet} from "../signatureSets/index.js";
|
|
6
6
|
import {verifySignatureSet} from "../util/index.js";
|
|
7
7
|
|
|
@@ -10,7 +10,7 @@ import {verifySignatureSet} from "../util/index.js";
|
|
|
10
10
|
*/
|
|
11
11
|
export function isValidIndexedAttestation(
|
|
12
12
|
config: BeaconConfig,
|
|
13
|
-
|
|
13
|
+
pubkeyCache: PubkeyCache,
|
|
14
14
|
stateSlot: Slot,
|
|
15
15
|
validatorsLen: number,
|
|
16
16
|
indexedAttestation: IndexedAttestation,
|
|
@@ -21,14 +21,14 @@ export function isValidIndexedAttestation(
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
if (verifySignature) {
|
|
24
|
-
return verifySignatureSet(getIndexedAttestationSignatureSet(config, stateSlot, indexedAttestation),
|
|
24
|
+
return verifySignatureSet(getIndexedAttestationSignatureSet(config, stateSlot, indexedAttestation), pubkeyCache);
|
|
25
25
|
}
|
|
26
26
|
return true;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export function isValidIndexedAttestationBigint(
|
|
30
30
|
config: BeaconConfig,
|
|
31
|
-
|
|
31
|
+
pubkeyCache: PubkeyCache,
|
|
32
32
|
stateSlot: Slot,
|
|
33
33
|
validatorsLen: number,
|
|
34
34
|
indexedAttestation: IndexedAttestationBigint,
|
|
@@ -41,7 +41,7 @@ export function isValidIndexedAttestationBigint(
|
|
|
41
41
|
if (verifySignature) {
|
|
42
42
|
return verifySignatureSet(
|
|
43
43
|
getIndexedAttestationBigintSignatureSet(config, stateSlot, indexedAttestation),
|
|
44
|
-
|
|
44
|
+
pubkeyCache
|
|
45
45
|
);
|
|
46
46
|
}
|
|
47
47
|
return true;
|
|
@@ -18,7 +18,7 @@ export function isValidIndexedPayloadAttestation(
|
|
|
18
18
|
if (verifySignature) {
|
|
19
19
|
return verifySignatureSet(
|
|
20
20
|
getIndexedPayloadAttestationSignatureSet(state.config, indexedPayloadAttestation),
|
|
21
|
-
state.epochCtx.
|
|
21
|
+
state.epochCtx.pubkeyCache
|
|
22
22
|
);
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -64,7 +64,7 @@ export function processAttestationsAltair(
|
|
|
64
64
|
// we can verify only that and nothing else.
|
|
65
65
|
if (verifySignature) {
|
|
66
66
|
const sigSet = getAttestationWithIndicesSignatureSet(state.config, state.slot, attestation, attestingIndices);
|
|
67
|
-
if (!verifySignatureSet(sigSet, state.epochCtx.
|
|
67
|
+
if (!verifySignatureSet(sigSet, state.epochCtx.pubkeyCache)) {
|
|
68
68
|
throw new Error("Attestation signature is not valid");
|
|
69
69
|
}
|
|
70
70
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {BeaconConfig} from "@lodestar/config";
|
|
2
2
|
import {ForkSeq} from "@lodestar/params";
|
|
3
3
|
import {AttesterSlashing, Slot} from "@lodestar/types";
|
|
4
|
-
import {
|
|
4
|
+
import {PubkeyCache} from "../cache/pubkeyCache.js";
|
|
5
5
|
import {CachedBeaconStateAllForks} from "../types.js";
|
|
6
6
|
import {getAttesterSlashableIndices, isSlashableAttestationData, isSlashableValidator} from "../util/index.js";
|
|
7
7
|
import {isValidIndexedAttestationBigint} from "./isValidIndexedAttestation.js";
|
|
@@ -22,7 +22,7 @@ export function processAttesterSlashing(
|
|
|
22
22
|
const {epochCtx} = state;
|
|
23
23
|
assertValidAttesterSlashing(
|
|
24
24
|
state.config,
|
|
25
|
-
epochCtx.
|
|
25
|
+
epochCtx.pubkeyCache,
|
|
26
26
|
state.slot,
|
|
27
27
|
state.validators.length,
|
|
28
28
|
attesterSlashing,
|
|
@@ -48,7 +48,7 @@ export function processAttesterSlashing(
|
|
|
48
48
|
|
|
49
49
|
export function assertValidAttesterSlashing(
|
|
50
50
|
config: BeaconConfig,
|
|
51
|
-
|
|
51
|
+
pubkeyCache: PubkeyCache,
|
|
52
52
|
stateSlot: Slot,
|
|
53
53
|
validatorsLen: number,
|
|
54
54
|
attesterSlashing: AttesterSlashing,
|
|
@@ -66,7 +66,7 @@ export function assertValidAttesterSlashing(
|
|
|
66
66
|
// can be any arbitrary value. Must use bigint variants to hash correctly to all possible values
|
|
67
67
|
for (const [i, attestation] of [attestation1, attestation2].entries()) {
|
|
68
68
|
if (
|
|
69
|
-
!isValidIndexedAttestationBigint(config,
|
|
69
|
+
!isValidIndexedAttestationBigint(config, pubkeyCache, stateSlot, validatorsLen, attestation, verifySignatures)
|
|
70
70
|
) {
|
|
71
71
|
throw new Error(`AttesterSlashing attestation${i} is invalid`);
|
|
72
72
|
}
|
|
@@ -156,7 +156,11 @@ function verifyExecutionPayloadEnvelopeSignature(
|
|
|
156
156
|
|
|
157
157
|
if (builderIndex === BUILDER_INDEX_SELF_BUILD) {
|
|
158
158
|
const validatorIndex = state.latestBlockHeader.proposerIndex;
|
|
159
|
-
|
|
159
|
+
const proposerPubkey = state.epochCtx.pubkeyCache.get(validatorIndex);
|
|
160
|
+
if (!proposerPubkey) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
publicKey = proposerPubkey;
|
|
160
164
|
} else {
|
|
161
165
|
publicKey = PublicKey.fromBytes(state.builders.getReadonly(builderIndex).pubkey);
|
|
162
166
|
}
|
|
@@ -2,7 +2,7 @@ import {BeaconConfig} from "@lodestar/config";
|
|
|
2
2
|
import {ForkSeq, SLOTS_PER_EPOCH} from "@lodestar/params";
|
|
3
3
|
import {Slot, phase0, ssz} from "@lodestar/types";
|
|
4
4
|
import {Validator} from "@lodestar/types/phase0";
|
|
5
|
-
import {
|
|
5
|
+
import {PubkeyCache} from "../cache/pubkeyCache.js";
|
|
6
6
|
import {getProposerSlashingSignatureSets} from "../signatureSets/index.js";
|
|
7
7
|
import {CachedBeaconStateAllForks, CachedBeaconStateGloas} from "../types.js";
|
|
8
8
|
import {computeEpochAtSlot, isSlashableValidator} from "../util/index.js";
|
|
@@ -24,7 +24,7 @@ export function processProposerSlashing(
|
|
|
24
24
|
const proposer = state.validators.getReadonly(proposerSlashing.signedHeader1.message.proposerIndex);
|
|
25
25
|
assertValidProposerSlashing(
|
|
26
26
|
state.config,
|
|
27
|
-
state.epochCtx.
|
|
27
|
+
state.epochCtx.pubkeyCache,
|
|
28
28
|
state.slot,
|
|
29
29
|
proposerSlashing,
|
|
30
30
|
proposer,
|
|
@@ -57,7 +57,7 @@ export function processProposerSlashing(
|
|
|
57
57
|
|
|
58
58
|
export function assertValidProposerSlashing(
|
|
59
59
|
config: BeaconConfig,
|
|
60
|
-
|
|
60
|
+
pubkeyCache: PubkeyCache,
|
|
61
61
|
stateSlot: Slot,
|
|
62
62
|
proposerSlashing: phase0.ProposerSlashing,
|
|
63
63
|
proposer: Validator,
|
|
@@ -94,7 +94,7 @@ export function assertValidProposerSlashing(
|
|
|
94
94
|
if (verifySignatures) {
|
|
95
95
|
const signatureSets = getProposerSlashingSignatureSets(config, stateSlot, proposerSlashing);
|
|
96
96
|
for (let i = 0; i < signatureSets.length; i++) {
|
|
97
|
-
if (!verifySignatureSet(signatureSets[i],
|
|
97
|
+
if (!verifySignatureSet(signatureSets[i], pubkeyCache)) {
|
|
98
98
|
throw new Error(`ProposerSlashing header${i + 1} signature invalid`);
|
|
99
99
|
}
|
|
100
100
|
}
|
|
@@ -17,7 +17,7 @@ export function processRandao(state: CachedBeaconStateAllForks, block: BeaconBlo
|
|
|
17
17
|
const randaoReveal = block.body.randaoReveal;
|
|
18
18
|
|
|
19
19
|
// verify RANDAO reveal
|
|
20
|
-
if (verifySignature && !verifyRandaoSignature(config, epochCtx.
|
|
20
|
+
if (verifySignature && !verifyRandaoSignature(config, epochCtx.pubkeyCache, block)) {
|
|
21
21
|
throw new Error("RANDAO reveal is an invalid signature");
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -32,7 +32,7 @@ export function processSyncAggregate(
|
|
|
32
32
|
participantIndices
|
|
33
33
|
);
|
|
34
34
|
// When there's no participation we consider the signature valid and just ignore it
|
|
35
|
-
if (signatureSet !== null && !verifySignatureSet(signatureSet, state.epochCtx.
|
|
35
|
+
if (signatureSet !== null && !verifySignatureSet(signatureSet, state.epochCtx.pubkeyCache)) {
|
|
36
36
|
throw Error("Sync committee signature invalid");
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -131,7 +131,7 @@ export function getVoluntaryExitValidity(
|
|
|
131
131
|
|
|
132
132
|
if (
|
|
133
133
|
verifySignature &&
|
|
134
|
-
!verifyVoluntaryExitSignature(state.config, epochCtx.
|
|
134
|
+
!verifyVoluntaryExitSignature(state.config, epochCtx.pubkeyCache, state.slot, signedVoluntaryExit)
|
|
135
135
|
) {
|
|
136
136
|
return VoluntaryExitValidity.invalidSignature;
|
|
137
137
|
}
|
|
@@ -21,7 +21,7 @@ export function processWithdrawalRequest(
|
|
|
21
21
|
const amount = Number(withdrawalRequest.amount);
|
|
22
22
|
const {pendingPartialWithdrawals, validators, epochCtx} = state;
|
|
23
23
|
// no need to use unfinalized pubkey cache from 6110 as validator won't be active anyway
|
|
24
|
-
const {
|
|
24
|
+
const {pubkeyCache, config} = epochCtx;
|
|
25
25
|
const isFullExitRequest = amount === FULL_EXIT_REQUEST_AMOUNT;
|
|
26
26
|
|
|
27
27
|
// If partial withdrawal queue is full, only full exits are processed
|
|
@@ -31,7 +31,7 @@ export function processWithdrawalRequest(
|
|
|
31
31
|
|
|
32
32
|
// bail out if validator is not in beacon state
|
|
33
33
|
// note that we don't need to check for 6110 unfinalized vals as they won't be eligible for withdraw/exit anyway
|
|
34
|
-
const validatorIndex =
|
|
34
|
+
const validatorIndex = pubkeyCache.getIndex(withdrawalRequest.validatorPubkey);
|
|
35
35
|
if (validatorIndex === null) {
|
|
36
36
|
return;
|
|
37
37
|
}
|