@lodestar/light-client 1.23.0-dev.bb40ef7eb7 → 1.23.0-dev.fd6e23edab
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/spec/index.js +3 -3
- package/lib/spec/index.js.map +1 -1
- package/lib/spec/utils.d.ts +1 -1
- package/lib/spec/utils.js +5 -16
- package/lib/spec/utils.js.map +1 -1
- package/lib/spec/validateLightClientBootstrap.js +1 -5
- package/lib/spec/validateLightClientBootstrap.js.map +1 -1
- package/lib/spec/validateLightClientUpdate.js +4 -4
- package/lib/spec/validateLightClientUpdate.js.map +1 -1
- package/lib/validation.js +4 -4
- package/lib/validation.js.map +1 -1
- package/package.json +7 -7
- package/lib/utils/normalizeMerkleBranch.d.ts +0 -9
- package/lib/utils/normalizeMerkleBranch.js +0 -13
- package/lib/utils/normalizeMerkleBranch.js.map +0 -1
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_NEXT_SYNC_COMMITTEE_BRANCH, ZERO_SYNC_COMMITTEE } 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: ZERO_NEXT_SYNC_COMMITTEE_BRANCH,
|
|
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: ZERO_NEXT_SYNC_COMMITTEE_BRANCH,
|
|
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,EAAC,wBAAwB,EAAE,wBAAwB,EAAoB,MAAM,+BAA+B,CAAC;AACpH,OAAO,EAAoB,gBAAgB,EAAyB,MAAM,YAAY,CAAC;AACvF,OAAO,EAAC,oBAAoB,EAAE,WAAW,EAAE,
|
|
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,EAAC,wBAAwB,EAAE,wBAAwB,EAAoB,MAAM,+BAA+B,CAAC;AACpH,OAAO,EAAoB,gBAAgB,EAAyB,MAAM,YAAY,CAAC;AACvF,OAAO,EAAC,oBAAoB,EAAE,WAAW,EAAE,+BAA+B,EAAE,mBAAmB,EAAC,MAAM,YAAY,CAAC;AAEnH,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,+BAA+B;YACxD,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,+BAA+B;YACxD,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"}
|
package/lib/spec/utils.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ 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[];
|
|
13
14
|
export declare const ZERO_HEADER: import("@chainsafe/ssz").ValueOfFields<{
|
|
14
15
|
slot: import("@chainsafe/ssz").UintNumberType;
|
|
15
16
|
proposerIndex: import("@chainsafe/ssz").UintNumberType;
|
|
@@ -20,7 +21,6 @@ export declare const ZERO_HEADER: import("@chainsafe/ssz").ValueOfFields<{
|
|
|
20
21
|
export declare const ZERO_FINALITY_BRANCH: Uint8Array[];
|
|
21
22
|
export declare function sumBits(bits: BitArray): number;
|
|
22
23
|
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 { FINALIZED_ROOT_DEPTH, NEXT_SYNC_COMMITTEE_DEPTH, ForkSeq, ForkName, BLOCK_BODY_EXECUTION_PAYLOAD_DEPTH as EXECUTION_PAYLOAD_DEPTH, BLOCK_BODY_EXECUTION_PAYLOAD_INDEX as EXECUTION_PAYLOAD_INDEX,
|
|
3
|
-
import { ssz,
|
|
2
|
+
import { FINALIZED_ROOT_DEPTH, NEXT_SYNC_COMMITTEE_DEPTH, ForkSeq, ForkName, BLOCK_BODY_EXECUTION_PAYLOAD_DEPTH as EXECUTION_PAYLOAD_DEPTH, BLOCK_BODY_EXECUTION_PAYLOAD_INDEX as EXECUTION_PAYLOAD_INDEX, } from "@lodestar/params";
|
|
3
|
+
import { ssz, } from "@lodestar/types";
|
|
4
4
|
import { isValidMerkleBranch, computeEpochAtSlot, computeSyncPeriodAtSlot } from "../utils/index.js";
|
|
5
|
-
import { normalizeMerkleBranch } from "../utils/normalizeMerkleBranch.js";
|
|
6
5
|
export const GENESIS_SLOT = 0;
|
|
7
6
|
export const ZERO_HASH = new Uint8Array(32);
|
|
8
7
|
export const ZERO_PUBKEY = new Uint8Array(48);
|
|
9
8
|
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,17 +17,10 @@ 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
|
-
}
|
|
26
20
|
export function isSyncCommitteeUpdate(update) {
|
|
27
21
|
return (
|
|
28
22
|
// Fast return for when constructing full LightClientUpdate from partial updates
|
|
29
|
-
update.nextSyncCommitteeBranch !==
|
|
30
|
-
getZeroSyncCommitteeBranch(isElectraLightClientUpdate(update) ? ForkName.electra : ForkName.altair) &&
|
|
23
|
+
update.nextSyncCommitteeBranch !== ZERO_NEXT_SYNC_COMMITTEE_BRANCH &&
|
|
31
24
|
update.nextSyncCommitteeBranch.some((branch) => !byteArrayEquals(branch, ZERO_HASH)));
|
|
32
25
|
}
|
|
33
26
|
export function isFinalityUpdate(update) {
|
|
@@ -111,8 +104,7 @@ export function isValidLightClientHeader(config, header) {
|
|
|
111
104
|
}
|
|
112
105
|
if (epoch < config.ELECTRA_FORK_EPOCH) {
|
|
113
106
|
if (header.execution.depositRequestsRoot !== undefined ||
|
|
114
|
-
header.execution.withdrawalRequestsRoot !== undefined
|
|
115
|
-
header.execution.consolidationRequestsRoot !== undefined) {
|
|
107
|
+
header.execution.withdrawalRequestsRoot !== undefined) {
|
|
116
108
|
return false;
|
|
117
109
|
}
|
|
118
110
|
}
|
|
@@ -123,14 +115,11 @@ export function isValidLightClientHeader(config, header) {
|
|
|
123
115
|
export function upgradeLightClientUpdate(config, targetFork, update) {
|
|
124
116
|
update.attestedHeader = upgradeLightClientHeader(config, targetFork, update.attestedHeader);
|
|
125
117
|
update.finalizedHeader = upgradeLightClientHeader(config, targetFork, update.finalizedHeader);
|
|
126
|
-
update.nextSyncCommitteeBranch = normalizeMerkleBranch(update.nextSyncCommitteeBranch, isForkPostElectra(targetFork) ? NEXT_SYNC_COMMITTEE_DEPTH_ELECTRA : NEXT_SYNC_COMMITTEE_DEPTH);
|
|
127
|
-
update.finalityBranch = normalizeMerkleBranch(update.finalityBranch, isForkPostElectra(targetFork) ? FINALIZED_ROOT_DEPTH_ELECTRA : FINALIZED_ROOT_DEPTH);
|
|
128
118
|
return update;
|
|
129
119
|
}
|
|
130
120
|
export function upgradeLightClientFinalityUpdate(config, targetFork, finalityUpdate) {
|
|
131
121
|
finalityUpdate.attestedHeader = upgradeLightClientHeader(config, targetFork, finalityUpdate.attestedHeader);
|
|
132
122
|
finalityUpdate.finalizedHeader = upgradeLightClientHeader(config, targetFork, finalityUpdate.finalizedHeader);
|
|
133
|
-
finalityUpdate.finalityBranch = normalizeMerkleBranch(finalityUpdate.finalityBranch, isForkPostElectra(targetFork) ? FINALIZED_ROOT_DEPTH_ELECTRA : FINALIZED_ROOT_DEPTH);
|
|
134
123
|
return finalityUpdate;
|
|
135
124
|
}
|
|
136
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;AAEzD,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,OAAO,EACP,QAAQ,EACR,kCAAkC,IAAI,uBAAuB,EAC7D,kCAAkC,IAAI,uBAAuB,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/spec/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
import { byteArrayEquals } from "@chainsafe/ssz";
|
|
2
2
|
import { ssz } from "@lodestar/types";
|
|
3
3
|
import { toHex } from "@lodestar/utils";
|
|
4
|
-
import { isForkPostElectra } from "@lodestar/params";
|
|
5
4
|
import { isValidMerkleBranch } from "../utils/verifyMerkleBranch.js";
|
|
6
5
|
import { isValidLightClientHeader } from "./utils.js";
|
|
7
6
|
const CURRENT_SYNC_COMMITTEE_INDEX = 22;
|
|
8
7
|
const CURRENT_SYNC_COMMITTEE_DEPTH = 5;
|
|
9
|
-
const CURRENT_SYNC_COMMITTEE_INDEX_ELECTRA = 22;
|
|
10
|
-
const CURRENT_SYNC_COMMITTEE_DEPTH_ELECTRA = 6;
|
|
11
8
|
export function validateLightClientBootstrap(config, trustedBlockRoot, bootstrap) {
|
|
12
9
|
const headerRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(bootstrap.header.beacon);
|
|
13
|
-
const fork = config.getForkName(bootstrap.header.beacon.slot);
|
|
14
10
|
if (!isValidLightClientHeader(config, bootstrap.header)) {
|
|
15
11
|
throw Error("Bootstrap Header is not Valid Light Client Header");
|
|
16
12
|
}
|
|
17
13
|
if (!byteArrayEquals(headerRoot, trustedBlockRoot)) {
|
|
18
14
|
throw Error(`bootstrap header root ${toHex(headerRoot)} != trusted root ${toHex(trustedBlockRoot)}`);
|
|
19
15
|
}
|
|
20
|
-
if (!isValidMerkleBranch(ssz.altair.SyncCommittee.hashTreeRoot(bootstrap.currentSyncCommittee), bootstrap.currentSyncCommitteeBranch,
|
|
16
|
+
if (!isValidMerkleBranch(ssz.altair.SyncCommittee.hashTreeRoot(bootstrap.currentSyncCommittee), bootstrap.currentSyncCommitteeBranch, CURRENT_SYNC_COMMITTEE_DEPTH, CURRENT_SYNC_COMMITTEE_INDEX, bootstrap.header.beacon.stateRoot)) {
|
|
21
17
|
throw Error("Invalid currentSyncCommittee merkle branch");
|
|
22
18
|
}
|
|
23
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateLightClientBootstrap.js","sourceRoot":"","sources":["../../src/spec/validateLightClientBootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAA6B,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"validateLightClientBootstrap.js","sourceRoot":"","sources":["../../src/spec/validateLightClientBootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAA6B,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAEhE,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;AAEvC,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;IAEtF,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,4BAA4B,EAC5B,4BAA4B,EAC5B,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAClC,EACD,CAAC;QACD,MAAM,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import bls from "@chainsafe/bls";
|
|
2
|
-
import {
|
|
3
|
-
import { FINALIZED_ROOT_INDEX, FINALIZED_ROOT_DEPTH, NEXT_SYNC_COMMITTEE_DEPTH, MIN_SYNC_COMMITTEE_PARTICIPANTS, DOMAIN_SYNC_COMMITTEE, GENESIS_SLOT,
|
|
2
|
+
import { ssz } from "@lodestar/types";
|
|
3
|
+
import { FINALIZED_ROOT_INDEX, FINALIZED_ROOT_DEPTH, NEXT_SYNC_COMMITTEE_INDEX, NEXT_SYNC_COMMITTEE_DEPTH, MIN_SYNC_COMMITTEE_PARTICIPANTS, DOMAIN_SYNC_COMMITTEE, GENESIS_SLOT, } from "@lodestar/params";
|
|
4
4
|
import { getParticipantPubkeys, sumBits } from "../utils/utils.js";
|
|
5
5
|
import { isValidMerkleBranch } from "../utils/index.js";
|
|
6
6
|
import { isFinalityUpdate, isSyncCommitteeUpdate, isZeroedHeader, isZeroedSyncCommittee, ZERO_HASH, isValidLightClientHeader, } from "./utils.js";
|
|
@@ -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,
|
|
44
|
+
if (!isValidMerkleBranch(finalizedRoot, update.finalityBranch, FINALIZED_ROOT_DEPTH, 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,
|
|
56
|
+
if (!isValidMerkleBranch(ssz.altair.SyncCommittee.hashTreeRoot(update.nextSyncCommittee), update.nextSyncCommitteeBranch, NEXT_SYNC_COMMITTEE_DEPTH, 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;AAEjC,OAAO,EAA0B,
|
|
1
|
+
{"version":3,"file":"validateLightClientUpdate.js","sourceRoot":"","sources":["../../src/spec/validateLightClientUpdate.ts"],"names":[],"mappings":"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"}
|
package/lib/validation.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import bls from "@chainsafe/bls";
|
|
2
|
-
import {
|
|
3
|
-
import { FINALIZED_ROOT_INDEX, FINALIZED_ROOT_DEPTH, NEXT_SYNC_COMMITTEE_INDEX, NEXT_SYNC_COMMITTEE_DEPTH, MIN_SYNC_COMMITTEE_PARTICIPANTS, DOMAIN_SYNC_COMMITTEE,
|
|
2
|
+
import { ssz } from "@lodestar/types";
|
|
3
|
+
import { FINALIZED_ROOT_INDEX, FINALIZED_ROOT_DEPTH, NEXT_SYNC_COMMITTEE_INDEX, NEXT_SYNC_COMMITTEE_DEPTH, MIN_SYNC_COMMITTEE_PARTICIPANTS, DOMAIN_SYNC_COMMITTEE, } from "@lodestar/params";
|
|
4
4
|
import { isValidMerkleBranch } from "./utils/verifyMerkleBranch.js";
|
|
5
5
|
import { assertZeroHashes, getParticipantPubkeys, isEmptyHeader } from "./utils/utils.js";
|
|
6
6
|
import { computeSyncPeriodAtSlot } from "./utils/clock.js";
|
|
@@ -24,7 +24,7 @@ export function assertValidLightClientUpdate(config, syncCommittee, update) {
|
|
|
24
24
|
assertValidFinalityProof(update);
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
|
-
assertZeroHashes(update.finalityBranch,
|
|
27
|
+
assertZeroHashes(update.finalityBranch, FINALIZED_ROOT_DEPTH, "finalityBranches");
|
|
28
28
|
}
|
|
29
29
|
// DIFF FROM SPEC:
|
|
30
30
|
// The nextSyncCommitteeBranch should be check always not only when updatePeriodIncremented
|
|
@@ -67,7 +67,7 @@ export function assertValidFinalityProof(update) {
|
|
|
67
67
|
* Where `hashTreeRoot(state) == update.header.stateRoot`
|
|
68
68
|
*/
|
|
69
69
|
export function assertValidSyncCommitteeProof(update) {
|
|
70
|
-
if (!isValidMerkleBranch(ssz.altair.SyncCommittee.hashTreeRoot(update.nextSyncCommittee), update.nextSyncCommitteeBranch,
|
|
70
|
+
if (!isValidMerkleBranch(ssz.altair.SyncCommittee.hashTreeRoot(update.nextSyncCommittee), update.nextSyncCommitteeBranch, NEXT_SYNC_COMMITTEE_DEPTH, NEXT_SYNC_COMMITTEE_INDEX, update.attestedHeader.beacon.stateRoot)) {
|
|
71
71
|
throw Error("Invalid next sync committee merkle branch");
|
|
72
72
|
}
|
|
73
73
|
}
|
package/lib/validation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,gBAAgB,CAAC;AAEjC,OAAO,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.23.0-dev.
|
|
14
|
+
"version": "1.23.0-dev.fd6e23edab",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -77,11 +77,11 @@
|
|
|
77
77
|
"@chainsafe/blst": "^0.2.0",
|
|
78
78
|
"@chainsafe/persistent-merkle-tree": "^0.8.0",
|
|
79
79
|
"@chainsafe/ssz": "^0.17.1",
|
|
80
|
-
"@lodestar/api": "1.23.0-dev.
|
|
81
|
-
"@lodestar/config": "1.23.0-dev.
|
|
82
|
-
"@lodestar/params": "1.23.0-dev.
|
|
83
|
-
"@lodestar/types": "1.23.0-dev.
|
|
84
|
-
"@lodestar/utils": "1.23.0-dev.
|
|
80
|
+
"@lodestar/api": "1.23.0-dev.fd6e23edab",
|
|
81
|
+
"@lodestar/config": "1.23.0-dev.fd6e23edab",
|
|
82
|
+
"@lodestar/params": "1.23.0-dev.fd6e23edab",
|
|
83
|
+
"@lodestar/types": "1.23.0-dev.fd6e23edab",
|
|
84
|
+
"@lodestar/utils": "1.23.0-dev.fd6e23edab",
|
|
85
85
|
"mitt": "^3.0.0"
|
|
86
86
|
},
|
|
87
87
|
"devDependencies": {
|
|
@@ -98,5 +98,5 @@
|
|
|
98
98
|
"light-client",
|
|
99
99
|
"blockchain"
|
|
100
100
|
],
|
|
101
|
-
"gitHead": "
|
|
101
|
+
"gitHead": "4ae6cce42d5e806e3951792f69819a8a946ce2b5"
|
|
102
102
|
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare const SYNC_COMMITTEES_DEPTH = 4;
|
|
2
|
-
export declare const SYNC_COMMITTEES_INDEX = 11;
|
|
3
|
-
/**
|
|
4
|
-
* Given merkle branch ``branch``, extend its depth according to ``depth``
|
|
5
|
-
* If given ``depth`` is less than the depth of ``branch``, it will return
|
|
6
|
-
* unmodified ``branch``
|
|
7
|
-
*/
|
|
8
|
-
export declare function normalizeMerkleBranch(branch: Uint8Array[], depth: number): Uint8Array[];
|
|
9
|
-
//# sourceMappingURL=normalizeMerkleBranch.d.ts.map
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { ZERO_HASH } from "../spec/utils.js";
|
|
2
|
-
export const SYNC_COMMITTEES_DEPTH = 4;
|
|
3
|
-
export const SYNC_COMMITTEES_INDEX = 11;
|
|
4
|
-
/**
|
|
5
|
-
* Given merkle branch ``branch``, extend its depth according to ``depth``
|
|
6
|
-
* If given ``depth`` is less than the depth of ``branch``, it will return
|
|
7
|
-
* unmodified ``branch``
|
|
8
|
-
*/
|
|
9
|
-
export function normalizeMerkleBranch(branch, depth) {
|
|
10
|
-
const numExtraDepth = depth - branch.length;
|
|
11
|
-
return [...Array.from({ length: numExtraDepth }, () => ZERO_HASH), ...branch];
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=normalizeMerkleBranch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalizeMerkleBranch.js","sourceRoot":"","sources":["../../src/utils/normalizeMerkleBranch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAE3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAoB,EAAE,KAAa;IACvE,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;AAC9E,CAAC"}
|