@lodestar/state-transition 1.45.0 → 1.46.0-dev.18a1510f34
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/index.d.ts.map +1 -1
- package/lib/block/index.js +3 -2
- package/lib/block/index.js.map +1 -1
- package/lib/block/processAttestations.d.ts +2 -2
- package/lib/block/processAttestations.d.ts.map +1 -1
- package/lib/block/processAttestations.js +2 -2
- package/lib/block/processAttestations.js.map +1 -1
- package/lib/block/processAttestationsAltair.d.ts +6 -3
- package/lib/block/processAttestationsAltair.d.ts.map +1 -1
- package/lib/block/processAttestationsAltair.js +13 -8
- package/lib/block/processAttestationsAltair.js.map +1 -1
- package/lib/block/processBuilderDepositRequest.d.ts.map +1 -1
- package/lib/block/processBuilderDepositRequest.js +13 -7
- package/lib/block/processBuilderDepositRequest.js.map +1 -1
- package/lib/block/processExecutionPayloadBid.d.ts +2 -2
- package/lib/block/processExecutionPayloadBid.d.ts.map +1 -1
- package/lib/block/processExecutionPayloadBid.js +2 -0
- package/lib/block/processExecutionPayloadBid.js.map +1 -1
- package/lib/block/processOperations.d.ts +2 -2
- package/lib/block/processOperations.d.ts.map +1 -1
- package/lib/block/processOperations.js +19 -3
- package/lib/block/processOperations.js.map +1 -1
- package/lib/block/processParentExecutionPayload.d.ts.map +1 -1
- package/lib/block/processParentExecutionPayload.js +15 -1
- package/lib/block/processParentExecutionPayload.js.map +1 -1
- package/lib/block/processWithdrawalRequest.d.ts.map +1 -1
- package/lib/block/processWithdrawalRequest.js +2 -2
- package/lib/block/processWithdrawalRequest.js.map +1 -1
- package/lib/block/processWithdrawals.js +1 -1
- package/lib/block/processWithdrawals.js.map +1 -1
- package/lib/cache/epochCache.d.ts.map +1 -1
- package/lib/cache/epochCache.js +18 -19
- package/lib/cache/epochCache.js.map +1 -1
- package/lib/cache/stateCache.d.ts.map +1 -1
- package/lib/cache/stateCache.js +2 -4
- package/lib/cache/stateCache.js.map +1 -1
- package/lib/epoch/processParticipationFlagUpdates.d.ts +2 -2
- package/lib/epoch/processParticipationFlagUpdates.d.ts.map +1 -1
- package/lib/epoch/processParticipationFlagUpdates.js +13 -0
- package/lib/epoch/processParticipationFlagUpdates.js.map +1 -1
- package/lib/epoch/processRewardsAndPenalties.d.ts.map +1 -1
- package/lib/epoch/processRewardsAndPenalties.js +1 -2
- package/lib/epoch/processRewardsAndPenalties.js.map +1 -1
- package/lib/lightClient/proofs.d.ts.map +1 -1
- package/lib/lightClient/proofs.js +28 -2
- package/lib/lightClient/proofs.js.map +1 -1
- package/lib/lightClient/spec/index.d.ts.map +1 -1
- package/lib/lightClient/spec/index.js +7 -4
- package/lib/lightClient/spec/index.js.map +1 -1
- package/lib/lightClient/spec/processLightClientUpdate.d.ts.map +1 -1
- package/lib/lightClient/spec/processLightClientUpdate.js +8 -2
- package/lib/lightClient/spec/processLightClientUpdate.js.map +1 -1
- package/lib/lightClient/spec/utils.d.ts +7 -2
- package/lib/lightClient/spec/utils.d.ts.map +1 -1
- package/lib/lightClient/spec/utils.js +130 -19
- package/lib/lightClient/spec/utils.js.map +1 -1
- package/lib/lightClient/spec/validateLightClientBootstrap.d.ts.map +1 -1
- package/lib/lightClient/spec/validateLightClientBootstrap.js +2 -7
- package/lib/lightClient/spec/validateLightClientBootstrap.js.map +1 -1
- package/lib/lightClient/spec/validateLightClientUpdate.d.ts.map +1 -1
- package/lib/lightClient/spec/validateLightClientUpdate.js +6 -5
- package/lib/lightClient/spec/validateLightClientUpdate.js.map +1 -1
- package/lib/lightClient/types.d.ts +3 -1
- package/lib/lightClient/types.d.ts.map +1 -1
- package/lib/metrics.js +2 -4
- package/lib/metrics.js.map +1 -1
- package/lib/rewards/blockRewards.d.ts.map +1 -1
- package/lib/rewards/blockRewards.js +7 -4
- package/lib/rewards/blockRewards.js.map +1 -1
- package/lib/slot/upgradeStateToAltair.js +1 -1
- package/lib/slot/upgradeStateToAltair.js.map +1 -1
- package/lib/slot/upgradeStateToGloas.d.ts.map +1 -1
- package/lib/slot/upgradeStateToGloas.js +49 -10
- package/lib/slot/upgradeStateToGloas.js.map +1 -1
- package/lib/util/clock.d.ts +55 -0
- package/lib/util/clock.d.ts.map +1 -0
- package/lib/util/clock.js +142 -0
- package/lib/util/clock.js.map +1 -0
- package/lib/util/execution.d.ts.map +1 -1
- package/lib/util/execution.js +7 -2
- package/lib/util/execution.js.map +1 -1
- package/lib/util/gloas.d.ts +5 -2
- package/lib/util/gloas.d.ts.map +1 -1
- package/lib/util/gloas.js +15 -15
- package/lib/util/gloas.js.map +1 -1
- package/lib/util/index.d.ts +2 -0
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +2 -0
- package/lib/util/index.js.map +1 -1
- package/lib/util/ssz.d.ts +9 -0
- package/lib/util/ssz.d.ts.map +1 -0
- package/lib/util/ssz.js +39 -0
- package/lib/util/ssz.js.map +1 -0
- package/package.json +14 -14
- package/src/block/index.ts +4 -3
- package/src/block/processAttestations.ts +10 -2
- package/src/block/processAttestationsAltair.ts +19 -10
- package/src/block/processBuilderDepositRequest.ts +21 -8
- package/src/block/processExecutionPayloadBid.ts +5 -2
- package/src/block/processOperations.ts +31 -3
- package/src/block/processParentExecutionPayload.ts +26 -1
- package/src/block/processWithdrawalRequest.ts +6 -2
- package/src/block/processWithdrawals.ts +1 -1
- package/src/cache/epochCache.ts +19 -22
- package/src/cache/stateCache.ts +2 -4
- package/src/epoch/processParticipationFlagUpdates.ts +20 -2
- package/src/epoch/processRewardsAndPenalties.ts +1 -2
- package/src/lightClient/proofs.ts +36 -1
- package/src/lightClient/spec/index.ts +8 -4
- package/src/lightClient/spec/processLightClientUpdate.ts +13 -1
- package/src/lightClient/spec/utils.ts +200 -30
- package/src/lightClient/spec/validateLightClientBootstrap.ts +3 -10
- package/src/lightClient/spec/validateLightClientUpdate.ts +11 -21
- package/src/lightClient/types.ts +3 -1
- package/src/metrics.ts +2 -4
- package/src/rewards/blockRewards.ts +20 -5
- package/src/slot/upgradeStateToAltair.ts +2 -1
- package/src/slot/upgradeStateToGloas.ts +85 -10
- package/src/util/clock.ts +183 -0
- package/src/util/execution.ts +9 -4
- package/src/util/gloas.ts +18 -19
- package/src/util/index.ts +2 -0
- package/src/util/ssz.ts +42 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getNodesAtDepth } from "@chainsafe/persistent-merkle-tree";
|
|
1
2
|
import { PAYLOAD_BUILDER_VERSION, SLOTS_PER_HISTORICAL_ROOT } from "@lodestar/params";
|
|
2
3
|
import { ssz } from "@lodestar/types";
|
|
3
4
|
import { toPubkeyHex } from "@lodestar/utils";
|
|
@@ -6,6 +7,7 @@ import { getCachedBeaconState } from "../cache/stateCache.js";
|
|
|
6
7
|
import { addBuilderToRegistry, initializePtcWindow, isBuilderWithdrawalCredential } from "../util/gloas.js";
|
|
7
8
|
import { isValidatorKnown } from "../util/index.js";
|
|
8
9
|
import { PendingDepositsLookup } from "../util/pendingDepositsLookup.js";
|
|
10
|
+
import { progressiveListRootNode } from "../util/ssz.js";
|
|
9
11
|
/**
|
|
10
12
|
* Upgrade a state from Fulu to Gloas.
|
|
11
13
|
*/
|
|
@@ -29,21 +31,21 @@ export function upgradeStateToGloas(stateFulu) {
|
|
|
29
31
|
stateGloasView.eth1Data = stateGloasCloned.eth1Data;
|
|
30
32
|
stateGloasView.eth1DataVotes = stateGloasCloned.eth1DataVotes;
|
|
31
33
|
stateGloasView.eth1DepositIndex = stateGloasCloned.eth1DepositIndex;
|
|
32
|
-
stateGloasView.validators = stateGloasCloned.validators;
|
|
33
|
-
stateGloasView.balances = stateGloasCloned.balances;
|
|
34
|
+
stateGloasView.validators = migrateCompositeListToGloas(stateGloasCloned.validators, ssz.gloas.Validators);
|
|
35
|
+
stateGloasView.balances = migrateBasicListToGloas(stateGloasCloned.balances, ssz.gloas.Balances);
|
|
34
36
|
stateGloasView.randaoMixes = stateGloasCloned.randaoMixes;
|
|
35
37
|
stateGloasView.slashings = stateGloasCloned.slashings;
|
|
36
|
-
stateGloasView.previousEpochParticipation = stateGloasCloned.previousEpochParticipation;
|
|
37
|
-
stateGloasView.currentEpochParticipation = stateGloasCloned.currentEpochParticipation;
|
|
38
|
+
stateGloasView.previousEpochParticipation = migrateBasicListToGloas(stateGloasCloned.previousEpochParticipation, ssz.gloas.EpochParticipation);
|
|
39
|
+
stateGloasView.currentEpochParticipation = migrateBasicListToGloas(stateGloasCloned.currentEpochParticipation, ssz.gloas.EpochParticipation);
|
|
38
40
|
stateGloasView.justificationBits = stateGloasCloned.justificationBits;
|
|
39
41
|
stateGloasView.previousJustifiedCheckpoint = stateGloasCloned.previousJustifiedCheckpoint;
|
|
40
42
|
stateGloasView.currentJustifiedCheckpoint = stateGloasCloned.currentJustifiedCheckpoint;
|
|
41
43
|
stateGloasView.finalizedCheckpoint = stateGloasCloned.finalizedCheckpoint;
|
|
42
|
-
stateGloasView.inactivityScores = stateGloasCloned.inactivityScores;
|
|
44
|
+
stateGloasView.inactivityScores = migrateBasicListToGloas(stateGloasCloned.inactivityScores, ssz.gloas.InactivityScores);
|
|
43
45
|
stateGloasView.currentSyncCommittee = stateGloasCloned.currentSyncCommittee;
|
|
44
46
|
stateGloasView.nextSyncCommittee = stateGloasCloned.nextSyncCommittee;
|
|
45
47
|
stateGloasView.latestExecutionPayloadBid.blockHash = stateFulu.latestExecutionPayloadHeader.blockHash;
|
|
46
|
-
stateGloasView.latestExecutionPayloadBid.gasLimit = stateFulu.latestExecutionPayloadHeader.gasLimit;
|
|
48
|
+
stateGloasView.latestExecutionPayloadBid.gasLimit = BigInt(stateFulu.latestExecutionPayloadHeader.gasLimit);
|
|
47
49
|
stateGloasView.latestExecutionPayloadBid.executionRequestsRoot = ssz.gloas.ExecutionRequests.hashTreeRoot(ssz.gloas.ExecutionRequests.defaultValue());
|
|
48
50
|
stateGloasView.nextWithdrawalIndex = stateGloasCloned.nextWithdrawalIndex;
|
|
49
51
|
stateGloasView.nextWithdrawalValidatorIndex = stateGloasCloned.nextWithdrawalValidatorIndex;
|
|
@@ -54,9 +56,9 @@ export function upgradeStateToGloas(stateFulu) {
|
|
|
54
56
|
stateGloasView.earliestExitEpoch = stateGloasCloned.earliestExitEpoch;
|
|
55
57
|
stateGloasView.consolidationBalanceToConsume = stateGloasCloned.consolidationBalanceToConsume;
|
|
56
58
|
stateGloasView.earliestConsolidationEpoch = stateGloasCloned.earliestConsolidationEpoch;
|
|
57
|
-
stateGloasView.pendingDeposits = stateGloasCloned.pendingDeposits;
|
|
58
|
-
stateGloasView.pendingPartialWithdrawals = stateGloasCloned.pendingPartialWithdrawals;
|
|
59
|
-
stateGloasView.pendingConsolidations = stateGloasCloned.pendingConsolidations;
|
|
59
|
+
stateGloasView.pendingDeposits = migrateCompositeListToGloas(stateGloasCloned.pendingDeposits, ssz.gloas.PendingDeposits);
|
|
60
|
+
stateGloasView.pendingPartialWithdrawals = migrateCompositeListToGloas(stateGloasCloned.pendingPartialWithdrawals, ssz.gloas.PendingPartialWithdrawals);
|
|
61
|
+
stateGloasView.pendingConsolidations = migrateCompositeListToGloas(stateGloasCloned.pendingConsolidations, ssz.gloas.PendingConsolidations);
|
|
60
62
|
stateGloasView.proposerLookahead = stateGloasCloned.proposerLookahead;
|
|
61
63
|
stateGloasView.ptcWindow = ssz.gloas.PtcWindow.toViewDU(initializePtcWindow(stateFulu));
|
|
62
64
|
for (let i = 0; i < SLOTS_PER_HISTORICAL_ROOT; i++) {
|
|
@@ -72,6 +74,43 @@ export function upgradeStateToGloas(stateFulu) {
|
|
|
72
74
|
stateGloas["clearCache"]();
|
|
73
75
|
return stateGloas;
|
|
74
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Migrate a composite list from fulu to its gloas progressive-list equivalent by reusing the fulu
|
|
79
|
+
* list's element nodes.
|
|
80
|
+
*
|
|
81
|
+
* Works whenever the element type is identical across the fork (e.g. validators use ValidatorNodeStruct,
|
|
82
|
+
* the pending* queues use the same electra element types). Each element's cached subtree root is then
|
|
83
|
+
* valid under gloas, so only the progressive list superstructure is rebuilt and a subsequent
|
|
84
|
+
* hashTreeRoot() skips re-hashing every element — the dominant cost for large lists like validators.
|
|
85
|
+
* Much cheaper than `gloasType.toViewDU(fuluList.getAllReadonlyValues())`, which decodes every element
|
|
86
|
+
* to a value and forces a full re-hash.
|
|
87
|
+
*
|
|
88
|
+
* The chunk nodes of a composite list ARE the element root nodes, so they are extracted directly
|
|
89
|
+
* with getNodesAtDepth instead of allocating a temporary ViewDU wrapper per element (getAllReadonly).
|
|
90
|
+
* Requires the fulu view to be committed (done at the top of upgradeStateToGloas).
|
|
91
|
+
*/
|
|
92
|
+
function migrateCompositeListToGloas(fuluList, gloasType) {
|
|
93
|
+
const { length, type } = fuluList;
|
|
94
|
+
const elementNodes = getNodesAtDepth(fuluList.node.left, type.chunkDepth, 0, length);
|
|
95
|
+
return gloasType.getViewDU(progressiveListRootNode(elementNodes, length));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Migrate a basic list from fulu to its gloas progressive-list equivalent by reusing the fulu
|
|
99
|
+
* list's packed chunk leaf nodes.
|
|
100
|
+
*
|
|
101
|
+
* Packed leaf chunks are bit-identical between List[T, N] and ProgressiveList[T] (same 32-byte
|
|
102
|
+
* LE packing, zero-padded final chunk); only the superstructure above the leaves differs. Reusing
|
|
103
|
+
* the leaves avoids materializing the value array (getAll), re-serializing it, and allocating
|
|
104
|
+
* fresh LeafNodes — the gloas tree shares the leaf nodes with the fulu tree.
|
|
105
|
+
* Requires the fulu view to be committed (done at the top of upgradeStateToGloas).
|
|
106
|
+
*/
|
|
107
|
+
function migrateBasicListToGloas(fuluList, gloasType) {
|
|
108
|
+
const { length, type } = fuluList;
|
|
109
|
+
const chunkCount = Math.ceil(length / type.itemsPerChunk);
|
|
110
|
+
// List root = BranchNode(chunksNode, lengthNode) → chunks tree is the left child
|
|
111
|
+
const chunkLeafNodes = getNodesAtDepth(fuluList.node.left, type.chunkDepth, 0, chunkCount);
|
|
112
|
+
return gloasType.getViewDU(progressiveListRootNode(chunkLeafNodes, length));
|
|
113
|
+
}
|
|
75
114
|
/**
|
|
76
115
|
* Applies any pending deposits for builders to onboard builders during the fork transition
|
|
77
116
|
* Spec: https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.8/specs/gloas/fork.md#new-onboard_builders_from_pending_deposits
|
|
@@ -80,7 +119,7 @@ function onboardBuildersFromPendingDeposits(state) {
|
|
|
80
119
|
// Track pubkeys of new builders added when applying deposits. `state.builders` starts empty
|
|
81
120
|
// at the fork, so every builder pubkey here is one added in an earlier iteration.
|
|
82
121
|
const builderPubkeys = new Set();
|
|
83
|
-
const pendingDeposits = ssz.
|
|
122
|
+
const pendingDeposits = ssz.gloas.PendingDeposits.defaultViewDU();
|
|
84
123
|
const pendingDepositsLookup = PendingDepositsLookup.buildEmpty();
|
|
85
124
|
for (let i = 0; i < state.pendingDeposits.length; i++) {
|
|
86
125
|
const deposit = state.pendingDeposits.getReadonly(i);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgradeStateToGloas.js","sourceRoot":"","sources":["../../src/slot/upgradeStateToGloas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAE,yBAAyB,EAAC,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACpC,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,uBAAuB,EAAC,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAC,oBAAoB,EAAE,mBAAmB,EAAE,6BAA6B,EAAC,MAAM,kBAAkB,CAAC;AAC1G,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAC,qBAAqB,EAAC,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"upgradeStateToGloas.js","sourceRoot":"","sources":["../../src/slot/upgradeStateToGloas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
+
import { Epoch, Slot, TimeSeconds } from "@lodestar/types";
|
|
3
|
+
import { Logger } from "@lodestar/utils";
|
|
4
|
+
type RunEveryFn = (slot: Slot, signal: AbortSignal) => Promise<void>;
|
|
5
|
+
export type ClockOptions = {
|
|
6
|
+
skipSlots?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export interface IClock {
|
|
9
|
+
readonly genesisTime: number;
|
|
10
|
+
readonly secondsPerSlot: number;
|
|
11
|
+
readonly currentEpoch: number;
|
|
12
|
+
start(signal: AbortSignal): void;
|
|
13
|
+
runEverySlot(fn: (slot: Slot, signal: AbortSignal) => Promise<void>): void;
|
|
14
|
+
runEveryEpoch(fn: (epoch: Epoch, signal: AbortSignal) => Promise<void>): void;
|
|
15
|
+
msToSlot(slot: Slot): number;
|
|
16
|
+
msFromSlot(slot: Slot): number;
|
|
17
|
+
secFromSlot(slot: Slot): number;
|
|
18
|
+
getCurrentSlot(): Slot;
|
|
19
|
+
getCurrentEpoch(): Epoch;
|
|
20
|
+
}
|
|
21
|
+
export declare enum TimeItem {
|
|
22
|
+
Slot = 0,
|
|
23
|
+
Epoch = 1
|
|
24
|
+
}
|
|
25
|
+
export declare class Clock implements IClock {
|
|
26
|
+
private readonly opts;
|
|
27
|
+
readonly genesisTime: number;
|
|
28
|
+
readonly secondsPerSlot: number;
|
|
29
|
+
private readonly config;
|
|
30
|
+
private readonly logger;
|
|
31
|
+
private readonly fns;
|
|
32
|
+
constructor(config: ChainForkConfig, logger: Logger, opts: {
|
|
33
|
+
genesisTime: number;
|
|
34
|
+
} & ClockOptions);
|
|
35
|
+
get currentEpoch(): Epoch;
|
|
36
|
+
start(signal: AbortSignal): void;
|
|
37
|
+
getCurrentSlot(): Slot;
|
|
38
|
+
getCurrentEpoch(): Epoch;
|
|
39
|
+
runEverySlot(fn: RunEveryFn): void;
|
|
40
|
+
runEveryEpoch(fn: RunEveryFn): void;
|
|
41
|
+
/** Milliseconds from now to a specific slot */
|
|
42
|
+
msToSlot(slot: Slot): number;
|
|
43
|
+
/** Milliseconds elapsed from a specific slot to now */
|
|
44
|
+
msFromSlot(slot: Slot): number;
|
|
45
|
+
/** Seconds elapsed from a specific slot to now */
|
|
46
|
+
secFromSlot(slot: Slot): number;
|
|
47
|
+
private runAtMostEvery;
|
|
48
|
+
private timeUntilNext;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Same to the spec but we use Math.round instead of Math.floor.
|
|
52
|
+
*/
|
|
53
|
+
export declare function getCurrentSlotAround(config: ChainForkConfig, genesisTime: TimeSeconds): Slot;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=clock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/util/clock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAC,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAe,MAAM,EAAwB,MAAM,iBAAiB,CAAC;AAI5E,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErE,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3E,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9E,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAC/B,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAChC,cAAc,IAAI,IAAI,CAAC;IACvB,eAAe,IAAI,KAAK,CAAC;CAC1B;AAED,oBAAY,QAAQ;IAClB,IAAI,IAAA;IACJ,KAAK,IAAA;CACN;AAED,qBAAa,KAAM,YAAW,MAAM;IAUhC,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA8C;IAElE,YACE,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACG,IAAI,EAAE;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,GAAG,YAAY,EAM5D;IAED,IAAI,YAAY,IAAI,KAAK,CAExB;IAED,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAQ/B;IAED,cAAc,IAAI,IAAI,CAErB;IAED,eAAe,IAAI,KAAK,CAEvB;IAED,YAAY,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CAEjC;IAED,aAAa,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CAElC;IAED,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE3B;IAED,uDAAuD;IACvD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE7B;IAED,kDAAkD;IAClD,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE9B;YAQa,cAAc;IA2C5B,OAAO,CAAC,aAAa;CAgBtB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAI5F"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { GENESIS_SLOT, SLOTS_PER_EPOCH } from "@lodestar/params";
|
|
2
|
+
import { ErrorAborted, isErrorAborted, sleep } from "@lodestar/utils";
|
|
3
|
+
import { computeEpochAtSlot } from "./epoch.js";
|
|
4
|
+
import { computeTimeAtSlot, getCurrentSlot } from "./slot.js";
|
|
5
|
+
export { TimeItem };
|
|
6
|
+
var TimeItem;
|
|
7
|
+
(function (TimeItem) {
|
|
8
|
+
TimeItem[TimeItem["Slot"] = 0] = "Slot";
|
|
9
|
+
TimeItem[TimeItem["Epoch"] = 1] = "Epoch";
|
|
10
|
+
})(TimeItem || (TimeItem = {}));
|
|
11
|
+
export class Clock {
|
|
12
|
+
opts;
|
|
13
|
+
genesisTime;
|
|
14
|
+
secondsPerSlot;
|
|
15
|
+
config;
|
|
16
|
+
logger;
|
|
17
|
+
fns = [];
|
|
18
|
+
constructor(config, logger, opts) {
|
|
19
|
+
this.opts = opts;
|
|
20
|
+
this.genesisTime = opts.genesisTime;
|
|
21
|
+
this.secondsPerSlot = config.SLOT_DURATION_MS / 1000;
|
|
22
|
+
this.config = config;
|
|
23
|
+
this.logger = logger;
|
|
24
|
+
}
|
|
25
|
+
get currentEpoch() {
|
|
26
|
+
return computeEpochAtSlot(getCurrentSlot(this.config, this.genesisTime));
|
|
27
|
+
}
|
|
28
|
+
start(signal) {
|
|
29
|
+
for (const { timeItem, fn } of this.fns) {
|
|
30
|
+
this.runAtMostEvery(timeItem, signal, fn).catch((e) => {
|
|
31
|
+
if (!isErrorAborted(e)) {
|
|
32
|
+
this.logger.error("runAtMostEvery", {}, e);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
getCurrentSlot() {
|
|
38
|
+
return getCurrentSlot(this.config, this.genesisTime);
|
|
39
|
+
}
|
|
40
|
+
getCurrentEpoch() {
|
|
41
|
+
return computeEpochAtSlot(getCurrentSlot(this.config, this.genesisTime));
|
|
42
|
+
}
|
|
43
|
+
runEverySlot(fn) {
|
|
44
|
+
this.fns.push({ timeItem: TimeItem.Slot, fn });
|
|
45
|
+
}
|
|
46
|
+
runEveryEpoch(fn) {
|
|
47
|
+
this.fns.push({ timeItem: TimeItem.Epoch, fn });
|
|
48
|
+
}
|
|
49
|
+
/** Milliseconds from now to a specific slot */
|
|
50
|
+
msToSlot(slot) {
|
|
51
|
+
return computeTimeAtSlot(this.config, slot, this.genesisTime) * 1000 - Date.now();
|
|
52
|
+
}
|
|
53
|
+
/** Milliseconds elapsed from a specific slot to now */
|
|
54
|
+
msFromSlot(slot) {
|
|
55
|
+
return Date.now() - computeTimeAtSlot(this.config, slot, this.genesisTime) * 1000;
|
|
56
|
+
}
|
|
57
|
+
/** Seconds elapsed from a specific slot to now */
|
|
58
|
+
secFromSlot(slot) {
|
|
59
|
+
return Date.now() / 1000 - computeTimeAtSlot(this.config, slot, this.genesisTime);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* If a task happens to take more than one slot to run, we might skip a slot. This is unfortunate,
|
|
63
|
+
* however the alternative is to *always* process every slot, which has the chance of creating a
|
|
64
|
+
* theoretically unlimited backlog of tasks. It was a conscious decision to choose to drop tasks
|
|
65
|
+
* on an overloaded/latent system rather than overload it even more.
|
|
66
|
+
*/
|
|
67
|
+
async runAtMostEvery(timeItem, signal, fn) {
|
|
68
|
+
// Run immediately first
|
|
69
|
+
let slot = getCurrentSlot(this.config, this.genesisTime);
|
|
70
|
+
let slotOrEpoch = timeItem === TimeItem.Slot ? slot : computeEpochAtSlot(slot);
|
|
71
|
+
while (!signal.aborted) {
|
|
72
|
+
// Must catch fn() to ensure `sleep()` is awaited both for resolve and reject
|
|
73
|
+
const task = fn(slotOrEpoch, signal).catch((e) => {
|
|
74
|
+
if (!isErrorAborted(e))
|
|
75
|
+
this.logger.error("Error on runEvery fn", {}, e);
|
|
76
|
+
});
|
|
77
|
+
if (timeItem !== TimeItem.Slot || this.opts.skipSlots !== false) {
|
|
78
|
+
// await response to only continue with next task if current task finished within slot
|
|
79
|
+
await task;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
await sleep(this.timeUntilNext(timeItem), signal);
|
|
83
|
+
// calling getCurrentSlot here may not be correct when we're close to the next slot
|
|
84
|
+
// it's safe to call getCurrentSlotAround after we sleep
|
|
85
|
+
const nextSlot = getCurrentSlotAround(this.config, this.genesisTime);
|
|
86
|
+
if (timeItem === TimeItem.Slot) {
|
|
87
|
+
if (nextSlot > slot + 1) {
|
|
88
|
+
// It's not very likely that we skip more than one slot as HTTP timeout is set
|
|
89
|
+
// to SLOT_DURATION_MS so we will fail task before skipping another slot.
|
|
90
|
+
this.logger.warn("Skipped slot due to task taking more than one slot to run", {
|
|
91
|
+
skippedSlot: slot + 1,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
slotOrEpoch = nextSlot;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
slotOrEpoch = computeEpochAtSlot(nextSlot);
|
|
98
|
+
}
|
|
99
|
+
slot = nextSlot;
|
|
100
|
+
}
|
|
101
|
+
catch (e) {
|
|
102
|
+
if (e instanceof ErrorAborted) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
throw e;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
timeUntilNext(timeItem) {
|
|
110
|
+
const milliSecondsPerSlot = this.config.SLOT_DURATION_MS;
|
|
111
|
+
const msFromGenesis = Date.now() - this.genesisTime * 1000;
|
|
112
|
+
if (timeItem === TimeItem.Slot) {
|
|
113
|
+
if (msFromGenesis >= 0) {
|
|
114
|
+
return milliSecondsPerSlot - (msFromGenesis % milliSecondsPerSlot);
|
|
115
|
+
}
|
|
116
|
+
return Math.abs(msFromGenesis) % milliSecondsPerSlot;
|
|
117
|
+
}
|
|
118
|
+
const milliSecondsPerEpoch = SLOTS_PER_EPOCH * milliSecondsPerSlot;
|
|
119
|
+
if (msFromGenesis >= 0) {
|
|
120
|
+
return milliSecondsPerEpoch - (msFromGenesis % milliSecondsPerEpoch);
|
|
121
|
+
}
|
|
122
|
+
return Math.abs(msFromGenesis) % milliSecondsPerEpoch;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Same to the spec but we use Math.round instead of Math.floor.
|
|
127
|
+
*/
|
|
128
|
+
export function getCurrentSlotAround(config, genesisTime) {
|
|
129
|
+
const diffInSeconds = Date.now() / 1000 - genesisTime;
|
|
130
|
+
const slotsSinceGenesis = Math.round((diffInSeconds * 1000) / config.SLOT_DURATION_MS);
|
|
131
|
+
return GENESIS_SLOT + slotsSinceGenesis;
|
|
132
|
+
}
|
|
133
|
+
// function useEventStream() {
|
|
134
|
+
// this.stream = this.events.getEventStream([BeaconEventType.BLOCK, BeaconEventType.HEAD, BeaconEventType.CHAIN_REORG]);
|
|
135
|
+
// pipeToEmitter(this.stream, this).catch((e: Error) => {
|
|
136
|
+
// this.logger.error("Error on stream pipe", {}, e);
|
|
137
|
+
// });
|
|
138
|
+
// // On stop
|
|
139
|
+
// this.stream.stop();
|
|
140
|
+
// this.stream = null;
|
|
141
|
+
// }
|
|
142
|
+
//# sourceMappingURL=clock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/util/clock.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAC,YAAY,EAAU,cAAc,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAC,kBAAkB,EAAC,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAC,iBAAiB,EAAE,cAAc,EAAC,MAAM,WAAW,CAAC;SAwBhD,QAAQ;AAApB,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,uCAAI,CAAA;IACJ,yCAAK,CAAA;AAAC,CACR,EAHY,QAAQ,KAAR,QAAQ,QAGnB;AAED,MAAM,OAAO,KAAK;IAUG,IAAI;IATd,WAAW,CAAS;IACpB,cAAc,CAAS;IACf,MAAM,CAAkB;IACxB,MAAM,CAAS;IACf,GAAG,GAA2C,EAAE,CAAC;IAElE,YACE,MAAuB,EACvB,MAAc,EACG,IAA0C,EAC3D;oBADiB,IAAI;QAErB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAAA,CACtB;IAED,IAAI,YAAY,GAAU;QACxB,OAAO,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAAA,CAC1E;IAED,KAAK,CAAC,MAAmB,EAAQ;QAC/B,KAAK,MAAM,EAAC,QAAQ,EAAE,EAAE,EAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACtC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC;gBAC5D,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC7C,CAAC;YAAA,CACF,CAAC,CAAC;QACL,CAAC;IAAA,CACF;IAED,cAAc,GAAS;QACrB,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAAA,CACtD;IAED,eAAe,GAAU;QACvB,OAAO,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAAA,CAC1E;IAED,YAAY,CAAC,EAAc,EAAQ;QACjC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAC,CAAC,CAAC;IAAA,CAC9C;IAED,aAAa,CAAC,EAAc,EAAQ;QAClC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAC,CAAC,CAAC;IAAA,CAC/C;IAED,+CAA+C;IAC/C,QAAQ,CAAC,IAAU,EAAU;QAC3B,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAAA,CACnF;IAED,uDAAuD;IACvD,UAAU,CAAC,IAAU,EAAU;QAC7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAAA,CACnF;IAED,kDAAkD;IAClD,WAAW,CAAC,IAAU,EAAU;QAC9B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAAA,CACnF;IAED;;;;;OAKG;IACK,KAAK,CAAC,cAAc,CAAC,QAAkB,EAAE,MAAmB,EAAE,EAAc,EAAiB;QACnG,wBAAwB;QACxB,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,WAAW,GAAG,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC/E,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,6EAA6E;YAC7E,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC;gBACvD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAAA,CAC1E,CAAC,CAAC;YAEH,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;gBAChE,sFAAsF;gBACtF,MAAM,IAAI,CAAC;YACb,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;gBAClD,mFAAmF;gBACnF,wDAAwD;gBACxD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBAErE,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC/B,IAAI,QAAQ,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;wBACxB,8EAA8E;wBAC9E,yEAAyE;wBACzE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2DAA2D,EAAE;4BAC5E,WAAW,EAAE,IAAI,GAAG,CAAC;yBACtB,CAAC,CAAC;oBACL,CAAC;oBACD,WAAW,GAAG,QAAQ,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACN,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBAC7C,CAAC;gBACD,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,YAAY,YAAY,EAAE,CAAC;oBAC9B,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;IAAA,CACF;IAEO,aAAa,CAAC,QAAkB,EAAU;QAChD,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAE3D,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;gBACvB,OAAO,mBAAmB,GAAG,CAAC,aAAa,GAAG,mBAAmB,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,mBAAmB,CAAC;QACvD,CAAC;QACD,MAAM,oBAAoB,GAAG,eAAe,GAAG,mBAAmB,CAAC;QACnE,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,oBAAoB,GAAG,CAAC,aAAa,GAAG,oBAAoB,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,oBAAoB,CAAC;IAAA,CACvD;CACF;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAuB,EAAE,WAAwB,EAAQ;IAC5F,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,WAAW,CAAC;IACtD,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACvF,OAAO,YAAY,GAAG,iBAAiB,CAAC;AAAA,CACzC;AAED,8BAA8B;AAC9B,0HAA0H;AAC1H,2DAA2D;AAC3D,wDAAwD;AACxD,QAAQ;AAER,eAAe;AACf,wBAAwB;AACxB,wBAAwB;AACxB,IAAI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACpF,OAAO,EACL,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EAEtB,OAAO,
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACpF,OAAO,EACL,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EAEtB,OAAO,EAMR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EAEnB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,GAAG,kBAAkB,GAAG,OAAO,CAcjH;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,GAAG,gBAAgB,GAAG,OAAO,CAclG;AAED,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,IAAI,qBAAqB,CAE/F;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,IAAI,kBAAkB,CAK1F;AAED,uCAAuC;AACvC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,IAAI,gBAAgB,CAEtF;AAED,iDAAiD;AACjD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,yBAAyB,GAAG,KAAK,IAAI,2BAA2B,CAEjH;AAED,wCAAwC;AACxC,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,eAAe,GACzB,SAAS,IAAI,eAAe,CAAC,iBAAiB,GAAG,YAAY,CAAC,CAEhE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,GAAG,gBAAgB,GAAG,sBAAsB,CAErG;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,eAAe,GAAG,sBAAsB,GAC7C,gBAAgB,GAAG,sBAAsB,CAU3C;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,GAAG,sBAAsB,GACjD,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAK1F;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,CAAC,6BAA6B,GAC7C,OAAO,IAAI,OAAO,CAAC,sBAAsB,CAE3C;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAG,sBAAsB,CA2ChH"}
|
package/lib/util/execution.js
CHANGED
|
@@ -69,7 +69,9 @@ export function isCapellaPayloadHeader(payload) {
|
|
|
69
69
|
return payload.withdrawalsRoot !== undefined;
|
|
70
70
|
}
|
|
71
71
|
export function executionPayloadToPayloadHeader(fork, payload) {
|
|
72
|
-
const transactionsRoot =
|
|
72
|
+
const transactionsRoot = fork >= ForkSeq.gloas
|
|
73
|
+
? ssz.gloas.Transactions.hashTreeRoot(payload.transactions)
|
|
74
|
+
: ssz.bellatrix.Transactions.hashTreeRoot(payload.transactions);
|
|
73
75
|
const bellatrixPayloadFields = {
|
|
74
76
|
parentHash: payload.parentHash,
|
|
75
77
|
feeRecipient: payload.feeRecipient,
|
|
@@ -87,7 +89,10 @@ export function executionPayloadToPayloadHeader(fork, payload) {
|
|
|
87
89
|
transactionsRoot,
|
|
88
90
|
};
|
|
89
91
|
if (fork >= ForkSeq.capella) {
|
|
90
|
-
bellatrixPayloadFields.withdrawalsRoot =
|
|
92
|
+
bellatrixPayloadFields.withdrawalsRoot =
|
|
93
|
+
fork >= ForkSeq.gloas
|
|
94
|
+
? ssz.gloas.Withdrawals.hashTreeRoot(payload.withdrawals)
|
|
95
|
+
: ssz.capella.Withdrawals.hashTreeRoot(payload.withdrawals);
|
|
91
96
|
}
|
|
92
97
|
if (fork >= ForkSeq.deneb) {
|
|
93
98
|
// https://github.com/ethereum/consensus-specs/blob/v1.3.0-rc.2/specs/eip4844/beacon-chain.md#process_execution_payload
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACpF,OAAO,
|
|
1
|
+
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"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"}
|
package/lib/util/gloas.d.ts
CHANGED
|
@@ -32,13 +32,14 @@ export declare function isActiveBuilder(builder: gloas.Builder, finalizedEpoch:
|
|
|
32
32
|
* From https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md
|
|
33
33
|
*/
|
|
34
34
|
export declare function getExpectedGasLimit(parentGasLimit: number, targetGasLimit: number): number;
|
|
35
|
+
export declare function getExpectedGasLimitBigint(parentGasLimit: bigint, targetGasLimit: bigint): bigint;
|
|
35
36
|
/**
|
|
36
37
|
* Check if `gasLimit` is compatible with `targetGasLimit` under the EIP-1559 transition rule
|
|
37
38
|
* from `parentGasLimit`. The bid must hit `targetGasLimit` when the target is within one
|
|
38
39
|
* adjustment step of the parent, otherwise it must hit the clamped boundary.
|
|
39
40
|
* Spec: https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.8/specs/gloas/builder.md#new-is_gas_limit_target_compatible
|
|
40
41
|
*/
|
|
41
|
-
export declare function isGasLimitTargetCompatible(parentGasLimit:
|
|
42
|
+
export declare function isGasLimitTargetCompatible(parentGasLimit: bigint, gasLimit: bigint, targetGasLimit: bigint): boolean;
|
|
42
43
|
/**
|
|
43
44
|
* Get the total pending balance to withdraw for a builder (from withdrawals + payments).
|
|
44
45
|
* Spec: https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.1/specs/gloas/beacon-chain.md#new-get_pending_balance_to_withdraw_for_builder
|
|
@@ -61,7 +62,9 @@ export declare function initiateBuilderExit(state: CachedBeaconStateGloas, build
|
|
|
61
62
|
* May consider builder pubkey cache if performance becomes an issue.
|
|
62
63
|
*/
|
|
63
64
|
export declare function findBuilderIndexByPubkey(state: CachedBeaconStateGloas, pubkey: Uint8Array): BuilderIndex | null;
|
|
64
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Use cached block roots to avoid repeated state root lookups while matching the spec's is_attestation_same_slot behavior.
|
|
67
|
+
*/
|
|
65
68
|
export declare function isAttestationSameSlotRootCache(rootCache: RootCache, data: AttestationData): boolean;
|
|
66
69
|
export declare function initializePtcWindow(state: CachedBeaconStateFulu): Uint32Array[];
|
|
67
70
|
export declare function getPtcWindowEpochCacheData(state: CachedBeaconStateGloas): {
|
package/lib/util/gloas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gloas.d.ts","sourceRoot":"","sources":["../../src/util/gloas.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAc9C,OAAO,EAAC,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAM,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAC,qBAAqB,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"gloas.d.ts","sourceRoot":"","sources":["../../src/util/gloas.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAc9C,OAAO,EAAC,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAM,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAC,qBAAqB,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAI1E,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAKzC,wBAAgB,6BAA6B,CAAC,qBAAqB,EAAE,UAAU,GAAG,OAAO,CAExF;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAQtF;AAOD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAG9D;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,YAAY,EAAE,YAAY,GAAG,cAAc,CAG9F;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,cAAc,EAAE,cAAc,GAAG,YAAY,CAGhG;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,GAAG,OAAO,CAEtF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAUhG;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAEpH;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,sBAAsB,EAC7B,YAAY,EAAE,YAAY,GACzB,MAAM,CAoBR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,sBAAsB,EAC7B,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM,GAChB,OAAO,CAUT;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,YAAY,GAAG,IAAI,CAWnG;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CAO/G;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAOnG;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,WAAW,EAAE,CAqB/E;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,sBAAsB,GAAG;IACzE,mCAAmC,EAAE,WAAW,EAAE,CAAC;IACnD,2BAA2B,EAAE,WAAW,EAAE,CAAC;IAC3C,+BAA+B,EAAE,WAAW,EAAE,CAAC;CAChD,CAaA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,UAAU,EAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,IAAI,CA2BN;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,UAAU,EAClB,qBAAqB,EAAE,UAAU,EACjC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,UAAU,GACpB,OAAO,CAWT"}
|
package/lib/util/gloas.js
CHANGED
|
@@ -3,7 +3,6 @@ import { BUILDER_INDEX_FLAG, BUILDER_PAYMENT_THRESHOLD_DENOMINATOR, BUILDER_PAYM
|
|
|
3
3
|
import { ssz } from "@lodestar/types";
|
|
4
4
|
import { byteArrayEquals } from "@lodestar/utils";
|
|
5
5
|
import { ZERO_HASH } from "../constants/index.js";
|
|
6
|
-
import { getBlockRootAtSlot } from "./blockRoot.js";
|
|
7
6
|
import { computeDomain } from "./domain.js";
|
|
8
7
|
import { computeEpochAtSlot } from "./epoch.js";
|
|
9
8
|
import { computeEpochShuffling } from "./epochShuffling.js";
|
|
@@ -14,9 +13,11 @@ export function isBuilderWithdrawalCredential(withdrawalCredentials) {
|
|
|
14
13
|
return withdrawalCredentials[0] === BUILDER_WITHDRAWAL_PREFIX;
|
|
15
14
|
}
|
|
16
15
|
export function getBuilderPaymentQuorumThreshold(state) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
// total active balance exceeds Number.MAX_SAFE_INTEGER at mainnet scale, keep the intermediate math in bigint
|
|
17
|
+
const perSlotBalance = (BigInt(state.epochCtx.totalActiveBalanceIncrements) * BigInt(EFFECTIVE_BALANCE_INCREMENT)) /
|
|
18
|
+
BigInt(SLOTS_PER_EPOCH);
|
|
19
|
+
const quorum = perSlotBalance * BigInt(BUILDER_PAYMENT_THRESHOLD_NUMERATOR);
|
|
20
|
+
return Number(quorum / BigInt(BUILDER_PAYMENT_THRESHOLD_DENOMINATOR));
|
|
20
21
|
}
|
|
21
22
|
function hasBuilderIndexFlag(index) {
|
|
22
23
|
// Equivalent to `(index & BUILDER_INDEX_FLAG) != 0`
|
|
@@ -60,13 +61,16 @@ export function isActiveBuilder(builder, finalizedEpoch) {
|
|
|
60
61
|
* From https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md
|
|
61
62
|
*/
|
|
62
63
|
export function getExpectedGasLimit(parentGasLimit, targetGasLimit) {
|
|
63
|
-
|
|
64
|
+
return Number(getExpectedGasLimitBigint(BigInt(parentGasLimit), BigInt(targetGasLimit)));
|
|
65
|
+
}
|
|
66
|
+
export function getExpectedGasLimitBigint(parentGasLimit, targetGasLimit) {
|
|
67
|
+
const maxGasLimitDifference = (parentGasLimit / 1024n > 1n ? parentGasLimit / 1024n : 1n) - 1n;
|
|
64
68
|
if (targetGasLimit > parentGasLimit) {
|
|
65
69
|
const gasDiff = targetGasLimit - parentGasLimit;
|
|
66
|
-
return parentGasLimit +
|
|
70
|
+
return parentGasLimit + (gasDiff < maxGasLimitDifference ? gasDiff : maxGasLimitDifference);
|
|
67
71
|
}
|
|
68
72
|
const gasDiff = parentGasLimit - targetGasLimit;
|
|
69
|
-
return parentGasLimit -
|
|
73
|
+
return parentGasLimit - (gasDiff < maxGasLimitDifference ? gasDiff : maxGasLimitDifference);
|
|
70
74
|
}
|
|
71
75
|
/**
|
|
72
76
|
* Check if `gasLimit` is compatible with `targetGasLimit` under the EIP-1559 transition rule
|
|
@@ -75,7 +79,7 @@ export function getExpectedGasLimit(parentGasLimit, targetGasLimit) {
|
|
|
75
79
|
* Spec: https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.8/specs/gloas/builder.md#new-is_gas_limit_target_compatible
|
|
76
80
|
*/
|
|
77
81
|
export function isGasLimitTargetCompatible(parentGasLimit, gasLimit, targetGasLimit) {
|
|
78
|
-
return gasLimit ===
|
|
82
|
+
return gasLimit === getExpectedGasLimitBigint(parentGasLimit, targetGasLimit);
|
|
79
83
|
}
|
|
80
84
|
/**
|
|
81
85
|
* Get the total pending balance to withdraw for a builder (from withdrawals + payments).
|
|
@@ -140,13 +144,9 @@ export function findBuilderIndexByPubkey(state, pubkey) {
|
|
|
140
144
|
}
|
|
141
145
|
return null;
|
|
142
146
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const isMatchingBlockRoot = byteArrayEquals(data.beaconBlockRoot, getBlockRootAtSlot(state, data.slot));
|
|
147
|
-
const isCurrentBlockRoot = !byteArrayEquals(data.beaconBlockRoot, getBlockRootAtSlot(state, data.slot - 1));
|
|
148
|
-
return isMatchingBlockRoot && isCurrentBlockRoot;
|
|
149
|
-
}
|
|
147
|
+
/**
|
|
148
|
+
* Use cached block roots to avoid repeated state root lookups while matching the spec's is_attestation_same_slot behavior.
|
|
149
|
+
*/
|
|
150
150
|
export function isAttestationSameSlotRootCache(rootCache, data) {
|
|
151
151
|
if (data.slot === 0)
|
|
152
152
|
return true;
|
package/lib/util/gloas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gloas.js","sourceRoot":"","sources":["../../src/util/gloas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EACL,kBAAkB,EAClB,qCAAqC,EACrC,mCAAmC,EACnC,yBAAyB,EACzB,sBAAsB,EACtB,2BAA2B,EAC3B,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,EACR,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA6C,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAEhF,OAAO,EAAC,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"gloas.js","sourceRoot":"","sources":["../../src/util/gloas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EACL,kBAAkB,EAClB,qCAAqC,EACrC,mCAAmC,EACnC,yBAAyB,EACzB,sBAAsB,EACtB,2BAA2B,EAC3B,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,EACR,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA6C,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAEhF,OAAO,EAAC,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAC,0CAA0C,EAAC,MAAM,WAAW,CAAC;AACrE,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAC,yBAAyB,EAAC,MAAM,gBAAgB,CAAC;AAEzD,MAAM,UAAU,6BAA6B,CAAC,qBAAiC,EAAW;IACxF,OAAO,qBAAqB,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC;AAAA,CAC/D;AAED,MAAM,UAAU,gCAAgC,CAAC,KAA6B,EAAU;IACtF,8GAA8G;IAC9G,MAAM,cAAc,GAClB,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,4BAA4B,CAAC,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAC3F,MAAM,CAAC,eAAe,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,cAAc,GAAG,MAAM,CAAC,mCAAmC,CAAC,CAAC;IAE5E,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;AAAA,CACvE;AAED,SAAS,mBAAmB,CAAC,KAAa,EAAW;IACnD,oDAAoD;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAAA,CACzD;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,cAAsB,EAAW;IAC9D,uGAAuG;IACvG,OAAO,mBAAmB,CAAC,cAAc,CAAC,CAAC;AAAA,CAC5C;AAED;;;GAGG;AACH,MAAM,UAAU,mCAAmC,CAAC,YAA0B,EAAkB;IAC9F,sGAAsG;IACtG,OAAO,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,GAAG,kBAAkB,CAAC;AAAA,CAC7F;AAED;;;GAGG;AACH,MAAM,UAAU,mCAAmC,CAAC,cAA8B,EAAgB;IAChG,uGAAuG;IACvG,OAAO,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC;AAAA,CACnG;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAsB,EAAE,cAAqB,EAAW;IACtF,OAAO,OAAO,CAAC,YAAY,GAAG,cAAc,IAAI,OAAO,CAAC,iBAAiB,KAAK,gBAAgB,CAAC;AAAA,CAChG;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,cAAsB,EAAE,cAAsB,EAAU;IAC1F,OAAO,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAAA,CAC1F;AAED,MAAM,UAAU,yBAAyB,CAAC,cAAsB,EAAE,cAAsB,EAAU;IAChG,MAAM,qBAAqB,GAAG,CAAC,cAAc,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IAE/F,IAAI,cAAc,GAAG,cAAc,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,cAAc,GAAG,cAAc,CAAC;QAChD,OAAO,cAAc,GAAG,CAAC,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,GAAG,cAAc,CAAC;IAChD,OAAO,cAAc,GAAG,CAAC,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;AAAA,CAC7F;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,cAAsB,EAAE,QAAgB,EAAE,cAAsB,EAAW;IACpH,OAAO,QAAQ,KAAK,yBAAyB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAAA,CAC/E;AAED;;;GAGG;AACH,MAAM,UAAU,qCAAqC,CACnD,KAA6B,EAC7B,YAA0B,EAClB;IACR,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,0BAA0B;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,yBAAyB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChE,MAAM,UAAU,GAAG,KAAK,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,UAAU,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;YAC7C,cAAc,IAAI,UAAU,CAAC,MAAM,CAAC;QACtC,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;YACrD,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AAAA,CACvB;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA6B,EAC7B,YAA0B,EAC1B,SAAiB,EACR;IACT,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,qCAAqC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAClF,MAAM,UAAU,GAAG,kBAAkB,GAAG,cAAc,CAAC;IAEvD,IAAI,OAAO,CAAC,OAAO,GAAG,UAAU,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,GAAG,UAAU,IAAI,SAAS,CAAC;AAAA,CAClD;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA6B,EAAE,YAA0B,EAAQ;IACnG,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEjD,2CAA2C;IAC3C,IAAI,OAAO,CAAC,iBAAiB,KAAK,gBAAgB,EAAE,CAAC;QACnD,OAAO;IACT,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,CAAC,iBAAiB,GAAG,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC;AAAA,CAC3F;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAA6B,EAAE,MAAkB,EAAuB;IAC/G,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YAClE,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACb;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAAC,SAAoB,EAAE,IAAqB,EAAW;IACnG,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,mBAAmB,GAAG,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3G,MAAM,kBAAkB,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IAE/G,OAAO,mBAAmB,IAAI,kBAAkB,CAAC;AAAA,CAClD;AAED,MAAM,UAAU,mBAAmB,CAAC,KAA4B,EAAiB;IAC/E,MAAM,SAAS,GAAkB,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,eAAe,EAAC,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxG,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAE1C,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,IAAI,kBAAkB,EAAE,WAAW,EAAE,EAAE,CAAC;QAC3E,MAAM,KAAK,GAAG,YAAY,GAAG,WAAW,CAAC;QACzC,MAAM,SAAS,GACb,KAAK,CAAC,QAAQ,CAAC,yBAAyB,CAAC,KAAK,CAAC;YAC/C,qBAAqB,CAAC,KAAK,EAAE,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QAE/E,SAAS,CAAC,IAAI,CACZ,GAAG,0CAA0C,CAC3C,KAAK,EACL,KAAK,EACL,SAAS,CAAC,UAAU,EACpB,KAAK,CAAC,QAAQ,CAAC,0BAA0B,CAC1C,CACF,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC;AAAA,CAClB;AAED,MAAM,UAAU,0BAA0B,CAAC,KAA6B,EAItE;IACA,MAAM,cAAc,GAAG,CAAC,KAA4D,EAAE,EAAE,CACtF,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEjD,MAAM,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IACjF,MAAM,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC9F,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,GAAG,eAAe,EAAE,eAAe,CAAC,CAAC;IAE/F,OAAO;QACL,mCAAmC,EAAE,cAAc,CAAC,iBAAiB,CAAC;QACtE,2BAA2B,EAAE,cAAc,CAAC,gBAAgB,CAAC;QAC7D,+BAA+B,EAAE,cAAc,CAAC,aAAa,CAAC;KAC/D,CAAC;AAAA,CACH;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAA6B,EAC7B,MAAkB,EAClB,OAAe,EACf,gBAA4B,EAC5B,MAAc,EACd,IAAY,EACN;IACN,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAE9C,IAAI,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,iBAAiB,IAAI,YAAY,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACvE,YAAY,GAAG,CAAC,CAAC;YACjB,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC5C,MAAM;QACN,OAAO;QACP,gBAAgB;QAChB,OAAO,EAAE,MAAM;QACf,YAAY;QACZ,iBAAiB,EAAE,gBAAgB;KACpC,CAAC,CAAC;IAEH,IAAI,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACzC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;AAAA,CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,8BAA8B,CAC5C,MAAoB,EACpB,MAAkB,EAClB,qBAAiC,EACjC,MAAc,EACd,SAAqB,EACZ;IACT,MAAM,cAAc,GAAG,EAAC,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,aAAa,CAAC,sBAAsB,EAAE,MAAM,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;IAC7F,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAC1F,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;AAAA,CACF"}
|
package/lib/util/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export * from "./balance.js";
|
|
|
6
6
|
export * from "./blindedBlock.js";
|
|
7
7
|
export * from "./blockRoot.js";
|
|
8
8
|
export * from "./capella.js";
|
|
9
|
+
export * from "./clock.js";
|
|
9
10
|
export * from "./computeAnchorCheckpoint.js";
|
|
10
11
|
export * from "./deposit.js";
|
|
11
12
|
export * from "./domain.js";
|
|
@@ -25,6 +26,7 @@ export * from "./shuffling.js";
|
|
|
25
26
|
export * from "./signatureSets.js";
|
|
26
27
|
export * from "./signingRoot.js";
|
|
27
28
|
export * from "./slot.js";
|
|
29
|
+
export * from "./ssz.js";
|
|
28
30
|
export * from "./syncCommittee.js";
|
|
29
31
|
export * from "./validator.js";
|
|
30
32
|
export * from "./weakSubjectivity.js";
|
package/lib/util/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
package/lib/util/index.js
CHANGED
|
@@ -6,6 +6,7 @@ export * from "./balance.js";
|
|
|
6
6
|
export * from "./blindedBlock.js";
|
|
7
7
|
export * from "./blockRoot.js";
|
|
8
8
|
export * from "./capella.js";
|
|
9
|
+
export * from "./clock.js";
|
|
9
10
|
export * from "./computeAnchorCheckpoint.js";
|
|
10
11
|
export * from "./deposit.js";
|
|
11
12
|
export * from "./domain.js";
|
|
@@ -25,6 +26,7 @@ export * from "./shuffling.js";
|
|
|
25
26
|
export * from "./signatureSets.js";
|
|
26
27
|
export * from "./signingRoot.js";
|
|
27
28
|
export * from "./slot.js";
|
|
29
|
+
export * from "./ssz.js";
|
|
28
30
|
export * from "./syncCommittee.js";
|
|
29
31
|
export * from "./validator.js";
|
|
30
32
|
export * from "./weakSubjectivity.js";
|
package/lib/util/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Node } from "@chainsafe/persistent-merkle-tree";
|
|
2
|
+
/** Root node (chunks + length mix-in) of a zero-filled ProgressiveListBasicType of `length` items */
|
|
3
|
+
export declare function zeroProgressiveListBasicRootNode(itemsPerChunk: number, length: number): Node;
|
|
4
|
+
/**
|
|
5
|
+
* Root node of a progressive list from its chunk/element nodes + length mix-in.
|
|
6
|
+
* `nodes` are packed 32-byte chunk leaves for basic lists, or element root nodes for composite lists.
|
|
7
|
+
*/
|
|
8
|
+
export declare function progressiveListRootNode(nodes: Node[], length: number): Node;
|
|
9
|
+
//# sourceMappingURL=ssz.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssz.d.ts","sourceRoot":"","sources":["../../src/util/ssz.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,IAAI,EAAW,MAAM,mCAAmC,CAAC;AAKvF,qGAAqG;AACrG,wBAAgB,gCAAgC,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAS5F;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3E"}
|