@lodestar/state-transition 1.45.0-rc.0 → 1.46.0-dev.82546f11da
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/processAttestationsAltair.d.ts +4 -1
- package/lib/block/processAttestationsAltair.d.ts.map +1 -1
- package/lib/block/processAttestationsAltair.js +7 -5
- 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/processOperations.d.ts.map +1 -1
- package/lib/block/processOperations.js +17 -1
- 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/processWithdrawals.js +1 -1
- package/lib/block/processWithdrawals.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/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 +48 -9
- package/lib/slot/upgradeStateToGloas.js.map +1 -1
- 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 +3 -1
- package/lib/util/gloas.d.ts.map +1 -1
- package/lib/util/gloas.js +8 -11
- package/lib/util/gloas.js.map +1 -1
- package/lib/util/index.d.ts +1 -0
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -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 +8 -8
- package/src/block/processAttestationsAltair.ts +9 -6
- package/src/block/processBuilderDepositRequest.ts +21 -8
- package/src/block/processOperations.ts +28 -1
- package/src/block/processParentExecutionPayload.ts +26 -1
- package/src/block/processWithdrawals.ts +1 -1
- 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/slot/upgradeStateToAltair.ts +1 -1
- package/src/slot/upgradeStateToGloas.ts +84 -9
- package/src/util/execution.ts +9 -4
- package/src/util/gloas.ts +9 -14
- package/src/util/index.ts +1 -0
- package/src/util/ssz.ts +42 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgradeStateToGloas.d.ts","sourceRoot":"","sources":["../../src/slot/upgradeStateToGloas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"upgradeStateToGloas.d.ts","sourceRoot":"","sources":["../../src/slot/upgradeStateToGloas.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAC,qBAAqB,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAM1E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,qBAAqB,GAAG,sBAAsB,CA0F5F"}
|
|
@@ -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,17 +31,17 @@ 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;
|
|
@@ -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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"}
|
|
@@ -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":"AAAA,OAAO,EAA4C,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAWL,wBAAwB,EACxB,kBAAkB,EAClB,GAAG,GACJ,MAAM,iBAAiB,CAAC;AAWzB;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAA4B,EAAE,KAAuC,EAAW;IACjH,IAAI,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4GAA4G;IAC5G,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAE/C,OAAO,kBAAkB,CAAC,OAAO,CAAC;QAChC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;QAChG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,MAAM,CAC1C,KAAK,CAAC,4BAA4B,EAClC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,YAAY,EAAE,CACpD,CAAC;AAAA,CACP;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAA+C,EAAW;IAClG,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,kEAAkE;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,MAAM,CAChD,KAA8B,CAAC,4BAA4B,EAC5D,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,YAAY,EAAE,CACpD,CAAC;AAAA,CACH;AAED,2CAA2C;AAC3C,MAAM,UAAU,oBAAoB,CAAC,KAA0B,EAAkC;IAC/F,OAAQ,KAA+B,CAAC,4BAA4B,KAAK,SAAS,CAAC;AAAA,CACpF;AAED,yCAAyC;AACzC,MAAM,UAAU,kBAAkB,CAAC,KAA0B,EAA+B;IAC1F,OAAO,CACJ,KAA4B,CAAC,4BAA4B,KAAK,SAAS;QACvE,KAA4B,CAAC,4BAA4B,CAAC,eAAe,KAAK,SAAS,CACzF,CAAC;AAAA,CACH;AAED,uCAAuC;AACvC,MAAM,UAAU,gBAAgB,CAAC,KAA0B,EAA6B;IACtF,OAAQ,KAA0B,CAAC,eAAe,KAAK,SAAS,CAAC;AAAA,CAClE;AAED,iDAAiD;AACjD,MAAM,UAAU,0BAA0B,CAAC,KAAgC,EAAwC;IACjH,OAAQ,KAAqC,CAAC,4BAA4B,KAAK,SAAS,CAAC;AAAA,CAC1F;AAED,wCAAwC;AACxC,MAAM,UAAU,wBAAwB,CACtC,SAA0B,EACsC;IAChE,OAAQ,SAA+D,CAAC,gBAAgB,KAAK,SAAS,CAAC;AAAA,CACxG;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAkB,EAA6C;IACrG,OAAO,+BAA+B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAAA,CACpD;AAED,MAAM,UAAU,+BAA+B,CAC7C,IAA8C,EACH;IAC3C,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACrC,CAAC;IAED,IAAK,IAAkC,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACvE,OAAQ,IAAkC,CAAC,gBAAgB,CAAC;IAC9D,CAAC;IAED,MAAM,KAAK,CAAC,kCAAkC,CAAC,CAAC;AAAA,CACjD;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAkD,EACwC;IAC1F,OAAO,CACJ,OAA8C,CAAC,WAAW,KAAK,SAAS;QACxE,OAAoD,CAAC,eAAe,KAAK,SAAS,CACpF,CAAC;AAAA,CACH;AAED,MAAM,UAAU,sBAAsB,CACpC,OAA8C,EACH;IAC3C,OAAQ,OAA0C,CAAC,eAAe,KAAK,SAAS,CAAC;AAAA,CAClF;AAED,MAAM,UAAU,+BAA+B,CAAC,IAAa,EAAE,OAAyB,EAA0B;IAChH,MAAM,gBAAgB,GACpB,IAAI,IAAI,OAAO,CAAC,KAAK;QACnB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAE,OAAkC,CAAC,YAAY,CAAC;QACvF,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEpE,MAAM,sBAAsB,GAA2B;QACrD,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB;KACjB,CAAC;IAEF,IAAI,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,sBAAyD,CAAC,eAAe;YACxE,IAAI,IAAI,OAAO,CAAC,KAAK;gBACnB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAE,OAAkC,CAAC,WAAW,CAAC;gBACrF,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAE,OAAoC,CAAC,WAAW,CAAC,CAAC;IAChG,CAAC;IAED,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1B,uHAAuH;QACtH,sBAAuD,CAAC,WAAW,GAClE,OACD,CAAC,WAAW,CAAC;QACb,sBAAuD,CAAC,aAAa,GACpE,OACD,CAAC,aAAa,CAAC;IAClB,CAAC;IAED,uBAAuB;IAEvB,OAAO,sBAAsB,CAAC;AAAA,CAC/B"}
|
package/lib/util/gloas.d.ts
CHANGED
|
@@ -61,7 +61,9 @@ export declare function initiateBuilderExit(state: CachedBeaconStateGloas, build
|
|
|
61
61
|
* May consider builder pubkey cache if performance becomes an issue.
|
|
62
62
|
*/
|
|
63
63
|
export declare function findBuilderIndexByPubkey(state: CachedBeaconStateGloas, pubkey: Uint8Array): BuilderIndex | null;
|
|
64
|
-
|
|
64
|
+
/**
|
|
65
|
+
* Use cached block roots to avoid repeated state root lookups while matching the spec's is_attestation_same_slot behavior.
|
|
66
|
+
*/
|
|
65
67
|
export declare function isAttestationSameSlotRootCache(rootCache: RootCache, data: AttestationData): boolean;
|
|
66
68
|
export declare function initializePtcWindow(state: CachedBeaconStateFulu): Uint32Array[];
|
|
67
69
|
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,CAU1F;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`
|
|
@@ -140,13 +141,9 @@ export function findBuilderIndexByPubkey(state, pubkey) {
|
|
|
140
141
|
}
|
|
141
142
|
return null;
|
|
142
143
|
}
|
|
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
|
-
}
|
|
144
|
+
/**
|
|
145
|
+
* Use cached block roots to avoid repeated state root lookups while matching the spec's is_attestation_same_slot behavior.
|
|
146
|
+
*/
|
|
150
147
|
export function isAttestationSameSlotRootCache(rootCache, data) {
|
|
151
148
|
if (data.slot === 0)
|
|
152
149
|
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":"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"}
|
package/lib/util/index.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export * from "./shuffling.js";
|
|
|
25
25
|
export * from "./signatureSets.js";
|
|
26
26
|
export * from "./signingRoot.js";
|
|
27
27
|
export * from "./slot.js";
|
|
28
|
+
export * from "./ssz.js";
|
|
28
29
|
export * from "./syncCommittee.js";
|
|
29
30
|
export * from "./validator.js";
|
|
30
31
|
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,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
|
@@ -25,6 +25,7 @@ export * from "./shuffling.js";
|
|
|
25
25
|
export * from "./signatureSets.js";
|
|
26
26
|
export * from "./signingRoot.js";
|
|
27
27
|
export * from "./slot.js";
|
|
28
|
+
export * from "./ssz.js";
|
|
28
29
|
export * from "./syncCommittee.js";
|
|
29
30
|
export * from "./validator.js";
|
|
30
31
|
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,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"}
|
package/lib/util/ssz.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { BranchNode, LeafNode, zeroNode } from "@chainsafe/persistent-merkle-tree";
|
|
2
|
+
import { progressiveSubtreeFillToContents } from "@chainsafe/ssz";
|
|
3
|
+
// TODO: move these utils to @chainsafe/ssz (progressive.ts, next to progressiveSubtreeFillToContents)
|
|
4
|
+
/** Root node (chunks + length mix-in) of a zero-filled ProgressiveListBasicType of `length` items */
|
|
5
|
+
export function zeroProgressiveListBasicRootNode(itemsPerChunk, length) {
|
|
6
|
+
const chunkCount = Math.ceil(length / itemsPerChunk);
|
|
7
|
+
// mirrors ssz's progressiveSubtreeCount (subtree capacities 1, 4, 16, ...)
|
|
8
|
+
let numSubtrees = 0;
|
|
9
|
+
for (let remaining = chunkCount, subtreeLength = 1; remaining > 0; subtreeLength *= 4) {
|
|
10
|
+
remaining -= Math.min(remaining, subtreeLength);
|
|
11
|
+
numSubtrees++;
|
|
12
|
+
}
|
|
13
|
+
return new BranchNode(zeroProgressiveNode(numSubtrees), LeafNode.fromUint32(length));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Root node of a progressive list from its chunk/element nodes + length mix-in.
|
|
17
|
+
* `nodes` are packed 32-byte chunk leaves for basic lists, or element root nodes for composite lists.
|
|
18
|
+
*/
|
|
19
|
+
export function progressiveListRootNode(nodes, length) {
|
|
20
|
+
return new BranchNode(progressiveSubtreeFillToContents(nodes), LeafNode.fromUint32(length));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Return the chunks node of a zero-filled progressive merkle list spanning `numSubtrees`
|
|
24
|
+
* balanced subtrees (chunk capacities 1, 4, 16, ... = 4^i; depths 0, 2, 4, ... = 2i).
|
|
25
|
+
*
|
|
26
|
+
* Not memoized: the zero data is already fully shared via the cached zeroNode(2i) subtrees;
|
|
27
|
+
* only the O(numSubtrees) spine BranchNodes (~10 at 2M validators) are allocated per call.
|
|
28
|
+
*/
|
|
29
|
+
function zeroProgressiveNode(numSubtrees) {
|
|
30
|
+
// chain(k) = B(zeroNode(0), B(zeroNode(2), ... B(zeroNode(2(k-1)), zeroNode(0))))
|
|
31
|
+
let node = zeroNode(0); // terminator
|
|
32
|
+
for (let i = numSubtrees - 1; i >= 0; i--) {
|
|
33
|
+
// BranchNode(left: balanced subtree i, right: rest of chain) — chain grows to the right,
|
|
34
|
+
// same as ssz progressiveSubtreeFillToContents: `root = new BranchNode(subtreeRoots[i], root)`
|
|
35
|
+
node = new BranchNode(zeroNode(2 * i), node);
|
|
36
|
+
}
|
|
37
|
+
return node;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=ssz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssz.js","sourceRoot":"","sources":["../../src/util/ssz.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,QAAQ,EAAQ,QAAQ,EAAC,MAAM,mCAAmC,CAAC;AACvF,OAAO,EAAC,gCAAgC,EAAC,MAAM,gBAAgB,CAAC;AAEhE,sGAAsG;AAEtG,qGAAqG;AACrG,MAAM,UAAU,gCAAgC,CAAC,aAAqB,EAAE,MAAc,EAAQ;IAC5F,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;IACrD,2EAA2E;IAC3E,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,IAAI,SAAS,GAAG,UAAU,EAAE,aAAa,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,aAAa,IAAI,CAAC,EAAE,CAAC;QACtF,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAChD,WAAW,EAAE,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,CACtF;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAa,EAAE,MAAc,EAAQ;IAC3E,OAAO,IAAI,UAAU,CAAC,gCAAgC,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,CAC7F;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,WAAmB,EAAQ;IACtD,kFAAkF;IAClF,IAAI,IAAI,GAAS,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;IAC3C,KAAK,IAAI,CAAC,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,yFAAyF;QACzF,+FAA+F;QAC/F,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACb"}
|
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.
|
|
14
|
+
"version": "1.46.0-dev.82546f11da",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"lint:fix": "pnpm run lint --write",
|
|
62
62
|
"test": "pnpm test:unit",
|
|
63
63
|
"test:unit": "vitest run --project unit --project unit-minimal",
|
|
64
|
-
"check-readme": "pnpm exec
|
|
64
|
+
"check-readme": "pnpm exec tsx ../../scripts/check_readme.ts"
|
|
65
65
|
},
|
|
66
66
|
"types": "lib/index.d.ts",
|
|
67
67
|
"dependencies": {
|
|
@@ -71,14 +71,14 @@
|
|
|
71
71
|
"@chainsafe/pubkey-index-map": "^3.0.0",
|
|
72
72
|
"@chainsafe/ssz": "^1.6.2",
|
|
73
73
|
"@chainsafe/swap-or-not-shuffle": "^1.2.1",
|
|
74
|
-
"@lodestar/config": "^1.
|
|
75
|
-
"@lodestar/params": "^1.
|
|
76
|
-
"@lodestar/types": "^1.
|
|
77
|
-
"@lodestar/utils": "^1.
|
|
74
|
+
"@lodestar/config": "^1.46.0-dev.82546f11da",
|
|
75
|
+
"@lodestar/params": "^1.46.0-dev.82546f11da",
|
|
76
|
+
"@lodestar/types": "^1.46.0-dev.82546f11da",
|
|
77
|
+
"@lodestar/utils": "^1.46.0-dev.82546f11da",
|
|
78
78
|
"@vekexasia/bigint-buffer2": "^1.1.1"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"@lodestar/api": "^1.
|
|
81
|
+
"@lodestar/api": "^1.46.0-dev.82546f11da"
|
|
82
82
|
},
|
|
83
83
|
"keywords": [
|
|
84
84
|
"ethereum",
|
|
@@ -86,5 +86,5 @@
|
|
|
86
86
|
"beacon",
|
|
87
87
|
"blockchain"
|
|
88
88
|
],
|
|
89
|
-
"gitHead": "
|
|
89
|
+
"gitHead": "7ad265f6631edb60ec101da419387812389c20cd"
|
|
90
90
|
}
|
|
@@ -20,7 +20,7 @@ import {BeaconStateTransitionMetrics} from "../metrics.js";
|
|
|
20
20
|
import {getAttestationWithIndicesSignatureSet} from "../signatureSets/indexedAttestation.js";
|
|
21
21
|
import {BeaconStateView} from "../stateView/beaconStateView.js";
|
|
22
22
|
import {CachedBeaconStateAltair, CachedBeaconStateGloas} from "../types.js";
|
|
23
|
-
import {
|
|
23
|
+
import {isAttestationSameSlotRootCache} from "../util/gloas.js";
|
|
24
24
|
import {increaseBalance, verifySignatureSet} from "../util/index.js";
|
|
25
25
|
import {RootCache} from "../util/rootCache.js";
|
|
26
26
|
import {checkpointToStr, isTimelyTarget, validateAttestation} from "./processAttestationPhase0.js";
|
|
@@ -76,7 +76,7 @@ export function processAttestationsAltair(
|
|
|
76
76
|
// Count how much additional weight added to current or previous epoch's builder pending payment (in ETH increment)
|
|
77
77
|
let paymentWeightToAdd = 0;
|
|
78
78
|
|
|
79
|
-
const flagsAttestation = getAttestationParticipationStatus(
|
|
79
|
+
const {flags: flagsAttestation, isSameSlotAttestation} = getAttestationParticipationStatus(
|
|
80
80
|
fork,
|
|
81
81
|
data,
|
|
82
82
|
stateSlot - data.slot,
|
|
@@ -132,7 +132,7 @@ export function processAttestationsAltair(
|
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
if (
|
|
135
|
+
if (isSameSlotAttestation && flagsNewSet !== 0) {
|
|
136
136
|
paymentWeightToAdd += effectiveBalanceIncrements[validatorIndex];
|
|
137
137
|
}
|
|
138
138
|
}
|
|
@@ -180,7 +180,7 @@ export function getAttestationParticipationStatus(
|
|
|
180
180
|
currentEpoch: Epoch,
|
|
181
181
|
rootCache: RootCache,
|
|
182
182
|
executionPayloadAvailability: BitArray | null
|
|
183
|
-
): number {
|
|
183
|
+
): {flags: number; isSameSlotAttestation: boolean} {
|
|
184
184
|
const justifiedCheckpoint =
|
|
185
185
|
data.target.epoch === currentEpoch ? rootCache.currentJustifiedCheckpoint : rootCache.previousJustifiedCheckpoint;
|
|
186
186
|
|
|
@@ -206,10 +206,13 @@ export function getAttestationParticipationStatus(
|
|
|
206
206
|
let isMatchingHead =
|
|
207
207
|
isMatchingTarget && byteArrayEquals(data.beaconBlockRoot, rootCache.getBlockRootAtSlot(data.slot));
|
|
208
208
|
|
|
209
|
+
let isSameSlotAttestation = false;
|
|
210
|
+
|
|
209
211
|
if (fork >= ForkSeq.gloas) {
|
|
210
212
|
let isMatchingPayload = false;
|
|
213
|
+
isSameSlotAttestation = isAttestationSameSlotRootCache(rootCache, data);
|
|
211
214
|
|
|
212
|
-
if (
|
|
215
|
+
if (isSameSlotAttestation) {
|
|
213
216
|
if (data.index !== 0) {
|
|
214
217
|
throw new Error("Attesting same slot must indicate empty payload");
|
|
215
218
|
}
|
|
@@ -235,7 +238,7 @@ export function getAttestationParticipationStatus(
|
|
|
235
238
|
if (isMatchingTarget && isTimelyTarget(fork, inclusionDelay)) flags |= TIMELY_TARGET;
|
|
236
239
|
if (isMatchingHead && inclusionDelay === MIN_ATTESTATION_INCLUSION_DELAY) flags |= TIMELY_HEAD;
|
|
237
240
|
|
|
238
|
-
return flags;
|
|
241
|
+
return {flags, isSameSlotAttestation};
|
|
239
242
|
}
|
|
240
243
|
|
|
241
244
|
export function checkpointValueEquals(cp1: phase0.Checkpoint, cp2: phase0.Checkpoint): boolean {
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import {FAR_FUTURE_EPOCH} from "@lodestar/params";
|
|
1
|
+
import {FAR_FUTURE_EPOCH, PAYLOAD_BUILDER_VERSION} from "@lodestar/params";
|
|
2
2
|
import {gloas} from "@lodestar/types";
|
|
3
3
|
import {CachedBeaconStateGloas} from "../types.js";
|
|
4
4
|
import {computeEpochAtSlot} from "../util/epoch.js";
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
addBuilderToRegistry,
|
|
7
|
+
findBuilderIndexByPubkey,
|
|
8
|
+
isBuilderWithdrawalCredential,
|
|
9
|
+
isValidBuilderDepositSignature,
|
|
10
|
+
} from "../util/gloas.js";
|
|
6
11
|
|
|
7
12
|
/**
|
|
8
13
|
* Process a builder deposit request from the execution layer: register a new builder
|
|
@@ -15,6 +20,12 @@ export function processBuilderDepositRequest(
|
|
|
15
20
|
request: gloas.BuilderDepositRequest
|
|
16
21
|
): void {
|
|
17
22
|
const {pubkey, withdrawalCredentials, amount, signature} = request;
|
|
23
|
+
|
|
24
|
+
// Ignore deposits with unexpected withdrawal credential prefixes.
|
|
25
|
+
if (!isBuilderWithdrawalCredential(withdrawalCredentials)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
18
29
|
const builderIndex = findBuilderIndexByPubkey(state, pubkey);
|
|
19
30
|
|
|
20
31
|
if (builderIndex === null) {
|
|
@@ -22,7 +33,7 @@ export function processBuilderDepositRequest(
|
|
|
22
33
|
addBuilderToRegistry(
|
|
23
34
|
state,
|
|
24
35
|
pubkey,
|
|
25
|
-
|
|
36
|
+
PAYLOAD_BUILDER_VERSION,
|
|
26
37
|
withdrawalCredentials.subarray(12),
|
|
27
38
|
amount,
|
|
28
39
|
state.slot
|
|
@@ -33,11 +44,13 @@ export function processBuilderDepositRequest(
|
|
|
33
44
|
|
|
34
45
|
const builder = state.builders.get(builderIndex);
|
|
35
46
|
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if (builder.withdrawableEpoch !== FAR_FUTURE_EPOCH) {
|
|
47
|
+
// If the builder has exited and been fully swept (balance drained to 0), reset the
|
|
48
|
+
// withdrawable epoch so this top-up becomes withdrawable again. Must run before the
|
|
49
|
+
// balance increase, since the reset is gated on the current balance being 0.
|
|
50
|
+
if (builder.withdrawableEpoch !== FAR_FUTURE_EPOCH && builder.balance === 0) {
|
|
41
51
|
builder.withdrawableEpoch = computeEpochAtSlot(state.slot) + state.config.MIN_BUILDER_WITHDRAWABILITY_DELAY;
|
|
42
52
|
}
|
|
53
|
+
|
|
54
|
+
// Increase balance by deposit amount
|
|
55
|
+
builder.balance += amount;
|
|
43
56
|
}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ForkSeq,
|
|
3
|
+
MAX_ATTESTATIONS_ELECTRA,
|
|
4
|
+
MAX_ATTESTER_SLASHINGS_ELECTRA,
|
|
5
|
+
MAX_BLS_TO_EXECUTION_CHANGES,
|
|
6
|
+
MAX_PAYLOAD_ATTESTATIONS,
|
|
7
|
+
MAX_PROPOSER_SLASHINGS,
|
|
8
|
+
MAX_VOLUNTARY_EXITS,
|
|
9
|
+
} from "@lodestar/params";
|
|
2
10
|
import {BeaconBlockBody, capella, electra, gloas} from "@lodestar/types";
|
|
3
11
|
import {BeaconStateTransitionMetrics} from "../metrics.js";
|
|
4
12
|
import {
|
|
@@ -39,6 +47,10 @@ export function processOperations(
|
|
|
39
47
|
opts: ProcessBlockOpts = {verifySignatures: true},
|
|
40
48
|
metrics?: BeaconStateTransitionMetrics | null
|
|
41
49
|
): void {
|
|
50
|
+
if (fork >= ForkSeq.gloas) {
|
|
51
|
+
assertGloasOperationLimits(body as gloas.BeaconBlockBody);
|
|
52
|
+
}
|
|
53
|
+
|
|
42
54
|
// verify that outstanding deposits are processed up to the maximum number of deposits.
|
|
43
55
|
// From Fulu the eth1 bridge deposit mechanism was removed, so blocks must not contain any deposits.
|
|
44
56
|
const maxDeposits = fork >= ForkSeq.fulu ? 0 : getEth1DepositCount(state);
|
|
@@ -94,3 +106,18 @@ export function processOperations(
|
|
|
94
106
|
}
|
|
95
107
|
}
|
|
96
108
|
}
|
|
109
|
+
|
|
110
|
+
function assertGloasOperationLimits(body: gloas.BeaconBlockBody): void {
|
|
111
|
+
assertMaxLength("proposerSlashings", body.proposerSlashings.length, MAX_PROPOSER_SLASHINGS);
|
|
112
|
+
assertMaxLength("attesterSlashings", body.attesterSlashings.length, MAX_ATTESTER_SLASHINGS_ELECTRA);
|
|
113
|
+
assertMaxLength("attestations", body.attestations.length, MAX_ATTESTATIONS_ELECTRA);
|
|
114
|
+
assertMaxLength("voluntaryExits", body.voluntaryExits.length, MAX_VOLUNTARY_EXITS);
|
|
115
|
+
assertMaxLength("blsToExecutionChanges", body.blsToExecutionChanges.length, MAX_BLS_TO_EXECUTION_CHANGES);
|
|
116
|
+
assertMaxLength("payloadAttestations", body.payloadAttestations.length, MAX_PAYLOAD_ATTESTATIONS);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function assertMaxLength(name: string, length: number, limit: number): void {
|
|
120
|
+
if (length > limit) {
|
|
121
|
+
throw new Error(`Block contains too many ${name}: count=${length} limit=${limit}`);
|
|
122
|
+
}
|
|
123
|
+
}
|