@lodestar/state-transition 1.43.0-dev.bc569affb9 → 1.43.0-dev.c5efeb6c90

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.
Files changed (120) hide show
  1. package/lib/block/processConsolidationRequest.d.ts.map +1 -1
  2. package/lib/block/processConsolidationRequest.js +2 -1
  3. package/lib/block/processConsolidationRequest.js.map +1 -1
  4. package/lib/block/processDepositRequest.d.ts +3 -11
  5. package/lib/block/processDepositRequest.d.ts.map +1 -1
  6. package/lib/block/processDepositRequest.js +27 -35
  7. package/lib/block/processDepositRequest.js.map +1 -1
  8. package/lib/block/processParentExecutionPayload.d.ts +2 -2
  9. package/lib/block/processParentExecutionPayload.d.ts.map +1 -1
  10. package/lib/block/processParentExecutionPayload.js +7 -6
  11. package/lib/block/processParentExecutionPayload.js.map +1 -1
  12. package/lib/block/processWithdrawals.d.ts.map +1 -1
  13. package/lib/block/processWithdrawals.js +4 -6
  14. package/lib/block/processWithdrawals.js.map +1 -1
  15. package/lib/cache/epochCache.js +3 -3
  16. package/lib/cache/epochCache.js.map +1 -1
  17. package/lib/epoch/processPendingDeposits.d.ts.map +1 -1
  18. package/lib/epoch/processPendingDeposits.js +4 -2
  19. package/lib/epoch/processPendingDeposits.js.map +1 -1
  20. package/lib/lightClient/spec/index.d.ts +22 -0
  21. package/lib/lightClient/spec/index.d.ts.map +1 -0
  22. package/lib/lightClient/spec/index.js +58 -0
  23. package/lib/lightClient/spec/index.js.map +1 -0
  24. package/lib/lightClient/spec/isBetterUpdate.d.ts +23 -0
  25. package/lib/lightClient/spec/isBetterUpdate.d.ts.map +1 -0
  26. package/lib/lightClient/spec/isBetterUpdate.js +66 -0
  27. package/lib/lightClient/spec/isBetterUpdate.js.map +1 -0
  28. package/lib/lightClient/spec/processLightClientUpdate.d.ts +12 -0
  29. package/lib/lightClient/spec/processLightClientUpdate.d.ts.map +1 -0
  30. package/lib/lightClient/spec/processLightClientUpdate.js +80 -0
  31. package/lib/lightClient/spec/processLightClientUpdate.js.map +1 -0
  32. package/lib/lightClient/spec/store.d.ts +45 -0
  33. package/lib/lightClient/spec/store.d.ts.map +1 -0
  34. package/lib/lightClient/spec/store.js +56 -0
  35. package/lib/lightClient/spec/store.js.map +1 -0
  36. package/lib/lightClient/spec/utils.d.ts +47 -0
  37. package/lib/lightClient/spec/utils.d.ts.map +1 -0
  38. package/lib/lightClient/spec/utils.js +197 -0
  39. package/lib/lightClient/spec/utils.js.map +1 -0
  40. package/lib/lightClient/spec/validateLightClientBootstrap.d.ts +4 -0
  41. package/lib/lightClient/spec/validateLightClientBootstrap.d.ts.map +1 -0
  42. package/lib/lightClient/spec/validateLightClientBootstrap.js +22 -0
  43. package/lib/lightClient/spec/validateLightClientBootstrap.js.map +1 -0
  44. package/lib/lightClient/spec/validateLightClientUpdate.d.ts +5 -0
  45. package/lib/lightClient/spec/validateLightClientUpdate.d.ts.map +1 -0
  46. package/lib/lightClient/spec/validateLightClientUpdate.js +88 -0
  47. package/lib/lightClient/spec/validateLightClientUpdate.js.map +1 -0
  48. package/lib/signatureSets/index.d.ts +1 -0
  49. package/lib/signatureSets/index.d.ts.map +1 -1
  50. package/lib/signatureSets/index.js +1 -0
  51. package/lib/signatureSets/index.js.map +1 -1
  52. package/lib/signatureSets/proposerPreferences.d.ts +4 -0
  53. package/lib/signatureSets/proposerPreferences.d.ts.map +1 -0
  54. package/lib/signatureSets/proposerPreferences.js +8 -0
  55. package/lib/signatureSets/proposerPreferences.js.map +1 -0
  56. package/lib/slot/upgradeStateToElectra.d.ts.map +1 -1
  57. package/lib/slot/upgradeStateToElectra.js +2 -2
  58. package/lib/slot/upgradeStateToElectra.js.map +1 -1
  59. package/lib/slot/upgradeStateToGloas.d.ts.map +1 -1
  60. package/lib/slot/upgradeStateToGloas.js +33 -28
  61. package/lib/slot/upgradeStateToGloas.js.map +1 -1
  62. package/lib/stateView/beaconStateView.d.ts +14 -5
  63. package/lib/stateView/beaconStateView.d.ts.map +1 -1
  64. package/lib/stateView/beaconStateView.js +40 -11
  65. package/lib/stateView/beaconStateView.js.map +1 -1
  66. package/lib/stateView/interface.d.ts +7 -5
  67. package/lib/stateView/interface.d.ts.map +1 -1
  68. package/lib/stateView/interface.js.map +1 -1
  69. package/lib/util/epoch.d.ts.map +1 -1
  70. package/lib/util/epoch.js +6 -4
  71. package/lib/util/epoch.js.map +1 -1
  72. package/lib/util/gloas.d.ts +0 -1
  73. package/lib/util/gloas.d.ts.map +1 -1
  74. package/lib/util/gloas.js +0 -4
  75. package/lib/util/gloas.js.map +1 -1
  76. package/lib/util/index.d.ts +1 -0
  77. package/lib/util/index.d.ts.map +1 -1
  78. package/lib/util/index.js +1 -0
  79. package/lib/util/index.js.map +1 -1
  80. package/lib/util/loadState/loadState.js +4 -4
  81. package/lib/util/loadState/loadState.js.map +1 -1
  82. package/lib/util/pendingDepositsLookup.d.ts +40 -0
  83. package/lib/util/pendingDepositsLookup.d.ts.map +1 -0
  84. package/lib/util/pendingDepositsLookup.js +84 -0
  85. package/lib/util/pendingDepositsLookup.js.map +1 -0
  86. package/lib/util/shuffling.d.ts +6 -5
  87. package/lib/util/shuffling.d.ts.map +1 -1
  88. package/lib/util/shuffling.js +13 -15
  89. package/lib/util/shuffling.js.map +1 -1
  90. package/lib/util/validator.d.ts +14 -2
  91. package/lib/util/validator.d.ts.map +1 -1
  92. package/lib/util/validator.js +24 -2
  93. package/lib/util/validator.js.map +1 -1
  94. package/package.json +13 -8
  95. package/src/block/processConsolidationRequest.ts +2 -1
  96. package/src/block/processDepositRequest.ts +29 -47
  97. package/src/block/processParentExecutionPayload.ts +7 -6
  98. package/src/block/processWithdrawals.ts +6 -6
  99. package/src/cache/epochCache.ts +3 -3
  100. package/src/epoch/processPendingDeposits.ts +5 -2
  101. package/src/lightClient/spec/index.ts +101 -0
  102. package/src/lightClient/spec/isBetterUpdate.ts +94 -0
  103. package/src/lightClient/spec/processLightClientUpdate.ts +119 -0
  104. package/src/lightClient/spec/store.ts +106 -0
  105. package/src/lightClient/spec/utils.ts +317 -0
  106. package/src/lightClient/spec/validateLightClientBootstrap.ts +39 -0
  107. package/src/lightClient/spec/validateLightClientUpdate.ts +145 -0
  108. package/src/signatureSets/index.ts +1 -0
  109. package/src/signatureSets/proposerPreferences.ts +12 -0
  110. package/src/slot/upgradeStateToElectra.ts +4 -2
  111. package/src/slot/upgradeStateToGloas.ts +41 -44
  112. package/src/stateView/beaconStateView.ts +43 -12
  113. package/src/stateView/interface.ts +7 -5
  114. package/src/util/epoch.ts +13 -4
  115. package/src/util/gloas.ts +0 -5
  116. package/src/util/index.ts +1 -0
  117. package/src/util/loadState/loadState.ts +4 -4
  118. package/src/util/pendingDepositsLookup.ts +105 -0
  119. package/src/util/shuffling.ts +17 -15
  120. package/src/util/validator.ts +42 -2
