@lodestar/light-client 1.22.0 → 1.23.0-dev.06b4c2d324
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/README.md +3 -3
- package/lib/index.d.ts +3 -3
- package/lib/index.js +10 -12
- package/lib/index.js.map +1 -1
- package/lib/spec/index.js +3 -3
- package/lib/spec/index.js.map +1 -1
- package/lib/spec/isBetterUpdate.js +11 -11
- package/lib/spec/isBetterUpdate.js.map +1 -1
- package/lib/spec/processLightClientUpdate.d.ts +1 -1
- package/lib/spec/processLightClientUpdate.js.map +1 -1
- package/lib/spec/utils.d.ts +3 -3
- package/lib/spec/utils.js +20 -20
- package/lib/spec/utils.js.map +1 -1
- package/lib/spec/validateLightClientBootstrap.d.ts +1 -1
- package/lib/spec/validateLightClientBootstrap.js +5 -1
- package/lib/spec/validateLightClientBootstrap.js.map +1 -1
- package/lib/spec/validateLightClientUpdate.d.ts +1 -1
- package/lib/spec/validateLightClientUpdate.js +6 -6
- package/lib/spec/validateLightClientUpdate.js.map +1 -1
- package/lib/transport/interface.d.ts +1 -1
- package/lib/transport/rest.d.ts +1 -1
- package/lib/transport/rest.js +1 -1
- package/lib/transport/rest.js.map +1 -1
- package/lib/utils/api.d.ts +2 -2
- package/lib/utils/api.js +2 -2
- package/lib/utils/api.js.map +1 -1
- package/lib/utils/clock.js +1 -3
- package/lib/utils/clock.js.map +1 -1
- package/lib/utils/domain.d.ts +1 -1
- package/lib/utils/domain.js.map +1 -1
- package/lib/utils/normalizeMerkleBranch.d.ts +9 -0
- package/lib/utils/normalizeMerkleBranch.js +13 -0
- package/lib/utils/normalizeMerkleBranch.js.map +1 -0
- package/lib/utils/utils.d.ts +1 -1
- package/lib/utils/verifyMerkleBranch.js +1 -1
- package/lib/utils/verifyMerkleBranch.js.map +1 -1
- package/lib/validation.d.ts +1 -1
- package/lib/validation.js +6 -6
- package/lib/validation.js.map +1 -1
- package/package.json +11 -11
- package/dist/lightclient.min.mjs +0 -46
- package/dist/lightclient.min.mjs.map +0 -1
- package/dist/manifest.json +0 -8
package/README.md
CHANGED
|
@@ -62,7 +62,7 @@ import {
|
|
|
62
62
|
|
|
63
63
|
const config = getChainForkConfigFromNetwork("sepolia");
|
|
64
64
|
const logger = getConsoleLogger({logDebug: Boolean(process.env.DEBUG)});
|
|
65
|
-
const api = getApiFromUrl(
|
|
65
|
+
const api = getApiFromUrl("https://lodestar-sepolia.chainsafe.io", "sepolia");
|
|
66
66
|
|
|
67
67
|
const lightclient = await Lightclient.initializeFromCheckpointRoot({
|
|
68
68
|
config,
|
|
@@ -82,11 +82,11 @@ await lightclient.start();
|
|
|
82
82
|
logger.info("Lightclient synced");
|
|
83
83
|
|
|
84
84
|
lightclient.emitter.on(LightclientEvent.lightClientFinalityHeader, async (finalityUpdate) => {
|
|
85
|
-
logger.info(finalityUpdate);
|
|
85
|
+
logger.info("Received finality update", {slot: finalityUpdate.beacon.slot});
|
|
86
86
|
});
|
|
87
87
|
|
|
88
88
|
lightclient.emitter.on(LightclientEvent.lightClientOptimisticHeader, async (optimisticUpdate) => {
|
|
89
|
-
logger.info(optimisticUpdate);
|
|
89
|
+
logger.info("Received optimistic update", {slot: optimisticUpdate.beacon.slot});
|
|
90
90
|
});
|
|
91
91
|
```
|
|
92
92
|
|
package/lib/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { LightClientBootstrap, LightClientHeader, phase0, RootHex, SyncPeriod } from "@lodestar/types";
|
|
2
1
|
import { BeaconConfig, ChainForkConfig } from "@lodestar/config";
|
|
2
|
+
import { LightClientBootstrap, LightClientHeader, RootHex, SyncPeriod, phase0 } from "@lodestar/types";
|
|
3
3
|
import { LightclientEmitter } from "./events.js";
|
|
4
|
-
import { ILcLogger } from "./utils/logger.js";
|
|
5
4
|
import { ProcessUpdateOpts } from "./spec/processLightClientUpdate.js";
|
|
6
5
|
import { LightClientTransport } from "./transport/interface.js";
|
|
6
|
+
import { ILcLogger } from "./utils/logger.js";
|
|
7
7
|
export { LightclientEvent } from "./events.js";
|
|
8
8
|
export type { SyncCommitteeFast } from "./types.js";
|
|
9
9
|
export { upgradeLightClientFinalityUpdate, upgradeLightClientOptimisticUpdate } from "./spec/utils.js";
|
|
@@ -99,8 +99,8 @@ export declare class Lightclient {
|
|
|
99
99
|
private currentSlotWithTolerance;
|
|
100
100
|
private updateRunStatus;
|
|
101
101
|
}
|
|
102
|
+
import * as transport from "./transport.js";
|
|
102
103
|
import * as utils from "./utils.js";
|
|
103
104
|
import * as validation from "./validation.js";
|
|
104
|
-
import * as transport from "./transport.js";
|
|
105
105
|
export { utils, validation, transport };
|
|
106
106
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import mitt from "mitt";
|
|
2
|
-
import { fromHexString, toHexString } from "@chainsafe/ssz";
|
|
3
|
-
import { EPOCHS_PER_SYNC_COMMITTEE_PERIOD } from "@lodestar/params";
|
|
4
1
|
import { createBeaconConfig } from "@lodestar/config";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
2
|
+
import { EPOCHS_PER_SYNC_COMMITTEE_PERIOD } from "@lodestar/params";
|
|
3
|
+
import { fromHex, isErrorAborted, sleep, toRootHex } from "@lodestar/utils";
|
|
4
|
+
import mitt from "mitt";
|
|
8
5
|
import { LightclientEvent } from "./events.js";
|
|
9
|
-
import { getConsoleLogger } from "./utils/logger.js";
|
|
10
|
-
import { computeSyncPeriodAtEpoch, computeSyncPeriodAtSlot, computeEpochAtSlot } from "./utils/clock.js";
|
|
11
6
|
import { LightclientSpec } from "./spec/index.js";
|
|
12
7
|
import { validateLightClientBootstrap } from "./spec/validateLightClientBootstrap.js";
|
|
8
|
+
import { chunkifyInclusiveRange } from "./utils/chunkify.js";
|
|
9
|
+
import { getCurrentSlot, slotWithFutureTolerance, timeUntilNextEpoch } from "./utils/clock.js";
|
|
10
|
+
import { computeEpochAtSlot, computeSyncPeriodAtEpoch, computeSyncPeriodAtSlot } from "./utils/clock.js";
|
|
11
|
+
import { getConsoleLogger } from "./utils/logger.js";
|
|
13
12
|
// Re-export types
|
|
14
13
|
export { LightclientEvent } from "./events.js";
|
|
15
14
|
export { upgradeLightClientFinalityUpdate, upgradeLightClientOptimisticUpdate } from "./spec/utils.js";
|
|
@@ -72,7 +71,7 @@ export class Lightclient {
|
|
|
72
71
|
this.genesisTime = genesisData.genesisTime;
|
|
73
72
|
this.genesisValidatorsRoot =
|
|
74
73
|
typeof genesisData.genesisValidatorsRoot === "string"
|
|
75
|
-
?
|
|
74
|
+
? fromHex(genesisData.genesisValidatorsRoot)
|
|
76
75
|
: genesisData.genesisValidatorsRoot;
|
|
77
76
|
this.config = createBeaconConfig(config, this.genesisValidatorsRoot);
|
|
78
77
|
this.logger = logger ?? getConsoleLogger();
|
|
@@ -100,7 +99,7 @@ export class Lightclient {
|
|
|
100
99
|
static async initializeFromCheckpointRoot(args) {
|
|
101
100
|
const { transport, checkpointRoot } = args;
|
|
102
101
|
// Fetch bootstrap state with proof at the trusted block root
|
|
103
|
-
const { data: bootstrap } = await transport.getBootstrap(
|
|
102
|
+
const { data: bootstrap } = await transport.getBootstrap(toRootHex(checkpointRoot));
|
|
104
103
|
validateLightClientBootstrap(args.config, checkpointRoot, bootstrap);
|
|
105
104
|
return new Lightclient({ ...args, bootstrap });
|
|
106
105
|
}
|
|
@@ -150,7 +149,6 @@ export class Lightclient {
|
|
|
150
149
|
}
|
|
151
150
|
}
|
|
152
151
|
async runLoop() {
|
|
153
|
-
// eslint-disable-next-line no-constant-condition
|
|
154
152
|
while (true) {
|
|
155
153
|
const currentPeriod = computeSyncPeriodAtSlot(this.currentSlot);
|
|
156
154
|
// Check if we have a sync committee for the current clock period
|
|
@@ -243,9 +241,9 @@ export class Lightclient {
|
|
|
243
241
|
this.emitter.emit(LightclientEvent.statusChange, this.runStatus.code);
|
|
244
242
|
}
|
|
245
243
|
}
|
|
244
|
+
import * as transport from "./transport.js";
|
|
246
245
|
// To export these name spaces to the bundle JS
|
|
247
246
|
import * as utils from "./utils.js";
|
|
248
247
|
import * as validation from "./validation.js";
|
|
249
|
-
import * as transport from "./transport.js";
|
|
250
248
|
export { utils, validation, transport };
|
|
251
249
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/spec/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { UPDATE_TIMEOUT } from "@lodestar/params";
|
|
|
2
2
|
import { computeSyncPeriodAtSlot } from "../utils/index.js";
|
|
3
3
|
import { getSyncCommitteeAtPeriod, processLightClientUpdate } from "./processLightClientUpdate.js";
|
|
4
4
|
import { LightClientStore } from "./store.js";
|
|
5
|
-
import { ZERO_FINALITY_BRANCH, ZERO_HEADER,
|
|
5
|
+
import { ZERO_FINALITY_BRANCH, ZERO_HEADER, ZERO_SYNC_COMMITTEE, getZeroSyncCommitteeBranch } from "./utils.js";
|
|
6
6
|
export { isBetterUpdate, toLightClientUpdateSummary } from "./isBetterUpdate.js";
|
|
7
7
|
export { upgradeLightClientHeader } from "./utils.js";
|
|
8
8
|
export class LightclientSpec {
|
|
@@ -18,7 +18,7 @@ export class LightclientSpec {
|
|
|
18
18
|
this.onUpdate(currentSlot, {
|
|
19
19
|
attestedHeader: finalityUpdate.attestedHeader,
|
|
20
20
|
nextSyncCommittee: ZERO_SYNC_COMMITTEE,
|
|
21
|
-
nextSyncCommitteeBranch:
|
|
21
|
+
nextSyncCommitteeBranch: getZeroSyncCommitteeBranch(this.config.getForkName(finalityUpdate.signatureSlot)),
|
|
22
22
|
finalizedHeader: finalityUpdate.finalizedHeader,
|
|
23
23
|
finalityBranch: finalityUpdate.finalityBranch,
|
|
24
24
|
syncAggregate: finalityUpdate.syncAggregate,
|
|
@@ -29,7 +29,7 @@ export class LightclientSpec {
|
|
|
29
29
|
this.onUpdate(currentSlot, {
|
|
30
30
|
attestedHeader: optimisticUpdate.attestedHeader,
|
|
31
31
|
nextSyncCommittee: ZERO_SYNC_COMMITTEE,
|
|
32
|
-
nextSyncCommitteeBranch:
|
|
32
|
+
nextSyncCommitteeBranch: getZeroSyncCommitteeBranch(this.config.getForkName(optimisticUpdate.signatureSlot)),
|
|
33
33
|
finalizedHeader: { beacon: ZERO_HEADER },
|
|
34
34
|
finalityBranch: ZERO_FINALITY_BRANCH,
|
|
35
35
|
syncAggregate: optimisticUpdate.syncAggregate,
|
package/lib/spec/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/spec/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAQhD,OAAO,EAAC,uBAAuB,EAAC,MAAM,mBAAmB,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/spec/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAQhD,OAAO,EAAC,uBAAuB,EAAC,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAoB,wBAAwB,EAAE,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACpH,OAAO,EAAoB,gBAAgB,EAAyB,MAAM,YAAY,CAAC;AACvF,OAAO,EAAC,oBAAoB,EAAE,WAAW,EAAE,mBAAmB,EAAE,0BAA0B,EAAC,MAAM,YAAY,CAAC;AAE9G,OAAO,EAAC,cAAc,EAAE,0BAA0B,EAAC,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAC,wBAAwB,EAAC,MAAM,YAAY,CAAC;AAEpD,MAAM,OAAO,eAAe;IAI1B,YACE,MAAoB,EACH,IAAgD,EACjE,SAA+B;QADd,SAAI,GAAJ,IAAI,CAA4C;QAGjE,IAAI,CAAC,KAAK,GAAG,IAAI,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,QAAQ,CAAC,WAAiB,EAAE,MAAyB;QACnD,wBAAwB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpF,CAAC;IAED,gBAAgB,CAAC,WAAiB,EAAE,cAAyC;QAC3E,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YACzB,cAAc,EAAE,cAAc,CAAC,cAAc;YAC7C,iBAAiB,EAAE,mBAAmB;YACtC,uBAAuB,EAAE,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAC1G,eAAe,EAAE,cAAc,CAAC,eAAe;YAC/C,cAAc,EAAE,cAAc,CAAC,cAAc;YAC7C,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,aAAa,EAAE,cAAc,CAAC,aAAa;SAC5C,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,WAAiB,EAAE,gBAA6C;QACjF,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YACzB,cAAc,EAAE,gBAAgB,CAAC,cAAc;YAC/C,iBAAiB,EAAE,mBAAmB;YACtC,uBAAuB,EAAE,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;YAC5G,eAAe,EAAE,EAAC,MAAM,EAAE,WAAW,EAAC;YACtC,cAAc,EAAE,oBAAoB;YACpC,aAAa,EAAE,gBAAgB,CAAC,aAAa;YAC7C,aAAa,EAAE,gBAAgB,CAAC,aAAa;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,WAAiB;QAC3B,KAAK,MAAM,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;YACnE,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;gBACtF,MAAM,YAAY,GAAG,uBAAuB,CAAC,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBACnF,2FAA2F;gBAC3F,oJAAoJ;gBACpJ,0FAA0F;gBAC1F,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -12,40 +12,40 @@ export function isBetterUpdate(newUpdate, oldUpdate) {
|
|
|
12
12
|
const oldNumActiveParticipants = oldUpdate.activeParticipants;
|
|
13
13
|
const newHasSupermajority = newNumActiveParticipants * 3 >= SYNC_COMMITTEE_SIZE * 2;
|
|
14
14
|
const oldHasSupermajority = oldNumActiveParticipants * 3 >= SYNC_COMMITTEE_SIZE * 2;
|
|
15
|
-
if (newHasSupermajority
|
|
15
|
+
if (newHasSupermajority !== oldHasSupermajority) {
|
|
16
16
|
return newHasSupermajority;
|
|
17
17
|
}
|
|
18
|
-
if (!newHasSupermajority && newNumActiveParticipants
|
|
18
|
+
if (!newHasSupermajority && newNumActiveParticipants !== oldNumActiveParticipants) {
|
|
19
19
|
return newNumActiveParticipants > oldNumActiveParticipants;
|
|
20
20
|
}
|
|
21
21
|
// Compare presence of relevant sync committee
|
|
22
22
|
const newHasRelevantSyncCommittee = newUpdate.isSyncCommitteeUpdate &&
|
|
23
|
-
computeSyncPeriodAtSlot(newUpdate.attestedHeaderSlot)
|
|
23
|
+
computeSyncPeriodAtSlot(newUpdate.attestedHeaderSlot) === computeSyncPeriodAtSlot(newUpdate.signatureSlot);
|
|
24
24
|
const oldHasRelevantSyncCommittee = oldUpdate.isSyncCommitteeUpdate &&
|
|
25
|
-
computeSyncPeriodAtSlot(oldUpdate.attestedHeaderSlot)
|
|
26
|
-
if (newHasRelevantSyncCommittee
|
|
25
|
+
computeSyncPeriodAtSlot(oldUpdate.attestedHeaderSlot) === computeSyncPeriodAtSlot(oldUpdate.signatureSlot);
|
|
26
|
+
if (newHasRelevantSyncCommittee !== oldHasRelevantSyncCommittee) {
|
|
27
27
|
return newHasRelevantSyncCommittee;
|
|
28
28
|
}
|
|
29
29
|
// Compare indication of any finality
|
|
30
30
|
const newHasFinality = newUpdate.isFinalityUpdate;
|
|
31
31
|
const oldHasFinality = oldUpdate.isFinalityUpdate;
|
|
32
|
-
if (newHasFinality
|
|
32
|
+
if (newHasFinality !== oldHasFinality) {
|
|
33
33
|
return newHasFinality;
|
|
34
34
|
}
|
|
35
35
|
// Compare sync committee finality
|
|
36
36
|
if (newHasFinality) {
|
|
37
|
-
const newHasSyncCommitteeFinality = computeSyncPeriodAtSlot(newUpdate.finalizedHeaderSlot)
|
|
38
|
-
const oldHasSyncCommitteeFinality = computeSyncPeriodAtSlot(oldUpdate.finalizedHeaderSlot)
|
|
39
|
-
if (newHasSyncCommitteeFinality
|
|
37
|
+
const newHasSyncCommitteeFinality = computeSyncPeriodAtSlot(newUpdate.finalizedHeaderSlot) === computeSyncPeriodAtSlot(newUpdate.attestedHeaderSlot);
|
|
38
|
+
const oldHasSyncCommitteeFinality = computeSyncPeriodAtSlot(oldUpdate.finalizedHeaderSlot) === computeSyncPeriodAtSlot(oldUpdate.attestedHeaderSlot);
|
|
39
|
+
if (newHasSyncCommitteeFinality !== oldHasSyncCommitteeFinality) {
|
|
40
40
|
return newHasSyncCommitteeFinality;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
// Tiebreaker 1: Sync committee participation beyond supermajority
|
|
44
|
-
if (newNumActiveParticipants
|
|
44
|
+
if (newNumActiveParticipants !== oldNumActiveParticipants) {
|
|
45
45
|
return newNumActiveParticipants > oldNumActiveParticipants;
|
|
46
46
|
}
|
|
47
47
|
// Tiebreaker 2: Prefer older data (fewer changes to best)
|
|
48
|
-
if (newUpdate.attestedHeaderSlot
|
|
48
|
+
if (newUpdate.attestedHeaderSlot !== oldUpdate.attestedHeaderSlot) {
|
|
49
49
|
return newUpdate.attestedHeaderSlot < oldUpdate.attestedHeaderSlot;
|
|
50
50
|
}
|
|
51
51
|
return newUpdate.signatureSlot < oldUpdate.signatureSlot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isBetterUpdate.js","sourceRoot":"","sources":["../../src/spec/isBetterUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAC,uBAAuB,EAAC,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAC,gBAAgB,EAAE,qBAAqB,EAAE,OAAO,EAAC,MAAM,YAAY,CAAC;AAgB5E;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,SAAmC,EAAE,SAAmC;IACrG,6DAA6D;IAC7D,MAAM,wBAAwB,GAAG,SAAS,CAAC,kBAAkB,CAAC;IAC9D,MAAM,wBAAwB,GAAG,SAAS,CAAC,kBAAkB,CAAC;IAC9D,MAAM,mBAAmB,GAAG,wBAAwB,GAAG,CAAC,IAAI,mBAAmB,GAAG,CAAC,CAAC;IACpF,MAAM,mBAAmB,GAAG,wBAAwB,GAAG,CAAC,IAAI,mBAAmB,GAAG,CAAC,CAAC;IACpF,IAAI,mBAAmB,
|
|
1
|
+
{"version":3,"file":"isBetterUpdate.js","sourceRoot":"","sources":["../../src/spec/isBetterUpdate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { LightClientUpdate, Slot, SyncPeriod } from "@lodestar/types";
|
|
2
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
+
import { LightClientUpdate, Slot, SyncPeriod } from "@lodestar/types";
|
|
3
3
|
import { LightClientUpdateSummary } from "./isBetterUpdate.js";
|
|
4
4
|
import { ILightClientStore, SyncCommitteeFast } from "./store.js";
|
|
5
5
|
export interface ProcessUpdateOpts {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processLightClientUpdate.js","sourceRoot":"","sources":["../../src/spec/processLightClientUpdate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"processLightClientUpdate.js","sourceRoot":"","sources":["../../src/spec/processLightClientUpdate.ts"],"names":[],"mappings":"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"}
|
package/lib/spec/utils.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BitArray } from "@chainsafe/ssz";
|
|
2
|
-
import { ForkName } from "@lodestar/params";
|
|
3
|
-
import { Slot, LightClientFinalityUpdate, LightClientHeader, LightClientOptimisticUpdate, LightClientUpdate, BeaconBlockHeader, SyncCommittee } from "@lodestar/types";
|
|
4
2
|
import { ChainForkConfig } from "@lodestar/config";
|
|
3
|
+
import { ForkName } from "@lodestar/params";
|
|
4
|
+
import { BeaconBlockHeader, LightClientFinalityUpdate, LightClientHeader, LightClientOptimisticUpdate, LightClientUpdate, Slot, SyncCommittee } from "@lodestar/types";
|
|
5
5
|
import { LightClientStore } from "./store.js";
|
|
6
6
|
export declare const GENESIS_SLOT = 0;
|
|
7
7
|
export declare const ZERO_HASH: Uint8Array;
|
|
@@ -10,7 +10,6 @@ export declare const ZERO_SYNC_COMMITTEE: import("@chainsafe/ssz").ValueOfFields
|
|
|
10
10
|
pubkeys: import("@chainsafe/ssz").VectorCompositeType<import("@chainsafe/ssz").ByteVectorType>;
|
|
11
11
|
aggregatePubkey: import("@chainsafe/ssz").ByteVectorType;
|
|
12
12
|
}>;
|
|
13
|
-
export declare const ZERO_NEXT_SYNC_COMMITTEE_BRANCH: Uint8Array[];
|
|
14
13
|
export declare const ZERO_HEADER: import("@chainsafe/ssz").ValueOfFields<{
|
|
15
14
|
slot: import("@chainsafe/ssz").UintNumberType;
|
|
16
15
|
proposerIndex: import("@chainsafe/ssz").UintNumberType;
|
|
@@ -21,6 +20,7 @@ export declare const ZERO_HEADER: import("@chainsafe/ssz").ValueOfFields<{
|
|
|
21
20
|
export declare const ZERO_FINALITY_BRANCH: Uint8Array[];
|
|
22
21
|
export declare function sumBits(bits: BitArray): number;
|
|
23
22
|
export declare function getSafetyThreshold(maxActiveParticipants: number): number;
|
|
23
|
+
export declare function getZeroSyncCommitteeBranch(fork: ForkName): Uint8Array[];
|
|
24
24
|
export declare function isSyncCommitteeUpdate(update: LightClientUpdate): boolean;
|
|
25
25
|
export declare function isFinalityUpdate(update: LightClientUpdate): boolean;
|
|
26
26
|
export declare function isZeroedHeader(header: BeaconBlockHeader): boolean;
|
package/lib/spec/utils.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { byteArrayEquals } from "@chainsafe/ssz";
|
|
2
|
-
import {
|
|
3
|
-
import { ssz, } from "@lodestar/types";
|
|
4
|
-
import {
|
|
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 { computeEpochAtSlot, computeSyncPeriodAtSlot, isValidMerkleBranch } from "../utils/index.js";
|
|
5
|
+
import { normalizeMerkleBranch } from "../utils/normalizeMerkleBranch.js";
|
|
5
6
|
export const GENESIS_SLOT = 0;
|
|
6
7
|
export const ZERO_HASH = new Uint8Array(32);
|
|
7
8
|
export const ZERO_PUBKEY = new Uint8Array(48);
|
|
8
9
|
export const ZERO_SYNC_COMMITTEE = ssz.altair.SyncCommittee.defaultValue();
|
|
9
|
-
export const ZERO_NEXT_SYNC_COMMITTEE_BRANCH = Array.from({ length: NEXT_SYNC_COMMITTEE_DEPTH }, () => ZERO_HASH);
|
|
10
10
|
export const ZERO_HEADER = ssz.phase0.BeaconBlockHeader.defaultValue();
|
|
11
11
|
export const ZERO_FINALITY_BRANCH = Array.from({ length: FINALIZED_ROOT_DEPTH }, () => ZERO_HASH);
|
|
12
12
|
/** From https://notes.ethereum.org/@vbuterin/extended_light_client_protocol#Optimistic-head-determining-function */
|
|
@@ -17,10 +17,17 @@ export function sumBits(bits) {
|
|
|
17
17
|
export function getSafetyThreshold(maxActiveParticipants) {
|
|
18
18
|
return Math.floor(maxActiveParticipants / SAFETY_THRESHOLD_FACTOR);
|
|
19
19
|
}
|
|
20
|
+
export function getZeroSyncCommitteeBranch(fork) {
|
|
21
|
+
const nextSyncCommitteeDepth = isForkPostElectra(fork)
|
|
22
|
+
? NEXT_SYNC_COMMITTEE_DEPTH_ELECTRA
|
|
23
|
+
: NEXT_SYNC_COMMITTEE_DEPTH;
|
|
24
|
+
return Array.from({ length: nextSyncCommitteeDepth }, () => ZERO_HASH);
|
|
25
|
+
}
|
|
20
26
|
export function isSyncCommitteeUpdate(update) {
|
|
21
27
|
return (
|
|
22
28
|
// Fast return for when constructing full LightClientUpdate from partial updates
|
|
23
|
-
update.nextSyncCommitteeBranch !==
|
|
29
|
+
update.nextSyncCommitteeBranch !==
|
|
30
|
+
getZeroSyncCommitteeBranch(isElectraLightClientUpdate(update) ? ForkName.electra : ForkName.altair) &&
|
|
24
31
|
update.nextSyncCommitteeBranch.some((branch) => !byteArrayEquals(branch, ZERO_HASH)));
|
|
25
32
|
}
|
|
26
33
|
export function isFinalityUpdate(update) {
|
|
@@ -47,14 +54,16 @@ export function upgradeLightClientHeader(config, targetFork, header) {
|
|
|
47
54
|
const upgradedHeader = header;
|
|
48
55
|
const startUpgradeFromFork = Object.values(ForkName)[ForkSeq[headerFork] + 1];
|
|
49
56
|
switch (startUpgradeFromFork) {
|
|
57
|
+
// biome-ignore lint/suspicious/useDefaultSwitchClauseLast: We want default to evaluate at first to throw error early
|
|
50
58
|
default:
|
|
51
59
|
throw Error(`Invalid startUpgradeFromFork=${startUpgradeFromFork} for headerFork=${headerFork} in upgradeLightClientHeader to targetFork=${targetFork}`);
|
|
52
60
|
case ForkName.altair:
|
|
61
|
+
// biome-ignore lint/suspicious/noFallthroughSwitchClause: We need fall-through behavior here
|
|
53
62
|
case ForkName.bellatrix:
|
|
54
63
|
// Break if no further upgradation is required else fall through
|
|
55
64
|
if (ForkSeq[targetFork] <= ForkSeq.bellatrix)
|
|
56
65
|
break;
|
|
57
|
-
//
|
|
66
|
+
// biome-ignore lint/suspicious/noFallthroughSwitchClause: We need fall-through behavior here
|
|
58
67
|
case ForkName.capella:
|
|
59
68
|
upgradedHeader.execution =
|
|
60
69
|
ssz.capella.LightClientHeader.fields.execution.defaultValue();
|
|
@@ -63,7 +72,7 @@ export function upgradeLightClientHeader(config, targetFork, header) {
|
|
|
63
72
|
// Break if no further upgradation is required else fall through
|
|
64
73
|
if (ForkSeq[targetFork] <= ForkSeq.capella)
|
|
65
74
|
break;
|
|
66
|
-
//
|
|
75
|
+
// biome-ignore lint/suspicious/noFallthroughSwitchClause: We need fall-through behavior here
|
|
67
76
|
case ForkName.deneb:
|
|
68
77
|
upgradedHeader.execution.blobGasUsed =
|
|
69
78
|
ssz.deneb.LightClientHeader.fields.execution.fields.blobGasUsed.defaultValue();
|
|
@@ -72,14 +81,8 @@ export function upgradeLightClientHeader(config, targetFork, header) {
|
|
|
72
81
|
// Break if no further upgradation is required else fall through
|
|
73
82
|
if (ForkSeq[targetFork] <= ForkSeq.deneb)
|
|
74
83
|
break;
|
|
75
|
-
// eslint-disable-next-line no-fallthrough
|
|
76
84
|
case ForkName.electra:
|
|
77
|
-
|
|
78
|
-
ssz.electra.LightClientHeader.fields.execution.fields.depositRequestsRoot.defaultValue();
|
|
79
|
-
upgradedHeader.execution.withdrawalRequestsRoot =
|
|
80
|
-
ssz.electra.LightClientHeader.fields.execution.fields.withdrawalRequestsRoot.defaultValue();
|
|
81
|
-
upgradedHeader.execution.consolidationRequestsRoot =
|
|
82
|
-
ssz.electra.LightClientHeader.fields.execution.fields.consolidationRequestsRoot.defaultValue();
|
|
85
|
+
// No changes to LightClientHeader in Electra
|
|
83
86
|
// Break if no further upgrades is required else fall through
|
|
84
87
|
if (ForkSeq[targetFork] <= ForkSeq.electra)
|
|
85
88
|
break;
|
|
@@ -102,12 +105,6 @@ export function isValidLightClientHeader(config, header) {
|
|
|
102
105
|
return false;
|
|
103
106
|
}
|
|
104
107
|
}
|
|
105
|
-
if (epoch < config.ELECTRA_FORK_EPOCH) {
|
|
106
|
-
if (header.execution.depositRequestsRoot !== undefined ||
|
|
107
|
-
header.execution.withdrawalRequestsRoot !== undefined) {
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
108
|
return isValidMerkleBranch(config
|
|
112
109
|
.getExecutionForkTypes(header.beacon.slot)
|
|
113
110
|
.ExecutionPayloadHeader.hashTreeRoot(header.execution), header.executionBranch, EXECUTION_PAYLOAD_DEPTH, EXECUTION_PAYLOAD_INDEX, header.beacon.bodyRoot);
|
|
@@ -115,11 +112,14 @@ export function isValidLightClientHeader(config, header) {
|
|
|
115
112
|
export function upgradeLightClientUpdate(config, targetFork, update) {
|
|
116
113
|
update.attestedHeader = upgradeLightClientHeader(config, targetFork, update.attestedHeader);
|
|
117
114
|
update.finalizedHeader = upgradeLightClientHeader(config, targetFork, update.finalizedHeader);
|
|
115
|
+
update.nextSyncCommitteeBranch = normalizeMerkleBranch(update.nextSyncCommitteeBranch, isForkPostElectra(targetFork) ? NEXT_SYNC_COMMITTEE_DEPTH_ELECTRA : NEXT_SYNC_COMMITTEE_DEPTH);
|
|
116
|
+
update.finalityBranch = normalizeMerkleBranch(update.finalityBranch, isForkPostElectra(targetFork) ? FINALIZED_ROOT_DEPTH_ELECTRA : FINALIZED_ROOT_DEPTH);
|
|
118
117
|
return update;
|
|
119
118
|
}
|
|
120
119
|
export function upgradeLightClientFinalityUpdate(config, targetFork, finalityUpdate) {
|
|
121
120
|
finalityUpdate.attestedHeader = upgradeLightClientHeader(config, targetFork, finalityUpdate.attestedHeader);
|
|
122
121
|
finalityUpdate.finalizedHeader = upgradeLightClientHeader(config, targetFork, finalityUpdate.finalizedHeader);
|
|
122
|
+
finalityUpdate.finalityBranch = normalizeMerkleBranch(finalityUpdate.finalityBranch, isForkPostElectra(targetFork) ? FINALIZED_ROOT_DEPTH_ELECTRA : FINALIZED_ROOT_DEPTH);
|
|
123
123
|
return finalityUpdate;
|
|
124
124
|
}
|
|
125
125
|
export function upgradeLightClientOptimisticUpdate(config, targetFork, optimisticUpdate) {
|
package/lib/spec/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/spec/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,eAAe,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/spec/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LightClientBootstrap, Root } from "@lodestar/types";
|
|
2
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
+
import { LightClientBootstrap, Root } from "@lodestar/types";
|
|
3
3
|
export declare function validateLightClientBootstrap(config: ChainForkConfig, trustedBlockRoot: Root, bootstrap: LightClientBootstrap): void;
|
|
4
4
|
//# sourceMappingURL=validateLightClientBootstrap.d.ts.map
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import { byteArrayEquals } from "@chainsafe/ssz";
|
|
2
|
+
import { isForkPostElectra } from "@lodestar/params";
|
|
2
3
|
import { ssz } from "@lodestar/types";
|
|
3
4
|
import { toHex } from "@lodestar/utils";
|
|
4
5
|
import { isValidMerkleBranch } from "../utils/verifyMerkleBranch.js";
|
|
5
6
|
import { isValidLightClientHeader } from "./utils.js";
|
|
6
7
|
const CURRENT_SYNC_COMMITTEE_INDEX = 22;
|
|
7
8
|
const CURRENT_SYNC_COMMITTEE_DEPTH = 5;
|
|
9
|
+
const CURRENT_SYNC_COMMITTEE_INDEX_ELECTRA = 22;
|
|
10
|
+
const CURRENT_SYNC_COMMITTEE_DEPTH_ELECTRA = 6;
|
|
8
11
|
export function validateLightClientBootstrap(config, trustedBlockRoot, bootstrap) {
|
|
9
12
|
const headerRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(bootstrap.header.beacon);
|
|
13
|
+
const fork = config.getForkName(bootstrap.header.beacon.slot);
|
|
10
14
|
if (!isValidLightClientHeader(config, bootstrap.header)) {
|
|
11
15
|
throw Error("Bootstrap Header is not Valid Light Client Header");
|
|
12
16
|
}
|
|
13
17
|
if (!byteArrayEquals(headerRoot, trustedBlockRoot)) {
|
|
14
18
|
throw Error(`bootstrap header root ${toHex(headerRoot)} != trusted root ${toHex(trustedBlockRoot)}`);
|
|
15
19
|
}
|
|
16
|
-
if (!isValidMerkleBranch(ssz.altair.SyncCommittee.hashTreeRoot(bootstrap.currentSyncCommittee), bootstrap.currentSyncCommitteeBranch, CURRENT_SYNC_COMMITTEE_DEPTH, CURRENT_SYNC_COMMITTEE_INDEX, bootstrap.header.beacon.stateRoot)) {
|
|
20
|
+
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)) {
|
|
17
21
|
throw Error("Invalid currentSyncCommittee merkle branch");
|
|
18
22
|
}
|
|
19
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateLightClientBootstrap.js","sourceRoot":"","sources":["../../src/spec/validateLightClientBootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"validateLightClientBootstrap.js","sourceRoot":"","sources":["../../src/spec/validateLightClientBootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAA6B,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,mBAAmB,EAAC,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAC,wBAAwB,EAAC,MAAM,YAAY,CAAC;AAEpD,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;IAE/B,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;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { LightClientUpdate } from "@lodestar/types";
|
|
2
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
+
import { LightClientUpdate } from "@lodestar/types";
|
|
3
3
|
import { SyncCommitteeFast } from "../types.js";
|
|
4
4
|
import { ILightClientStore } from "./store.js";
|
|
5
5
|
export declare function validateLightClientUpdate(config: ChainForkConfig, store: ILightClientStore, update: LightClientUpdate, syncCommittee: SyncCommitteeFast): void;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import bls from "@chainsafe/bls";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { getParticipantPubkeys, sumBits } from "../utils/utils.js";
|
|
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";
|
|
5
4
|
import { isValidMerkleBranch } from "../utils/index.js";
|
|
6
|
-
import {
|
|
5
|
+
import { getParticipantPubkeys, sumBits } from "../utils/utils.js";
|
|
6
|
+
import { ZERO_HASH, isFinalityUpdate, isSyncCommitteeUpdate, isValidLightClientHeader, isZeroedHeader, isZeroedSyncCommittee, } from "./utils.js";
|
|
7
7
|
export function validateLightClientUpdate(config, store, update, syncCommittee) {
|
|
8
8
|
// Verify sync committee has sufficient participants
|
|
9
9
|
if (sumBits(update.syncAggregate.syncCommitteeBits) < MIN_SYNC_COMMITTEE_PARTICIPANTS) {
|
|
@@ -41,7 +41,7 @@ export function validateLightClientUpdate(config, store, update, syncCommittee)
|
|
|
41
41
|
}
|
|
42
42
|
finalizedRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(update.finalizedHeader.beacon);
|
|
43
43
|
}
|
|
44
|
-
if (!isValidMerkleBranch(finalizedRoot, update.finalityBranch, FINALIZED_ROOT_DEPTH, FINALIZED_ROOT_INDEX, update.attestedHeader.beacon.stateRoot)) {
|
|
44
|
+
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)) {
|
|
45
45
|
throw Error("Invalid finality header merkle branch");
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -53,7 +53,7 @@ export function validateLightClientUpdate(config, store, update, syncCommittee)
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
else {
|
|
56
|
-
if (!isValidMerkleBranch(ssz.altair.SyncCommittee.hashTreeRoot(update.nextSyncCommittee), update.nextSyncCommitteeBranch, NEXT_SYNC_COMMITTEE_DEPTH, NEXT_SYNC_COMMITTEE_INDEX, update.attestedHeader.beacon.stateRoot)) {
|
|
56
|
+
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)) {
|
|
57
57
|
throw Error("Invalid next sync committee merkle branch");
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateLightClientUpdate.js","sourceRoot":"","sources":["../../src/spec/validateLightClientUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"validateLightClientUpdate.js","sourceRoot":"","sources":["../../src/spec/validateLightClientUpdate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { LightClientBootstrap, LightClientFinalityUpdate, LightClientOptimisticUpdate, LightClientUpdate, SyncPeriod } from "@lodestar/types";
|
|
2
1
|
import { ForkName } from "@lodestar/params";
|
|
2
|
+
import { LightClientBootstrap, LightClientFinalityUpdate, LightClientOptimisticUpdate, LightClientUpdate, SyncPeriod } from "@lodestar/types";
|
|
3
3
|
export interface LightClientTransport {
|
|
4
4
|
getUpdates(startPeriod: SyncPeriod, count: number): Promise<{
|
|
5
5
|
version: ForkName;
|
package/lib/transport/rest.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { LightClientBootstrap, LightClientFinalityUpdate, LightClientOptimisticUpdate, LightClientUpdate, type SyncPeriod } from "@lodestar/types";
|
|
2
1
|
import { type ApiClient, routes } from "@lodestar/api";
|
|
3
2
|
import { type ForkName } from "@lodestar/params";
|
|
3
|
+
import { LightClientBootstrap, LightClientFinalityUpdate, LightClientOptimisticUpdate, LightClientUpdate, type SyncPeriod } from "@lodestar/types";
|
|
4
4
|
import { MittEmitter } from "../events.js";
|
|
5
5
|
import { type LightClientTransport } from "./interface.js";
|
|
6
6
|
export type LightClientRestEvents = {
|
package/lib/transport/rest.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../../src/transport/rest.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../../src/transport/rest.ts"],"names":[],"mappings":"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"}
|