@lodestar/state-transition 1.41.0 → 1.42.0-dev.2fd27cd2f6
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/isValidIndexedAttestation.d.ts.map +1 -1
- package/lib/block/isValidIndexedAttestation.js +2 -3
- package/lib/block/isValidIndexedAttestation.js.map +1 -1
- package/lib/block/processAttestationsAltair.d.ts +2 -1
- package/lib/block/processAttestationsAltair.d.ts.map +1 -1
- package/lib/block/processAttestationsAltair.js +5 -3
- package/lib/block/processAttestationsAltair.js.map +1 -1
- package/lib/block/processExecutionPayloadEnvelope.d.ts +3 -1
- package/lib/block/processExecutionPayloadEnvelope.d.ts.map +1 -1
- package/lib/block/processExecutionPayloadEnvelope.js +11 -28
- package/lib/block/processExecutionPayloadEnvelope.js.map +1 -1
- package/lib/block/processVoluntaryExit.d.ts.map +1 -1
- package/lib/block/processVoluntaryExit.js +49 -47
- package/lib/block/processVoluntaryExit.js.map +1 -1
- package/lib/signatureSets/executionPayloadEnvelope.d.ts +5 -1
- package/lib/signatureSets/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/signatureSets/executionPayloadEnvelope.js +10 -1
- package/lib/signatureSets/executionPayloadEnvelope.js.map +1 -1
- package/lib/signatureSets/index.d.ts +2 -1
- package/lib/signatureSets/index.d.ts.map +1 -1
- package/lib/signatureSets/index.js +2 -2
- package/lib/signatureSets/index.js.map +1 -1
- package/lib/signatureSets/voluntaryExits.d.ts +7 -3
- package/lib/signatureSets/voluntaryExits.d.ts.map +1 -1
- package/lib/signatureSets/voluntaryExits.js +30 -9
- package/lib/signatureSets/voluntaryExits.js.map +1 -1
- package/lib/slot/upgradeStateToAltair.d.ts.map +1 -1
- package/lib/slot/upgradeStateToAltair.js +2 -1
- package/lib/slot/upgradeStateToAltair.js.map +1 -1
- package/lib/stateView/beaconStateView.d.ts +11 -7
- package/lib/stateView/beaconStateView.d.ts.map +1 -1
- package/lib/stateView/beaconStateView.js +13 -10
- package/lib/stateView/beaconStateView.js.map +1 -1
- package/lib/stateView/interface.d.ts +14 -9
- package/lib/stateView/interface.d.ts.map +1 -1
- package/lib/util/execution.js +1 -1
- package/lib/util/execution.js.map +1 -1
- package/lib/util/rootCache.d.ts +2 -2
- package/lib/util/rootCache.d.ts.map +1 -1
- package/lib/util/rootCache.js +2 -3
- package/lib/util/rootCache.js.map +1 -1
- package/lib/util/shuffling.d.ts +2 -1
- package/lib/util/shuffling.d.ts.map +1 -1
- package/lib/util/shuffling.js +2 -2
- package/lib/util/shuffling.js.map +1 -1
- package/package.json +7 -7
- package/src/block/isValidIndexedAttestation.ts +2 -3
- package/src/block/processAttestationsAltair.ts +7 -4
- package/src/block/processExecutionPayloadEnvelope.ts +18 -35
- package/src/block/processVoluntaryExit.ts +77 -54
- package/src/signatureSets/executionPayloadEnvelope.ts +26 -2
- package/src/signatureSets/index.ts +3 -1
- package/src/signatureSets/voluntaryExits.ts +51 -9
- package/src/slot/upgradeStateToAltair.ts +2 -1
- package/src/stateView/beaconStateView.ts +31 -13
- package/src/stateView/interface.ts +15 -6
- package/src/util/execution.ts +1 -1
- package/src/util/rootCache.ts +4 -5
- package/src/util/shuffling.ts +5 -4
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import {CompactMultiProof} from "@chainsafe/persistent-merkle-tree";
|
|
2
|
-
import {ByteViews} from "@chainsafe/ssz";
|
|
2
|
+
import {BitArray, ByteViews} from "@chainsafe/ssz";
|
|
3
3
|
import {
|
|
4
4
|
BeaconBlock,
|
|
5
|
+
BeaconState,
|
|
5
6
|
BlindedBeaconBlock,
|
|
6
7
|
BuilderIndex,
|
|
7
8
|
Bytes32,
|
|
@@ -23,6 +24,7 @@ import {
|
|
|
23
24
|
rewards,
|
|
24
25
|
} from "@lodestar/types";
|
|
25
26
|
import {Checkpoint, Fork} from "@lodestar/types/phase0";
|
|
27
|
+
import {ProcessExecutionPayloadEnvelopeOpts} from "../block/processExecutionPayloadEnvelope.js";
|
|
26
28
|
import {VoluntaryExitValidity} from "../block/processVoluntaryExit.js";
|
|
27
29
|
import {EffectiveBalanceIncrements} from "../cache/effectiveBalanceIncrements.js";
|
|
28
30
|
import {EpochTransitionCacheOpts} from "../cache/epochTransitionCache.js";
|
|
@@ -92,11 +94,11 @@ export interface IBeaconStateView {
|
|
|
92
94
|
proposerLookahead: fulu.ProposerLookahead;
|
|
93
95
|
|
|
94
96
|
// gloas
|
|
95
|
-
executionPayloadAvailability:
|
|
97
|
+
executionPayloadAvailability: BitArray;
|
|
96
98
|
latestExecutionPayloadBid: ExecutionPayloadBid;
|
|
97
99
|
getBuilder(index: BuilderIndex): gloas.Builder;
|
|
98
100
|
canBuilderCoverBid(builderIndex: BuilderIndex, bidAmount: number): boolean;
|
|
99
|
-
|
|
101
|
+
getIndexInPayloadTimelinessCommittee(validatorIndex: ValidatorIndex, slot: Slot): number;
|
|
100
102
|
|
|
101
103
|
// Shuffling and committees
|
|
102
104
|
getShufflingAtEpoch(epoch: Epoch): EpochShuffling;
|
|
@@ -109,12 +111,11 @@ export interface IBeaconStateView {
|
|
|
109
111
|
getCurrentShuffling(): EpochShuffling;
|
|
110
112
|
getNextShuffling(): EpochShuffling;
|
|
111
113
|
|
|
112
|
-
//
|
|
114
|
+
// Proposer shuffling
|
|
113
115
|
previousProposers: ValidatorIndex[] | null;
|
|
114
116
|
currentProposers: ValidatorIndex[];
|
|
115
117
|
nextProposers: ValidatorIndex[];
|
|
116
118
|
getBeaconProposer(slot: Slot): ValidatorIndex;
|
|
117
|
-
computeAnchorCheckpoint(): {checkpoint: phase0.Checkpoint; blockHeader: phase0.BeaconBlockHeader};
|
|
118
119
|
|
|
119
120
|
// Sync committees
|
|
120
121
|
currentSyncCommittee: altair.SyncCommittee;
|
|
@@ -122,6 +123,8 @@ export interface IBeaconStateView {
|
|
|
122
123
|
currentSyncCommitteeIndexed: SyncCommitteeCache;
|
|
123
124
|
syncProposerReward: number;
|
|
124
125
|
getIndexedSyncCommitteeAtEpoch(epoch: Epoch): SyncCommitteeCache;
|
|
126
|
+
/** Get indexed sync committee with slot+1 offset for duty lookups */
|
|
127
|
+
getIndexedSyncCommittee(slot: Slot): SyncCommitteeCache;
|
|
125
128
|
|
|
126
129
|
// Validators and balances
|
|
127
130
|
effectiveBalanceIncrements: EffectiveBalanceIncrements;
|
|
@@ -148,6 +151,7 @@ export interface IBeaconStateView {
|
|
|
148
151
|
expectedWithdrawals: capella.Withdrawal[];
|
|
149
152
|
processedBuilderWithdrawalsCount: number;
|
|
150
153
|
processedPartialWithdrawalsCount: number;
|
|
154
|
+
processedBuildersSweepCount: number;
|
|
151
155
|
processedValidatorSweepCount: number;
|
|
152
156
|
};
|
|
153
157
|
|
|
@@ -179,6 +183,7 @@ export interface IBeaconStateView {
|
|
|
179
183
|
justifiedCheckpoint: phase0.Checkpoint;
|
|
180
184
|
finalizedCheckpoint: phase0.Checkpoint;
|
|
181
185
|
};
|
|
186
|
+
computeAnchorCheckpoint(): {checkpoint: phase0.Checkpoint; blockHeader: phase0.BeaconBlockHeader};
|
|
182
187
|
|
|
183
188
|
// this is for backward compatible
|
|
184
189
|
clonedCount: number;
|
|
@@ -189,6 +194,7 @@ export interface IBeaconStateView {
|
|
|
189
194
|
|
|
190
195
|
// Serialization
|
|
191
196
|
loadOtherState(stateBytes: Uint8Array, seedValidatorsBytes?: Uint8Array): IBeaconStateView;
|
|
197
|
+
toValue(): BeaconState;
|
|
192
198
|
serialize(): Uint8Array;
|
|
193
199
|
serializedSize(): number;
|
|
194
200
|
serializeToBytes(output: ByteViews, offset: number): number;
|
|
@@ -209,5 +215,8 @@ export interface IBeaconStateView {
|
|
|
209
215
|
epochTransitionCacheOpts?: EpochTransitionCacheOpts & {dontTransferCache?: boolean},
|
|
210
216
|
modules?: StateTransitionModules
|
|
211
217
|
): IBeaconStateView;
|
|
212
|
-
processExecutionPayloadEnvelope(
|
|
218
|
+
processExecutionPayloadEnvelope(
|
|
219
|
+
signedEnvelope: gloas.SignedExecutionPayloadEnvelope,
|
|
220
|
+
opts?: ProcessExecutionPayloadEnvelopeOpts
|
|
221
|
+
): IBeaconStateView;
|
|
213
222
|
}
|
package/src/util/execution.ts
CHANGED
|
@@ -143,7 +143,7 @@ export function executionPayloadToPayloadHeader(fork: ForkSeq, payload: Executio
|
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
if (fork >= ForkSeq.deneb) {
|
|
146
|
-
// https://github.com/ethereum/consensus-specs/blob/
|
|
146
|
+
// https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/eip4844/beacon-chain.md#process_execution_payload
|
|
147
147
|
(bellatrixPayloadFields as deneb.ExecutionPayloadHeader).blobGasUsed = (
|
|
148
148
|
payload as deneb.ExecutionPayloadHeader | deneb.ExecutionPayload
|
|
149
149
|
).blobGasUsed;
|
package/src/util/rootCache.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {Epoch, Root, Slot, phase0} from "@lodestar/types";
|
|
2
|
-
import {
|
|
3
|
-
import {getBlockRoot, getBlockRootAtSlot} from "./blockRoot.js";
|
|
2
|
+
import {IBeaconStateView} from "../stateView/interface.js";
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Cache to prevent accessing the state tree to fetch block roots repeteadly.
|
|
@@ -12,7 +11,7 @@ export class RootCache {
|
|
|
12
11
|
private readonly blockRootEpochCache = new Map<Epoch, Root>();
|
|
13
12
|
private readonly blockRootSlotCache = new Map<Slot, Root>();
|
|
14
13
|
|
|
15
|
-
constructor(private readonly state:
|
|
14
|
+
constructor(private readonly state: IBeaconStateView) {
|
|
16
15
|
this.currentJustifiedCheckpoint = state.currentJustifiedCheckpoint;
|
|
17
16
|
this.previousJustifiedCheckpoint = state.previousJustifiedCheckpoint;
|
|
18
17
|
}
|
|
@@ -20,7 +19,7 @@ export class RootCache {
|
|
|
20
19
|
getBlockRoot(epoch: Epoch): Root {
|
|
21
20
|
let root = this.blockRootEpochCache.get(epoch);
|
|
22
21
|
if (!root) {
|
|
23
|
-
root =
|
|
22
|
+
root = this.state.getBlockRootAtEpoch(epoch);
|
|
24
23
|
this.blockRootEpochCache.set(epoch, root);
|
|
25
24
|
}
|
|
26
25
|
return root;
|
|
@@ -29,7 +28,7 @@ export class RootCache {
|
|
|
29
28
|
getBlockRootAtSlot(slot: Slot): Root {
|
|
30
29
|
let root = this.blockRootSlotCache.get(slot);
|
|
31
30
|
if (!root) {
|
|
32
|
-
root =
|
|
31
|
+
root = this.state.getBlockRootAtSlot(slot);
|
|
33
32
|
this.blockRootSlotCache.set(slot, root);
|
|
34
33
|
}
|
|
35
34
|
return root;
|
package/src/util/shuffling.ts
CHANGED
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
} from "@lodestar/types";
|
|
12
12
|
import {LodestarError} from "@lodestar/utils";
|
|
13
13
|
import {CachedBeaconStateAllForks} from "../cache/stateCache.js";
|
|
14
|
+
import {IBeaconStateView} from "../stateView/interface.js";
|
|
14
15
|
import {getBlockRootAtSlot} from "./blockRoot.js";
|
|
15
16
|
import {computeStartSlotAtEpoch} from "./epoch.js";
|
|
16
17
|
import {EpochShuffling} from "./epochShuffling.js";
|
|
@@ -22,21 +23,21 @@ import {EpochShuffling} from "./epochShuffling.js";
|
|
|
22
23
|
* Returns `null` on the one-off scenario where the genesis block decides its own shuffling.
|
|
23
24
|
* It should be set to the latest block applied to this `state` or the genesis block root.
|
|
24
25
|
*/
|
|
25
|
-
export function proposerShufflingDecisionRoot(fork: ForkName, state:
|
|
26
|
+
export function proposerShufflingDecisionRoot(fork: ForkName, state: IBeaconStateView): Root | null {
|
|
26
27
|
const decisionSlot = proposerShufflingDecisionSlot(fork, state);
|
|
27
28
|
if (state.slot === decisionSlot) {
|
|
28
29
|
return null;
|
|
29
30
|
}
|
|
30
|
-
return getBlockRootAtSlot(
|
|
31
|
+
return state.getBlockRootAtSlot(decisionSlot);
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
/**
|
|
34
35
|
* Returns the slot at which the proposer shuffling was decided. The block root at this slot
|
|
35
36
|
* can be used to key the proposer shuffling for the current epoch.
|
|
36
37
|
*/
|
|
37
|
-
function proposerShufflingDecisionSlot(fork: ForkName, state:
|
|
38
|
+
function proposerShufflingDecisionSlot(fork: ForkName, state: IBeaconStateView): Slot {
|
|
38
39
|
// After fulu, the decision slot is in previous epoch due to deterministic proposer lookahead
|
|
39
|
-
const epoch = isForkPostFulu(fork) ? state.
|
|
40
|
+
const epoch = isForkPostFulu(fork) ? state.epoch - 1 : state.epoch;
|
|
40
41
|
const startSlot = computeStartSlotAtEpoch(epoch);
|
|
41
42
|
return Math.max(startSlot - 1, 0);
|
|
42
43
|
}
|