@@ -0,0 +1,197 @@
1
+ import { PublicKey } from "@chainsafe/blst";
2
+ import { BLOCK_BODY_EXECUTION_PAYLOAD_DEPTH as EXECUTION_PAYLOAD_DEPTH, BLOCK_BODY_EXECUTION_PAYLOAD_INDEX as EXECUTION_PAYLOAD_INDEX, FINALIZED_ROOT_DEPTH, FINALIZED_ROOT_DEPTH_ELECTRA, ForkName, ForkSeq, NEXT_SYNC_COMMITTEE_DEPTH, NEXT_SYNC_COMMITTEE_DEPTH_ELECTRA, isForkPostElectra, } from "@lodestar/params";
3
+ import { isElectraLightClientUpdate, ssz, } from "@lodestar/types";
4
+ import { byteArrayEquals, verifyMerkleBranch } from "@lodestar/utils";
5
+ import { computeEpochAtSlot, computeSyncPeriodAtSlot } from "../../util/epoch.js";
6
+ export const GENESIS_SLOT = 0;
7
+ export const ZERO_HASH = new Uint8Array(32);
8
+ export const ZERO_PUBKEY = new Uint8Array(48);
9
+ export const ZERO_SYNC_COMMITTEE = ssz.altair.SyncCommittee.defaultValue();
10
+ export const ZERO_HEADER = ssz.phase0.BeaconBlockHeader.defaultValue();
11
+ /** From https://notes.ethereum.org/@vbuterin/extended_light_client_protocol#Optimistic-head-determining-function */
12
+ const SAFETY_THRESHOLD_FACTOR = 2;
13
+ export function sumBits(bits) {
14
+ return bits.getTrueBitIndexes().length;
15
+ }
16
+ /**
17
+ * Util to guarantee that all bits have a corresponding pubkey.
18
+ */
19
+ export function getParticipantPubkeys(pubkeys, bits) {
20
+ // BitArray.intersectValues() checks the length is correct.
21
+ return bits.intersectValues(pubkeys);
22
+ }
23
+ function deserializePubkeys(pubkeys) {
24
+ return pubkeys.map((pk) => PublicKey.fromBytes(pk, true));
25
+ }
26
+ function serializePubkeys(pubkeys) {
27
+ return pubkeys.map((pk) => pk.toBytes());
28
+ }
29
+ export function deserializeSyncCommittee(syncCommittee) {
30
+ return {
31
+ pubkeys: deserializePubkeys(syncCommittee.pubkeys),
32
+ aggregatePubkey: PublicKey.fromBytes(syncCommittee.aggregatePubkey, true),
33
+ };
34
+ }
35
+ export function serializeSyncCommittee(syncCommittee) {
36
+ return {
37
+ pubkeys: serializePubkeys(syncCommittee.pubkeys),
38
+ aggregatePubkey: syncCommittee.aggregatePubkey.toBytes(),
39
+ };
40
+ }
41
+ export function getSafetyThreshold(maxActiveParticipants) {
42
+ return Math.floor(maxActiveParticipants / SAFETY_THRESHOLD_FACTOR);
43
+ }
44
+ export function getZeroSyncCommitteeBranch(fork) {
45
+ const nextSyncCommitteeDepth = isForkPostElectra(fork)
46
+ ? NEXT_SYNC_COMMITTEE_DEPTH_ELECTRA
47
+ : NEXT_SYNC_COMMITTEE_DEPTH;
48
+ return Array.from({ length: nextSyncCommitteeDepth }, () => ZERO_HASH);
49
+ }
50
+ export function getZeroFinalityBranch(fork) {
51
+ const finalizedRootDepth = isForkPostElectra(fork) ? FINALIZED_ROOT_DEPTH_ELECTRA : FINALIZED_ROOT_DEPTH;
52
+ return Array.from({ length: finalizedRootDepth }, () => ZERO_HASH);
53
+ }
54
+ export function isSyncCommitteeUpdate(update) {
55
+ return (
56
+ // Fast return for when constructing full LightClientUpdate from partial updates
57
+ update.nextSyncCommitteeBranch !==
58
+ getZeroSyncCommitteeBranch(isElectraLightClientUpdate(update) ? ForkName.electra : ForkName.altair) &&
59
+ update.nextSyncCommitteeBranch.some((branch) => !byteArrayEquals(branch, ZERO_HASH)));
60
+ }
61
+ export function isFinalityUpdate(update) {
62
+ return (
63
+ // Fast return for when constructing full LightClientUpdate from partial updates
64
+ update.finalityBranch !==
65
+ getZeroFinalityBranch(isElectraLightClientUpdate(update) ? ForkName.electra : ForkName.altair) &&
66
+ update.finalityBranch.some((branch) => !byteArrayEquals(branch, ZERO_HASH)));
67
+ }
68
+ export function isZeroedHeader(header) {
69
+ // Fast return for when constructing full LightClientUpdate from partial updates
70
+ return header === ZERO_HEADER || byteArrayEquals(header.bodyRoot, ZERO_HASH);
71
+ }
72
+ export function isZeroedSyncCommittee(syncCommittee) {
73
+ // Fast return for when constructing full LightClientUpdate from partial updates
74
+ return syncCommittee === ZERO_SYNC_COMMITTEE || byteArrayEquals(syncCommittee.pubkeys[0], ZERO_PUBKEY);
75
+ }
76
+ export function isValidMerkleBranch(leaf, branch, depth, index, root) {
77
+ if (branch.length !== depth) {
78
+ return false;
79
+ }
80
+ return verifyMerkleBranch(leaf, branch, depth, index, root);
81
+ }
82
+ export function normalizeMerkleBranch(branch, depth) {
83
+ const numExtraDepth = depth - branch.length;
84
+ return [...Array.from({ length: numExtraDepth }, () => ZERO_HASH), ...branch];
85
+ }
86
+ export function upgradeLightClientHeader(config, targetFork, header) {
87
+ const headerFork = config.getForkName(header.beacon.slot);
88
+ if (ForkSeq[headerFork] >= ForkSeq[targetFork]) {
89
+ throw Error(`Invalid upgrade request from headerFork=${headerFork} to targetFork=${targetFork}`);
90
+ }
91
+ // We are modifying the same header object, may be we could create a copy, but its
92
+ // not required as of now
93
+ const upgradedHeader = header;
94
+ const startUpgradeFromFork = Object.values(ForkName)[ForkSeq[headerFork] + 1];
95
+ switch (startUpgradeFromFork) {
96
+ // biome-ignore lint/suspicious/useDefaultSwitchClauseLast: We want default to evaluate at first to throw error early
97
+ default:
98
+ throw Error(`Invalid startUpgradeFromFork=${startUpgradeFromFork} for headerFork=${headerFork} in upgradeLightClientHeader to targetFork=${targetFork}`);
99
+ case ForkName.altair:
100
+ // biome-ignore lint/suspicious/noFallthroughSwitchClause: We need fall-through behavior here
101
+ case ForkName.bellatrix:
102
+ // Break if no further upgradation is required else fall through
103
+ if (ForkSeq[targetFork] <= ForkSeq.bellatrix)
104
+ break;
105
+ // biome-ignore lint/suspicious/noFallthroughSwitchClause: We need fall-through behavior here
106
+ case ForkName.capella:
107
+ upgradedHeader.execution =
108
+ ssz.capella.LightClientHeader.fields.execution.defaultValue();
109
+ upgradedHeader.executionBranch =
110
+ ssz.capella.LightClientHeader.fields.executionBranch.defaultValue();
111
+ // Break if no further upgradation is required else fall through
112
+ if (ForkSeq[targetFork] <= ForkSeq.capella)
113
+ break;
114
+ // biome-ignore lint/suspicious/noFallthroughSwitchClause: We need fall-through behavior here
115
+ case ForkName.deneb:
116
+ upgradedHeader.execution.blobGasUsed =
117
+ ssz.deneb.LightClientHeader.fields.execution.fields.blobGasUsed.defaultValue();
118
+ upgradedHeader.execution.excessBlobGas =
119
+ ssz.deneb.LightClientHeader.fields.execution.fields.excessBlobGas.defaultValue();
120
+ // Break if no further upgradation is required else fall through
121
+ if (ForkSeq[targetFork] <= ForkSeq.deneb)
122
+ break;
123
+ // biome-ignore lint/suspicious/noFallthroughSwitchClause: We need fall-through behavior here
124
+ case ForkName.electra:
125
+ // No changes to LightClientHeader in Electra
126
+ // Break if no further upgrades is required else fall through
127
+ if (ForkSeq[targetFork] <= ForkSeq.electra)
128
+ break;
129
+ // biome-ignore lint/suspicious/noFallthroughSwitchClause: We need fall-through behavior here
130
+ case ForkName.fulu:
131
+ // No changes to LightClientHeader in Fulu
132
+ // Break if no further upgrades is required else fall through
133
+ if (ForkSeq[targetFork] <= ForkSeq.fulu)
134
+ break;
135
+ case ForkName.gloas:
136
+ // No changes to LightClientHeader in Gloas
137
+ // Break if no further upgrades is required else fall through
138
+ if (ForkSeq[targetFork] <= ForkSeq.gloas)
139
+ break;
140
+ }
141
+ return upgradedHeader;
142
+ }
143
+ export function isValidLightClientHeader(config, header) {
144
+ const epoch = computeEpochAtSlot(header.beacon.slot);
145
+ if (epoch < config.CAPELLA_FORK_EPOCH) {
146
+ return ((header.execution === undefined ||
147
+ ssz.capella.ExecutionPayloadHeader.equals(header.execution, ssz.capella.LightClientHeader.fields.execution.defaultValue())) &&
148
+ (header.executionBranch === undefined ||
149
+ ssz.capella.LightClientHeader.fields.executionBranch.equals(ssz.capella.LightClientHeader.fields.executionBranch.defaultValue(), header.executionBranch)));
150
+ }
151
+ if (epoch < config.DENEB_FORK_EPOCH &&
152
+ ((header.execution.blobGasUsed &&
153
+ header.execution.blobGasUsed !== BigInt(0)) ||
154
+ (header.execution.excessBlobGas &&
155
+ header.execution.excessBlobGas !== BigInt(0)))) {
156
+ return false;
157
+ }
158
+ return isValidMerkleBranch(config
159
+ .getPostBellatrixForkTypes(header.beacon.slot)
160
+ .ExecutionPayloadHeader.hashTreeRoot(header.execution), header.executionBranch, EXECUTION_PAYLOAD_DEPTH, EXECUTION_PAYLOAD_INDEX, header.beacon.bodyRoot);
161
+ }
162
+ export function upgradeLightClientUpdate(config, targetFork, update) {
163
+ update.attestedHeader = upgradeLightClientHeader(config, targetFork, update.attestedHeader);
164
+ update.finalizedHeader = upgradeLightClientHeader(config, targetFork, update.finalizedHeader);
165
+ update.nextSyncCommitteeBranch = normalizeMerkleBranch(update.nextSyncCommitteeBranch, isForkPostElectra(targetFork) ? NEXT_SYNC_COMMITTEE_DEPTH_ELECTRA : NEXT_SYNC_COMMITTEE_DEPTH);
166
+ update.finalityBranch = normalizeMerkleBranch(update.finalityBranch, isForkPostElectra(targetFork) ? FINALIZED_ROOT_DEPTH_ELECTRA : FINALIZED_ROOT_DEPTH);
167
+ return update;
168
+ }
169
+ export function upgradeLightClientFinalityUpdate(config, targetFork, finalityUpdate) {
170
+ finalityUpdate.attestedHeader = upgradeLightClientHeader(config, targetFork, finalityUpdate.attestedHeader);
171
+ finalityUpdate.finalizedHeader = upgradeLightClientHeader(config, targetFork, finalityUpdate.finalizedHeader);
172
+ finalityUpdate.finalityBranch = normalizeMerkleBranch(finalityUpdate.finalityBranch, isForkPostElectra(targetFork) ? FINALIZED_ROOT_DEPTH_ELECTRA : FINALIZED_ROOT_DEPTH);
173
+ return finalityUpdate;
174
+ }
175
+ export function upgradeLightClientOptimisticUpdate(config, targetFork, optimisticUpdate) {
176
+ optimisticUpdate.attestedHeader = upgradeLightClientHeader(config, targetFork, optimisticUpdate.attestedHeader);
177
+ return optimisticUpdate;
178
+ }
179
+ /**
180
+ * Currently this upgradation is not required because all processing is done based on the
181
+ * summary that the store generates and maintains. In case store needs to be saved to disk,
182
+ * this could be required depending on the format the store is saved to the disk
183
+ */
184
+ export function upgradeLightClientStore(config, targetFork, store, signatureSlot) {
185
+ const updateSignaturePeriod = computeSyncPeriodAtSlot(signatureSlot);
186
+ const bestValidUpdate = store.bestValidUpdates.get(updateSignaturePeriod);
187
+ if (bestValidUpdate) {
188
+ store.bestValidUpdates.set(updateSignaturePeriod, {
189
+ update: upgradeLightClientUpdate(config, targetFork, bestValidUpdate.update),
190
+ summary: bestValidUpdate.summary,
191
+ });
192
+ }
193
+ store.finalizedHeader = upgradeLightClientHeader(config, targetFork, store.finalizedHeader);
194
+ store.optimisticHeader = upgradeLightClientHeader(config, targetFork, store.optimisticHeader);
195
+ return store;
196
+ }
197
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lightClient/spec/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAG1C,OAAO,EACL,kCAAkC,IAAI,uBAAuB,EAC7D,kCAAkC,IAAI,uBAAuB,EAC7D,oBAAoB,EACpB,4BAA4B,EAC5B,QAAQ,EACR,OAAO,EACP,yBAAyB,EACzB,iCAAiC,EACjC,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAQL,0BAA0B,EAC1B,GAAG,GACJ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,eAAe,EAAE,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAC,kBAAkB,EAAE,uBAAuB,EAAC,MAAM,qBAAqB,CAAC;AAGhF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAC3E,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACvE,oHAAoH;AACpH,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAElC,MAAM,UAAU,OAAO,CAAC,IAAc,EAAU;IAC9C,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC;AAAA,CACxC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAI,OAAY,EAAE,IAAc,EAAO;IAC1E,2DAA2D;IAC3D,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAAA,CACtC;AAED,SAAS,kBAAkB,CAAC,OAAiC,EAAe;IAC1E,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AAAA,CAC3D;AAED,SAAS,gBAAgB,CAAC,OAAoB,EAA4B;IACxE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AAAA,CAC1C;AAED,MAAM,UAAU,wBAAwB,CAAC,aAA4B,EAAqB;IACxF,OAAO;QACL,OAAO,EAAE,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC;QAClD,eAAe,EAAE,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC;KAC1E,CAAC;AAAA,CACH;AAED,MAAM,UAAU,sBAAsB,CAAC,aAAgC,EAAiB;IACtF,OAAO;QACL,OAAO,EAAE,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC;QAChD,eAAe,EAAE,aAAa,CAAC,eAAe,CAAC,OAAO,EAAE;KACzD,CAAC;AAAA,CACH;AAED,MAAM,UAAU,kBAAkB,CAAC,qBAA6B,EAAU;IACxE,OAAO,IAAI,CAAC,KAAK,CAAC,qBAAqB,GAAG,uBAAuB,CAAC,CAAC;AAAA,CACpE;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAc,EAAgB;IACvE,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,IAAI,CAAC;QACpD,CAAC,CAAC,iCAAiC;QACnC,CAAC,CAAC,yBAAyB,CAAC;IAE9B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,sBAAsB,EAAC,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAAA,CACtE;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAc,EAAgB;IAClE,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,oBAAoB,CAAC;IAEzG,OAAO,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,kBAAkB,EAAC,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAAA,CAClE;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAyB,EAAW;IACxE,OAAO;IACL,gFAAgF;IAChF,MAAM,CAAC,uBAAuB;QAC5B,0BAA0B,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrG,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CACrF,CAAC;AAAA,CACH;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAyB,EAAW;IACnE,OAAO;IACL,gFAAgF;IAChF,MAAM,CAAC,cAAc;QACnB,qBAAqB,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAChG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAC5E,CAAC;AAAA,CACH;AAED,MAAM,UAAU,cAAc,CAAC,MAAyB,EAAW;IACjE,gFAAgF;IAChF,OAAO,MAAM,KAAK,WAAW,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAAA,CAC9E;AAED,MAAM,UAAU,qBAAqB,CAAC,aAA4B,EAAW;IAC3E,gFAAgF;IAChF,OAAO,aAAa,KAAK,mBAAmB,IAAI,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AAAA,CACxG;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAgB,EAChB,MAAoB,EACpB,KAAa,EACb,KAAa,EACb,IAAgB,EACP;IACT,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAAA,CAC7D;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAoB,EAAE,KAAa,EAAgB;IACvF,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAE5C,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,aAAa,EAAC,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;AAAA,CAC7E;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAuB,EACvB,UAAoB,EACpB,MAAyB,EACN;IACnB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,CAAC,2CAA2C,UAAU,kBAAkB,UAAU,EAAE,CAAC,CAAC;IACnG,CAAC;IAED,kFAAkF;IAClF,yBAAyB;IACzB,MAAM,cAAc,GAAG,MAAM,CAAC;IAC9B,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9E,QAAQ,oBAAoB,EAAE,CAAC;QAC7B,qHAAqH;QACrH;YACE,MAAM,KAAK,CACT,gCAAgC,oBAAoB,mBAAmB,UAAU,8CAA8C,UAAU,EAAE,CAC5I,CAAC;QAEJ,KAAK,QAAQ,CAAC,MAAM,CAAC;QACrB,6FAA6F;QAC7F,KAAK,QAAQ,CAAC,SAAS;YACrB,gEAAgE;YAChE,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,SAAS;gBAAE,MAAM;QAEtD,6FAA6F;QAC7F,KAAK,QAAQ,CAAC,OAAO;YAClB,cAAsD,CAAC,SAAS;gBAC/D,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YAC/D,cAAsD,CAAC,eAAe;gBACrE,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;YAEtE,gEAAgE;YAChE,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,OAAO;gBAAE,MAAM;QAEpD,6FAA6F;QAC7F,KAAK,QAAQ,CAAC,KAAK;YAChB,cAAoD,CAAC,SAAS,CAAC,WAAW;gBACzE,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;YAChF,cAAoD,CAAC,SAAS,CAAC,aAAa;gBAC3E,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;YAEnF,gEAAgE;YAChE,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,KAAK;gBAAE,MAAM;QAElD,6FAA6F;QAC7F,KAAK,QAAQ,CAAC,OAAO;YACnB,6CAA6C;YAE7C,6DAA6D;YAC7D,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,OAAO;gBAAE,MAAM;QAEpD,6FAA6F;QAC7F,KAAK,QAAQ,CAAC,IAAI;YAChB,0CAA0C;YAE1C,6DAA6D;YAC7D,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI;gBAAE,MAAM;QAEjD,KAAK,QAAQ,CAAC,KAAK;YACjB,2CAA2C;YAE3C,6DAA6D;YAC7D,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,KAAK;gBAAE,MAAM;IACpD,CAAC;IACD,OAAO,cAAc,CAAC;AAAA,CACvB;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAuB,EAAE,MAAyB,EAAW;IACpG,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAErD,IAAI,KAAK,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACtC,OAAO,CACL,CAAE,MAA8C,CAAC,SAAS,KAAK,SAAS;YACtE,GAAG,CAAC,OAAO,CAAC,sBAAsB,CAAC,MAAM,CACtC,MAA8C,CAAC,SAAS,EACzD,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,CAC9D,CAAC;YACJ,CAAE,MAA8C,CAAC,eAAe,KAAK,SAAS;gBAC5E,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CACzD,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,EAClE,MAA8C,CAAC,eAAe,CAChE,CAAC,CACL,CAAC;IACJ,CAAC;IAED,IACE,KAAK,GAAG,MAAM,CAAC,gBAAgB;QAC/B,CAAC,CAAE,MAA4C,CAAC,SAAS,CAAC,WAAW;YAClE,MAA4C,CAAC,SAAS,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;YAClF,CAAE,MAA4C,CAAC,SAAS,CAAC,aAAa;gBACnE,MAA4C,CAAC,SAAS,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EACzF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,mBAAmB,CACxB,MAAM;SACH,yBAAyB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;SAC7C,sBAAsB,CAAC,YAAY,CAAE,MAA8C,CAAC,SAAS,CAAC,EAChG,MAA8C,CAAC,eAAe,EAC/D,uBAAuB,EACvB,uBAAuB,EACvB,MAAM,CAAC,MAAM,CAAC,QAAQ,CACvB,CAAC;AAAA,CACH;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAuB,EACvB,UAAoB,EACpB,MAAyB,EACN;IACnB,MAAM,CAAC,cAAc,GAAG,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAC5F,MAAM,CAAC,eAAe,GAAG,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IAC9F,MAAM,CAAC,uBAAuB,GAAG,qBAAqB,CACpD,MAAM,CAAC,uBAAuB,EAC9B,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,yBAAyB,CAC9F,CAAC;IACF,MAAM,CAAC,cAAc,GAAG,qBAAqB,CAC3C,MAAM,CAAC,cAAc,EACrB,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,oBAAoB,CACpF,CAAC;IAEF,OAAO,MAAM,CAAC;AAAA,CACf;AAED,MAAM,UAAU,gCAAgC,CAC9C,MAAuB,EACvB,UAAoB,EACpB,cAAyC,EACd;IAC3B,cAAc,CAAC,cAAc,GAAG,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;IAC5G,cAAc,CAAC,eAAe,GAAG,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAC9G,cAAc,CAAC,cAAc,GAAG,qBAAqB,CACnD,cAAc,CAAC,cAAc,EAC7B,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,oBAAoB,CACpF,CAAC;IAEF,OAAO,cAAc,CAAC;AAAA,CACvB;AAED,MAAM,UAAU,kCAAkC,CAChD,MAAuB,EACvB,UAAoB,EACpB,gBAA6C,EAChB;IAC7B,gBAAgB,CAAC,cAAc,GAAG,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAEhH,OAAO,gBAAgB,CAAC;AAAA,CACzB;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAuB,EACvB,UAAoB,EACpB,KAAuB,EACvB,aAAmB,EACD;IAClB,MAAM,qBAAqB,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAE1E,IAAI,eAAe,EAAE,CAAC;QACpB,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,qBAAqB,EAAE;YAChD,MAAM,EAAE,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC;YAC5E,OAAO,EAAE,eAAe,CAAC,OAAO;SACjC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,GAAG,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IAC5F,KAAK,CAAC,gBAAgB,GAAG,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAE9F,OAAO,KAAK,CAAC;AAAA,CACd"}
@@ -0,0 +1,4 @@
1
+ import { ChainForkConfig } from "@lodestar/config";
2
+ import { LightClientBootstrap, Root } from "@lodestar/types";
3
+ export declare function validateLightClientBootstrap(config: ChainForkConfig, trustedBlockRoot: Root, bootstrap: LightClientBootstrap): void;
4
+ //# sourceMappingURL=validateLightClientBootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateLightClientBootstrap.d.ts","sourceRoot":"","sources":["../../../src/lightClient/spec/validateLightClientBootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAC,oBAAoB,EAAE,IAAI,EAAM,MAAM,iBAAiB,CAAC;AAShE,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,eAAe,EACvB,gBAAgB,EAAE,IAAI,EACtB,SAAS,EAAE,oBAAoB,GAC9B,IAAI,CAuBN"}
@@ -0,0 +1,22 @@
1
+ import { isForkPostElectra } from "@lodestar/params";
2
+ import { ssz } from "@lodestar/types";
3
+ import { byteArrayEquals, toHex } from "@lodestar/utils";
4
+ import { isValidLightClientHeader, isValidMerkleBranch } from "./utils.js";
5
+ const CURRENT_SYNC_COMMITTEE_INDEX = 22;
6
+ const CURRENT_SYNC_COMMITTEE_DEPTH = 5;
7
+ const CURRENT_SYNC_COMMITTEE_INDEX_ELECTRA = 22;
8
+ const CURRENT_SYNC_COMMITTEE_DEPTH_ELECTRA = 6;
9
+ export function validateLightClientBootstrap(config, trustedBlockRoot, bootstrap) {
10
+ const headerRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(bootstrap.header.beacon);
11
+ const fork = config.getForkName(bootstrap.header.beacon.slot);
12
+ if (!isValidLightClientHeader(config, bootstrap.header)) {
13
+ throw Error("Bootstrap Header is not Valid Light Client Header");
14
+ }
15
+ if (!byteArrayEquals(headerRoot, trustedBlockRoot)) {
16
+ throw Error(`bootstrap header root ${toHex(headerRoot)} != trusted root ${toHex(trustedBlockRoot)}`);
17
+ }
18
+ if (!isValidMerkleBranch(ssz.altair.SyncCommittee.hashTreeRoot(bootstrap.currentSyncCommittee), bootstrap.currentSyncCommitteeBranch, isForkPostElectra(fork) ? CURRENT_SYNC_COMMITTEE_DEPTH_ELECTRA : CURRENT_SYNC_COMMITTEE_DEPTH, isForkPostElectra(fork) ? CURRENT_SYNC_COMMITTEE_INDEX_ELECTRA : CURRENT_SYNC_COMMITTEE_INDEX, bootstrap.header.beacon.stateRoot)) {
19
+ throw Error("Invalid currentSyncCommittee merkle branch");
20
+ }
21
+ }
22
+ //# sourceMappingURL=validateLightClientBootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateLightClientBootstrap.js","sourceRoot":"","sources":["../../../src/lightClient/spec/validateLightClientBootstrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAA6B,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAC,eAAe,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAC,wBAAwB,EAAE,mBAAmB,EAAC,MAAM,YAAY,CAAC;AAEzE,MAAM,4BAA4B,GAAG,EAAE,CAAC;AACxC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AACvC,MAAM,oCAAoC,GAAG,EAAE,CAAC;AAChD,MAAM,oCAAoC,GAAG,CAAC,CAAC;AAE/C,MAAM,UAAU,4BAA4B,CAC1C,MAAuB,EACvB,gBAAsB,EACtB,SAA+B,EACzB;IACN,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtF,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE9D,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,CAAC,yBAAyB,KAAK,CAAC,UAAU,CAAC,oBAAoB,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;IAED,IACE,CAAC,mBAAmB,CAClB,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,CAAC,EACrE,SAAS,CAAC,0BAA0B,EACpC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,4BAA4B,EAC7F,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,4BAA4B,EAC7F,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAClC,EACD,CAAC;QACD,MAAM,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC5D,CAAC;AAAA,CACF"}
@@ -0,0 +1,5 @@
1
+ import { ChainForkConfig } from "@lodestar/config";
2
+ import { LightClientUpdate } from "@lodestar/types";
3
+ import type { ILightClientStore, SyncCommitteeFast } from "./store.js";
4
+ export declare function validateLightClientUpdate(config: ChainForkConfig, store: ILightClientStore, update: LightClientUpdate, syncCommittee: SyncCommitteeFast): void;
5
+ //# sourceMappingURL=validateLightClientUpdate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateLightClientUpdate.d.ts","sourceRoot":"","sources":["../../../src/lightClient/spec/validateLightClientUpdate.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAcjD,OAAO,EAAC,iBAAiB,EAAwC,MAAM,iBAAiB,CAAC;AACzF,OAAO,KAAK,EAAC,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAarE,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,iBAAiB,GAC/B,IAAI,CA0FN"}
@@ -0,0 +1,88 @@
1
+ import { Signature, fastAggregateVerify } from "@chainsafe/blst";
2
+ import { DOMAIN_SYNC_COMMITTEE, FINALIZED_ROOT_DEPTH, FINALIZED_ROOT_DEPTH_ELECTRA, FINALIZED_ROOT_INDEX, FINALIZED_ROOT_INDEX_ELECTRA, GENESIS_SLOT, MIN_SYNC_COMMITTEE_PARTICIPANTS, NEXT_SYNC_COMMITTEE_DEPTH, NEXT_SYNC_COMMITTEE_DEPTH_ELECTRA, NEXT_SYNC_COMMITTEE_INDEX, NEXT_SYNC_COMMITTEE_INDEX_ELECTRA, } from "@lodestar/params";
3
+ import { isElectraLightClientUpdate, ssz } from "@lodestar/types";
4
+ import { ZERO_HASH, getParticipantPubkeys, isFinalityUpdate, isSyncCommitteeUpdate, isValidLightClientHeader, isValidMerkleBranch, isZeroedHeader, isZeroedSyncCommittee, sumBits, } from "./utils.js";
5
+ export function validateLightClientUpdate(config, store, update, syncCommittee) {
6
+ // Verify sync committee has sufficient participants
7
+ if (sumBits(update.syncAggregate.syncCommitteeBits) < MIN_SYNC_COMMITTEE_PARTICIPANTS) {
8
+ throw Error("Sync committee has not sufficient participants");
9
+ }
10
+ if (!isValidLightClientHeader(config, update.attestedHeader)) {
11
+ throw Error("Attested Header is not Valid Light Client Header");
12
+ }
13
+ // Sanity check that slots are in correct order
14
+ if (update.signatureSlot <= update.attestedHeader.beacon.slot) {
15
+ throw Error(`signature slot ${update.signatureSlot} must be after attested header slot ${update.attestedHeader.beacon.slot}`);
16
+ }
17
+ if (update.attestedHeader.beacon.slot < update.finalizedHeader.beacon.slot) {
18
+ throw Error(`attested header slot ${update.signatureSlot} must be after finalized header slot ${update.finalizedHeader.beacon.slot}`);
19
+ }
20
+ // Verify that the `finality_branch`, if present, confirms `finalized_header`
21
+ // to match the finalized checkpoint root saved in the state of `attested_header`.
22
+ // Note that the genesis finalized checkpoint root is represented as a zero hash.
23
+ if (!isFinalityUpdate(update)) {
24
+ if (!isZeroedHeader(update.finalizedHeader.beacon)) {
25
+ throw Error("finalizedHeader must be zero for non-finality update");
26
+ }
27
+ }
28
+ else {
29
+ let finalizedRoot;
30
+ if (update.finalizedHeader.beacon.slot === GENESIS_SLOT) {
31
+ if (!isZeroedHeader(update.finalizedHeader.beacon)) {
32
+ throw Error("finalizedHeader must be zero for not finality update");
33
+ }
34
+ finalizedRoot = ZERO_HASH;
35
+ }
36
+ else {
37
+ if (!isValidLightClientHeader(config, update.finalizedHeader)) {
38
+ throw Error("Finalized Header is not valid Light Client Header");
39
+ }
40
+ finalizedRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(update.finalizedHeader.beacon);
41
+ }
42
+ if (!isValidMerkleBranch(finalizedRoot, update.finalityBranch, isElectraLightClientUpdate(update) ? FINALIZED_ROOT_DEPTH_ELECTRA : FINALIZED_ROOT_DEPTH, isElectraLightClientUpdate(update) ? FINALIZED_ROOT_INDEX_ELECTRA : FINALIZED_ROOT_INDEX, update.attestedHeader.beacon.stateRoot)) {
43
+ throw Error("Invalid finality header merkle branch");
44
+ }
45
+ }
46
+ // Verify that the `next_sync_committee`, if present, actually is the next sync committee saved in the
47
+ // state of the `attested_header`
48
+ if (!isSyncCommitteeUpdate(update)) {
49
+ if (!isZeroedSyncCommittee(update.nextSyncCommittee)) {
50
+ throw Error("nextSyncCommittee must be zero for non sync committee update");
51
+ }
52
+ }
53
+ else {
54
+ if (!isValidMerkleBranch(ssz.altair.SyncCommittee.hashTreeRoot(update.nextSyncCommittee), update.nextSyncCommitteeBranch, isElectraLightClientUpdate(update) ? NEXT_SYNC_COMMITTEE_DEPTH_ELECTRA : NEXT_SYNC_COMMITTEE_DEPTH, isElectraLightClientUpdate(update) ? NEXT_SYNC_COMMITTEE_INDEX_ELECTRA : NEXT_SYNC_COMMITTEE_INDEX, update.attestedHeader.beacon.stateRoot)) {
55
+ throw Error("Invalid next sync committee merkle branch");
56
+ }
57
+ }
58
+ // Verify sync committee aggregate signature
59
+ const participantPubkeys = getParticipantPubkeys(syncCommittee.pubkeys, update.syncAggregate.syncCommitteeBits);
60
+ const signingRoot = ssz.phase0.SigningData.hashTreeRoot({
61
+ objectRoot: ssz.phase0.BeaconBlockHeader.hashTreeRoot(update.attestedHeader.beacon),
62
+ domain: store.config.getDomain(update.signatureSlot - 1, DOMAIN_SYNC_COMMITTEE),
63
+ });
64
+ if (!isValidBlsAggregate(participantPubkeys, signingRoot, update.syncAggregate.syncCommitteeSignature)) {
65
+ throw Error("Invalid aggregate signature");
66
+ }
67
+ }
68
+ /**
69
+ * Same as BLS.verifyAggregate but with detailed error messages
70
+ */
71
+ function isValidBlsAggregate(publicKeys, message, signature) {
72
+ let sig;
73
+ try {
74
+ sig = Signature.fromBytes(signature, true);
75
+ }
76
+ catch (e) {
77
+ e.message = `Error deserializing signature: ${e.message}`;
78
+ throw e;
79
+ }
80
+ try {
81
+ return fastAggregateVerify(message, publicKeys, sig);
82
+ }
83
+ catch (e) {
84
+ e.message = `Error verifying signature: ${e.message}`;
85
+ throw e;
86
+ }
87
+ }
88
+ //# sourceMappingURL=validateLightClientUpdate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateLightClientUpdate.js","sourceRoot":"","sources":["../../../src/lightClient/spec/validateLightClientUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,EACpB,4BAA4B,EAC5B,YAAY,EACZ,+BAA+B,EAC/B,yBAAyB,EACzB,iCAAiC,EACjC,yBAAyB,EACzB,iCAAiC,GAClC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA0B,0BAA0B,EAAE,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAEzF,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,MAAM,UAAU,yBAAyB,CACvC,MAAuB,EACvB,KAAwB,EACxB,MAAyB,EACzB,aAAgC,EAC1B;IACN,oDAAoD;IACpD,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG,+BAA+B,EAAE,CAAC;QACtF,MAAM,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7D,MAAM,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IAED,+CAA+C;IAC/C,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,KAAK,CACT,kBAAkB,MAAM,CAAC,aAAa,uCAAuC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,CACjH,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3E,MAAM,KAAK,CACT,wBAAwB,MAAM,CAAC,aAAa,wCAAwC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,CACzH,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,kFAAkF;IAClF,iFAAiF;IACjF,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,MAAM,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,aAAmB,CAAC;QAExB,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACxD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnD,MAAM,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,CAAC;YACD,aAAa,GAAG,SAAS,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC9D,MAAM,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,CAAC;YAED,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3F,CAAC;QAED,IACE,CAAC,mBAAmB,CAClB,aAAa,EACb,MAAM,CAAC,cAAc,EACrB,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,oBAAoB,EACxF,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,oBAAoB,EACxF,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CACvC,EACD,CAAC;YACD,MAAM,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,sGAAsG;IACtG,iCAAiC;IACjC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACrD,MAAM,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IACE,CAAC,mBAAmB,CAClB,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAC/D,MAAM,CAAC,uBAAuB,EAC9B,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,yBAAyB,EAClG,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,yBAAyB,EAClG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CACvC,EACD,CAAC;YACD,MAAM,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,4CAA4C;IAE5C,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAEhH,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;QACtD,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACnF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,qBAAqB,CAAC;KAChF,CAAC,CAAC;IAEH,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACvG,MAAM,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;AAAA,CACF;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,UAAuB,EAAE,OAAmB,EAAE,SAAqB,EAAW;IACzG,IAAI,GAAc,CAAC;IACnB,IAAI,CAAC;QACH,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACV,CAAW,CAAC,OAAO,GAAG,kCAAmC,CAAW,CAAC,OAAO,EAAE,CAAC;QAChF,MAAM,CAAC,CAAC;IACV,CAAC;IAED,IAAI,CAAC;QACH,OAAO,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACV,CAAW,CAAC,OAAO,GAAG,8BAA+B,CAAW,CAAC,OAAO,EAAE,CAAC;QAC5E,MAAM,CAAC,CAAC;IACV,CAAC;AAAA,CACF"}
@@ -10,6 +10,7 @@ export * from "./executionPayloadEnvelope.js";
10
10
  export * from "./indexedAttestation.js";
11
11
  export * from "./indexedPayloadAttestation.js";
12
12
  export * from "./proposer.js";
13
+ export * from "./proposerPreferences.js";
13
14
  export * from "./proposerSlashings.js";
14
15
  export * from "./randao.js";
15
16
  export * from "./voluntaryExits.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signatureSets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,kBAAkB,EAAE,iBAAiB,EAAkB,MAAM,iBAAiB,CAAC;AAEvF,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAS/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,2BAA2B,EAAE,kBAAkB,EAC/C,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,iBAAiB,EAC9B,mBAAmB,EAAE,kBAAkB,EAAE,EACzC,IAAI,CAAC,EAAE;IACL,wFAAwF;IACxF,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,GACA,aAAa,EAAE,CAyCjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signatureSets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,kBAAkB,EAAE,iBAAiB,EAAkB,MAAM,iBAAiB,CAAC;AAEvF,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAS/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,2BAA2B,EAAE,kBAAkB,EAC/C,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,iBAAiB,EAC9B,mBAAmB,EAAE,kBAAkB,EAAE,EACzC,IAAI,CAAC,EAAE;IACL,wFAAwF;IACxF,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,GACA,aAAa,EAAE,CAyCjB"}
@@ -14,6 +14,7 @@ export * from "./executionPayloadEnvelope.js";
14
14
  export * from "./indexedAttestation.js";
15
15
  export * from "./indexedPayloadAttestation.js";
16
16
  export * from "./proposer.js";
17
+ export * from "./proposerPreferences.js";
17
18
  export * from "./proposerSlashings.js";
18
19
  export * from "./randao.js";
19
20
  export * from "./voluntaryExits.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signatureSets/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAC,4BAA4B,EAAC,MAAM,kCAAkC,CAAC;AAI9E,OAAO,EAAC,iCAAiC,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAC,oCAAoC,EAAC,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAC,4BAA4B,EAAC,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,iCAAiC,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAC,2BAA2B,EAAC,MAAM,aAAa,CAAC;AACxD,OAAO,EAAC,8BAA8B,EAAC,MAAM,qBAAqB,CAAC;AAEnE,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAoB,EACpB,2BAA+C,EAC/C,KAAuB,EACvB,WAA8B,EAC9B,mBAAyC,EACzC,IAGC,EACgB;IACjB,yBAAyB;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD,MAAM,aAAa,GAAG;QACpB,2BAA2B,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC;QACxD,GAAG,iCAAiC,CAAC,MAAM,EAAE,WAAW,CAAC;QACzD,GAAG,iCAAiC,CAAC,MAAM,EAAE,WAAW,CAAC;QACzD,GAAG,4BAA4B,CAAC,MAAM,EAAE,WAAW,EAAE,mBAAmB,CAAC;QACzE,GAAG,8BAA8B,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC;KAC9D,CAAC;IAEF,IAAI,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC;QACjC,aAAa,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,2DAA2D;IAC3D,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,yBAAyB,GAAG,4BAA4B,CAC5D,MAAM,EACN,2BAA2B,EAC1B,WAAwC,CAAC,OAAO,CAClD,CAAC;QACF,2FAA2F;QAC3F,IAAI,yBAAyB,EAAE,CAAC;YAC9B,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,iCAAiC,GAAG,oCAAoC,CAC5E,MAAM,EACN,WAAwC,CACzC,CAAC;QACF,IAAI,iCAAiC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,aAAa,CAAC,IAAI,CAAC,GAAG,iCAAiC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AAAA,CACtB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signatureSets/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAC,4BAA4B,EAAC,MAAM,kCAAkC,CAAC;AAI9E,OAAO,EAAC,iCAAiC,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAC,oCAAoC,EAAC,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAC,4BAA4B,EAAC,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,iCAAiC,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAC,2BAA2B,EAAC,MAAM,aAAa,CAAC;AACxD,OAAO,EAAC,8BAA8B,EAAC,MAAM,qBAAqB,CAAC;AAEnE,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAoB,EACpB,2BAA+C,EAC/C,KAAuB,EACvB,WAA8B,EAC9B,mBAAyC,EACzC,IAGC,EACgB;IACjB,yBAAyB;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD,MAAM,aAAa,GAAG;QACpB,2BAA2B,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC;QACxD,GAAG,iCAAiC,CAAC,MAAM,EAAE,WAAW,CAAC;QACzD,GAAG,iCAAiC,CAAC,MAAM,EAAE,WAAW,CAAC;QACzD,GAAG,4BAA4B,CAAC,MAAM,EAAE,WAAW,EAAE,mBAAmB,CAAC;QACzE,GAAG,8BAA8B,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC;KAC9D,CAAC;IAEF,IAAI,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC;QACjC,aAAa,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,2DAA2D;IAC3D,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,yBAAyB,GAAG,4BAA4B,CAC5D,MAAM,EACN,2BAA2B,EAC1B,WAAwC,CAAC,OAAO,CAClD,CAAC;QACF,2FAA2F;QAC3F,IAAI,yBAAyB,EAAE,CAAC;YAC9B,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,iCAAiC,GAAG,oCAAoC,CAC5E,MAAM,EACN,WAAwC,CACzC,CAAC;QACF,IAAI,iCAAiC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,aAAa,CAAC,IAAI,CAAC,GAAG,iCAAiC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AAAA,CACtB"}
@@ -0,0 +1,4 @@
1
+ import { BeaconConfig } from "@lodestar/config";
2
+ import { gloas } from "@lodestar/types";
3
+ export declare function getProposerPreferencesSigningRoot(config: BeaconConfig, preferences: gloas.ProposerPreferences): Uint8Array;
4
+ //# sourceMappingURL=proposerPreferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposerPreferences.d.ts","sourceRoot":"","sources":["../../src/signatureSets/proposerPreferences.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,KAAK,EAAM,MAAM,iBAAiB,CAAC;AAG3C,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,KAAK,CAAC,mBAAmB,GACrC,UAAU,CAGZ"}
@@ -0,0 +1,8 @@
1
+ import { DOMAIN_PROPOSER_PREFERENCES } from "@lodestar/params";
2
+ import { ssz } from "@lodestar/types";
3
+ import { computeSigningRoot } from "../util/index.js";
4
+ export function getProposerPreferencesSigningRoot(config, preferences) {
5
+ const domain = config.getDomain(preferences.proposalSlot, DOMAIN_PROPOSER_PREFERENCES);
6
+ return computeSigningRoot(ssz.gloas.ProposerPreferences, preferences, domain);
7
+ }
8
+ //# sourceMappingURL=proposerPreferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposerPreferences.js","sourceRoot":"","sources":["../../src/signatureSets/proposerPreferences.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,2BAA2B,EAAC,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAQ,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAEpD,MAAM,UAAU,iCAAiC,CAC/C,MAAoB,EACpB,WAAsC,EAC1B;IACZ,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,2BAA2B,CAAC,CAAC;IACvF,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAAA,CAC/E"}
@@ -1 +1 @@
1
- {"version":3,"file":"upgradeStateToElectra.d.ts","sourceRoot":"","sources":["../../src/slot/upgradeStateToElectra.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,wBAAwB,EAAuB,MAAM,wBAAwB,CAAC;AAEtF,OAAO,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAKnD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,sBAAsB,GAAG,wBAAwB,CAiHlG"}
1
+ {"version":3,"file":"upgradeStateToElectra.d.ts","sourceRoot":"","sources":["../../src/slot/upgradeStateToElectra.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,wBAAwB,EAAuB,MAAM,wBAAwB,CAAC;AAEtF,OAAO,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAKnD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,sBAAsB,GAAG,wBAAwB,CAmHlG"}
@@ -1,4 +1,4 @@
1
- import { FAR_FUTURE_EPOCH, GENESIS_SLOT, UNSET_DEPOSIT_REQUESTS_START_INDEX } from "@lodestar/params";
1
+ import { FAR_FUTURE_EPOCH, ForkSeq, GENESIS_SLOT, UNSET_DEPOSIT_REQUESTS_START_INDEX } from "@lodestar/params";
2
2
  import { ssz } from "@lodestar/types";
3
3
  import { getCachedBeaconState } from "../cache/stateCache.js";
4
4
  import { G2_POINT_AT_INFINITY } from "../constants/constants.js";
@@ -70,7 +70,7 @@ export function upgradeStateToElectra(stateDeneb) {
70
70
  stateElectraView.commit();
71
71
  const tmpElectraState = getCachedBeaconState(stateElectraView, stateDeneb);
72
72
  stateElectraView.exitBalanceToConsume = BigInt(getActivationExitChurnLimit(tmpElectraState.epochCtx));
73
- stateElectraView.consolidationBalanceToConsume = BigInt(getConsolidationChurnLimit(tmpElectraState.epochCtx));
73
+ stateElectraView.consolidationBalanceToConsume = BigInt(getConsolidationChurnLimit(ForkSeq.electra, tmpElectraState.epochCtx));
74
74
  preActivation.sort((i0, i1) => {
75
75
  const res = validatorsArr[i0].activationEligibilityEpoch - validatorsArr[i1].activationEligibilityEpoch;
76
76
  return res !== 0 ? res : i0 - i1;
@@ -1 +1 @@
1
- {"version":3,"file":"upgradeStateToElectra.js","sourceRoot":"","sources":["../../src/slot/upgradeStateToElectra.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upgradeStateToElectra.js","sourceRoot":"","sources":["../../src/slot/upgradeStateToElectra.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"upgradeStateToGloas.d.ts","sourceRoot":"","sources":["../../src/slot/upgradeStateToGloas.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,qBAAqB,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAI1E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,qBAAqB,GAAG,sBAAsB,CAuE5F"}
1
+ {"version":3,"file":"upgradeStateToGloas.d.ts","sourceRoot":"","sources":["../../src/slot/upgradeStateToGloas.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,qBAAqB,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAK1E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,qBAAqB,GAAG,sBAAsB,CAuE5F"}
@@ -1,11 +1,11 @@
1
1
  import { SLOTS_PER_HISTORICAL_ROOT } from "@lodestar/params";
2
2
  import { ssz } from "@lodestar/types";
3
- import { toHex } from "@lodestar/utils";
4
- import { isValidDepositSignature } from "../block/processDeposit.js";
3
+ import { toPubkeyHex } from "@lodestar/utils";
5
4
  import { applyDepositForBuilder } from "../block/processDepositRequest.js";
6
5
  import { getCachedBeaconState } from "../cache/stateCache.js";
7
6
  import { initializePtcWindow, isBuilderWithdrawalCredential } from "../util/gloas.js";
8
7
  import { isValidatorKnown } from "../util/index.js";
8
+ import { PendingDepositsLookup } from "../util/pendingDepositsLookup.js";
9
9
  /**
10
10
  * Upgrade a state from Fulu to Gloas.
11
11
  */
@@ -76,42 +76,47 @@ export function upgradeStateToGloas(stateFulu) {
76
76
  * Spec: https://github.com/ethereum/consensus-specs/blob/v1.7.0-alpha.2/specs/gloas/fork.md#new-onboard_builders_from_pending_deposits
77
77
  */
78
78
  function onboardBuildersFromPendingDeposits(state) {
79
- // Track pubkeys of new validators to keep their deposits pending
80
- const validatorPubkeys = new Set();
81
79
  // Track pubkeys of new builders added when applying deposits
82
80
  const builderPubkeys = new Set();
83
- const remainingPendingDeposits = ssz.electra.PendingDeposits.defaultViewDU();
81
+ const pendingDeposits = ssz.electra.PendingDeposits.defaultViewDU();
82
+ const pendingDepositsLookup = PendingDepositsLookup.buildEmpty();
84
83
  for (let i = 0; i < state.pendingDeposits.length; i++) {
85
84
  const deposit = state.pendingDeposits.getReadonly(i);
86
85
  const validatorIndex = state.epochCtx.getValidatorIndex(deposit.pubkey);
87
- const pubkeyHex = toHex(deposit.pubkey);
88
- // Deposits for existing validators stay in pending queue
89
- if (isValidatorKnown(state, validatorIndex) || validatorPubkeys.has(pubkeyHex)) {
90
- remainingPendingDeposits.push(deposit);
86
+ const pubkeyHex = toPubkeyHex(deposit.pubkey);
87
+ // Deposits for existing validators stay in the pending queue
88
+ if (isValidatorKnown(state, validatorIndex)) {
89
+ pendingDeposits.push(deposit);
90
+ pendingDepositsLookup.add(deposit, pubkeyHex);
91
91
  continue;
92
92
  }
93
- // If the pubkey is associated with a builder that was created in a previous iteration
94
- // or it is a builder deposit, try to apply the deposit to the new/existing builder
95
- const isExistingBuilder = builderPubkeys.has(pubkeyHex);
96
- const hasBuilderCredentials = isBuilderWithdrawalCredential(deposit.withdrawalCredentials);
97
- if (isExistingBuilder || hasBuilderCredentials) {
98
- const buildersLenBefore = state.builders.length;
99
- applyDepositForBuilder(state, deposit.pubkey, deposit.withdrawalCredentials, deposit.amount, deposit.signature, deposit.slot);
100
- // Track newly added builders for subsequent iterations
101
- if (!isExistingBuilder && state.builders.length > buildersLenBefore) {
102
- builderPubkeys.add(pubkeyHex);
93
+ // `applyDepositForBuilder` can mutate the state and add a builder to the registry, so
94
+ // the set of builder pubkeys must be recomputed each iteration. `builderPubkeys` stands
95
+ // in for the spec's `[b.pubkey for b in state.builders]`: `state.builders` starts empty
96
+ // at the fork, so every builder is one added in a previous iteration of this loop.
97
+ if (!builderPubkeys.has(pubkeyHex)) {
98
+ // Deposits for non-builders stay in the pending queue. If there is a valid pending
99
+ // deposit for a new validator with this pubkey, keep this deposit in the pending
100
+ // queue to be applied to that validator later.
101
+ if (!isBuilderWithdrawalCredential(deposit.withdrawalCredentials)) {
102
+ pendingDeposits.push(deposit);
103
+ pendingDepositsLookup.add(deposit, pubkeyHex);
104
+ continue;
105
+ }
106
+ if (pendingDepositsLookup.hasPendingValidator(state.config, pubkeyHex)) {
107
+ pendingDeposits.push(deposit);
108
+ pendingDepositsLookup.add(deposit, pubkeyHex);
109
+ continue;
103
110
  }
104
- continue;
105
111
  }
106
- // If there is a pending deposit for a new validator that has a valid signature, track the
107
- // pubkey so that subsequent builder deposits for the same pubkey stay in pending (applied to
108
- // the validator later) rather than creating a builder. Deposits with invalid signatures are
109
- // dropped here since they would fail in apply_pending_deposit anyway.
110
- if (isValidDepositSignature(state.config, deposit.pubkey, deposit.withdrawalCredentials, deposit.amount, deposit.signature)) {
111
- validatorPubkeys.add(pubkeyHex);
112
- remainingPendingDeposits.push(deposit);
112
+ const buildersLenBefore = state.builders.length;
113
+ // TODO GLOAS: handle 20k 1ETH deposits on time
114
+ // there is a note in the spec https://github.com/ethereum/consensus-specs/pull/5227
115
+ applyDepositForBuilder(state, deposit.pubkey, deposit.withdrawalCredentials, deposit.amount, deposit.signature, deposit.slot);
116
+ if (state.builders.length > buildersLenBefore) {
117
+ builderPubkeys.add(pubkeyHex);
113
118
  }
114
119
  }
115
- state.pendingDeposits = remainingPendingDeposits;
120
+ state.pendingDeposits = pendingDeposits;
116
121
  }
117
122
  //# sourceMappingURL=upgradeStateToGloas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upgradeStateToGloas.js","sourceRoot":"","sources":["../../src/slot/upgradeStateToGloas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upgradeStateToGloas.js","sourceRoot":"","sources":["../../src/slot/upgradeStateToGloas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACpC,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,sBAAsB,EAAC,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAC,mBAAmB,EAAE,6BAA6B,EAAC,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAC,qBAAqB,EAAC,MAAM,kCAAkC,CAAC;AAEvE;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAgC,EAA0B;IAC5F,MAAM,EAAC,MAAM,EAAC,GAAG,SAAS,CAAC;IAE3B,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,gBAAgB,GAAG,SAAS,CAAC;IAEnC,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;IAE7D,cAAc,CAAC,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC;IAC1D,cAAc,CAAC,qBAAqB,GAAG,gBAAgB,CAAC,qBAAqB,CAAC;IAC9E,cAAc,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC;IAC5C,cAAc,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC7C,eAAe,EAAE,SAAS,CAAC,IAAI,CAAC,cAAc;QAC9C,cAAc,EAAE,MAAM,CAAC,kBAAkB;QACzC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK;KAChC,CAAC,CAAC;IACH,cAAc,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,iBAAiB,CAAC;IACtE,cAAc,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC;IACxD,cAAc,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC;IACxD,cAAc,CAAC,eAAe,GAAG,gBAAgB,CAAC,eAAe,CAAC;IAClE,cAAc,CAAC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;IACpD,cAAc,CAAC,aAAa,GAAG,gBAAgB,CAAC,aAAa,CAAC;IAC9D,cAAc,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC;IACpE,cAAc,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC;IACxD,cAAc,CAAC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;IACpD,cAAc,CAAC,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC;IAC1D,cAAc,CAAC,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC;IACtD,cAAc,CAAC,0BAA0B,GAAG,gBAAgB,CAAC,0BAA0B,CAAC;IACxF,cAAc,CAAC,yBAAyB,GAAG,gBAAgB,CAAC,yBAAyB,CAAC;IACtF,cAAc,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,iBAAiB,CAAC;IACtE,cAAc,CAAC,2BAA2B,GAAG,gBAAgB,CAAC,2BAA2B,CAAC;IAC1F,cAAc,CAAC,0BAA0B,GAAG,gBAAgB,CAAC,0BAA0B,CAAC;IACxF,cAAc,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC;IAC1E,cAAc,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC;IACpE,cAAc,CAAC,oBAAoB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC;IAC5E,cAAc,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,iBAAiB,CAAC;IACtE,cAAc,CAAC,yBAAyB,CAAC,SAAS,GAAG,SAAS,CAAC,4BAA4B,CAAC,SAAS,CAAC;IACtG,cAAc,CAAC,yBAAyB,CAAC,qBAAqB,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,YAAY,CACzG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAC7C,CAAC;IACF,cAAc,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC;IAC1E,cAAc,CAAC,4BAA4B,GAAG,gBAAgB,CAAC,4BAA4B,CAAC;IAC5F,cAAc,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC;IAC1E,cAAc,CAAC,yBAAyB,GAAG,gBAAgB,CAAC,yBAAyB,CAAC;IACtF,cAAc,CAAC,uBAAuB,GAAG,gBAAgB,CAAC,uBAAuB,CAAC;IAClF,cAAc,CAAC,oBAAoB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC;IAC5E,cAAc,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,iBAAiB,CAAC;IACtE,cAAc,CAAC,6BAA6B,GAAG,gBAAgB,CAAC,6BAA6B,CAAC;IAC9F,cAAc,CAAC,0BAA0B,GAAG,gBAAgB,CAAC,0BAA0B,CAAC;IACxF,cAAc,CAAC,eAAe,GAAG,gBAAgB,CAAC,eAAe,CAAC;IAClE,cAAc,CAAC,yBAAyB,GAAG,gBAAgB,CAAC,yBAAyB,CAAC;IACtF,cAAc,CAAC,qBAAqB,GAAG,gBAAgB,CAAC,qBAAqB,CAAC;IAC9E,cAAc,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,iBAAiB,CAAC;IACtE,cAAc,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;IAExF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,yBAAyB,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,cAAc,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,cAAc,CAAC,eAAe,GAAG,SAAS,CAAC,4BAA4B,CAAC,SAAS,CAAC;IAElF,MAAM,UAAU,GAAG,oBAAoB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAEnE,wDAAwD;IACxD,kCAAkC,CAAC,UAAU,CAAC,CAAC;IAE/C,UAAU,CAAC,MAAM,EAAE,CAAC;IACpB,iFAAiF;IACjF,2EAA2E;IAC3E,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;IAE3B,OAAO,UAAU,CAAC;AAAA,CACnB;AAED;;;GAGG;AACH,SAAS,kCAAkC,CAAC,KAA6B,EAAQ;IAC/E,6DAA6D;IAC7D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;IACpE,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,UAAU,EAAE,CAAC;IAEjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAErD,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE9C,6DAA6D;QAC7D,IAAI,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;YAC5C,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QAED,sFAAsF;QACtF,wFAAwF;QACxF,wFAAwF;QACxF,mFAAmF;QACnF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,mFAAmF;YACnF,iFAAiF;YACjF,+CAA+C;YAC/C,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBAClE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9B,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAC9C,SAAS;YACX,CAAC;YACD,IAAI,qBAAqB,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;gBACvE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9B,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAC9C,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAChD,+CAA+C;QAC/C,oFAAoF;QACpF,sBAAsB,CACpB,KAAK,EACL,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,qBAAqB,EAC7B,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,IAAI,CACb,CAAC;QACF,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YAC9C,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;AAAA,CACzC"}