@lodestar/state-transition 1.47.0-dev.b2cbfa50c2 → 1.47.0-dev.bd761ec9ea
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/block/isValidIndexedAttestation.d.ts +2 -3
- package/lib/block/isValidIndexedAttestation.d.ts.map +1 -1
- package/lib/block/isValidIndexedAttestation.js +4 -4
- package/lib/block/isValidIndexedAttestation.js.map +1 -1
- package/lib/block/isValidIndexedPayloadAttestation.d.ts.map +1 -1
- package/lib/block/isValidIndexedPayloadAttestation.js +1 -1
- package/lib/block/isValidIndexedPayloadAttestation.js.map +1 -1
- package/lib/block/processAttestationPhase0.d.ts.map +1 -1
- package/lib/block/processAttestationPhase0.js +1 -1
- package/lib/block/processAttestationPhase0.js.map +1 -1
- package/lib/block/processAttestationsAltair.js +2 -2
- package/lib/block/processAttestationsAltair.js.map +1 -1
- package/lib/block/processAttesterSlashing.d.ts +1 -2
- package/lib/block/processAttesterSlashing.d.ts.map +1 -1
- package/lib/block/processAttesterSlashing.js +3 -3
- package/lib/block/processAttesterSlashing.js.map +1 -1
- package/lib/block/processDeposit.d.ts.map +1 -1
- package/lib/block/processDeposit.js +21 -46
- package/lib/block/processDeposit.js.map +1 -1
- package/lib/block/processExecutionPayloadBid.d.ts.map +1 -1
- package/lib/block/processExecutionPayloadBid.js +2 -5
- package/lib/block/processExecutionPayloadBid.js.map +1 -1
- package/lib/block/processProposerSlashing.d.ts +1 -2
- package/lib/block/processProposerSlashing.d.ts.map +1 -1
- package/lib/block/processProposerSlashing.js +3 -3
- package/lib/block/processProposerSlashing.js.map +1 -1
- package/lib/block/processRandao.js +1 -1
- package/lib/block/processRandao.js.map +1 -1
- package/lib/block/processSyncCommittee.js +1 -1
- package/lib/block/processSyncCommittee.js.map +1 -1
- package/lib/block/processVoluntaryExit.d.ts.map +1 -1
- package/lib/block/processVoluntaryExit.js +1 -2
- package/lib/block/processVoluntaryExit.js.map +1 -1
- package/lib/cache/epochCache.d.ts +2 -2
- package/lib/cache/epochCache.d.ts.map +1 -1
- package/lib/cache/epochCache.js +5 -6
- package/lib/cache/epochCache.js.map +1 -1
- package/lib/cache/stateCache.js +1 -1
- package/lib/cache/stateCache.js.map +1 -1
- package/lib/cache/syncCommitteeCache.d.ts +2 -3
- package/lib/cache/syncCommitteeCache.d.ts.map +1 -1
- package/lib/cache/syncCommitteeCache.js.map +1 -1
- package/lib/epoch/processSyncCommitteeUpdates.js +1 -1
- package/lib/epoch/processSyncCommitteeUpdates.js.map +1 -1
- package/lib/index.d.ts +1 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -2
- package/lib/index.js.map +1 -1
- package/lib/lightClient/spec/store.d.ts +1 -1
- package/lib/lightClient/spec/store.d.ts.map +1 -1
- package/lib/lightClient/spec/utils.js +1 -1
- package/lib/lightClient/spec/utils.js.map +1 -1
- package/lib/lightClient/spec/validateLightClientUpdate.js +1 -1
- package/lib/lightClient/spec/validateLightClientUpdate.js.map +1 -1
- package/lib/metrics.d.ts +11 -0
- package/lib/metrics.d.ts.map +1 -1
- package/lib/metrics.js +22 -0
- package/lib/metrics.js.map +1 -1
- package/lib/rewards/attestationsRewards.d.ts +1 -1
- package/lib/rewards/attestationsRewards.d.ts.map +1 -1
- package/lib/rewards/attestationsRewards.js.map +1 -1
- package/lib/rewards/syncCommitteeRewards.d.ts +1 -1
- package/lib/rewards/syncCommitteeRewards.d.ts.map +1 -1
- package/lib/rewards/syncCommitteeRewards.js +3 -1
- package/lib/rewards/syncCommitteeRewards.js.map +1 -1
- package/lib/signatureSets/blsToExecutionChange.d.ts.map +1 -1
- package/lib/signatureSets/blsToExecutionChange.js +1 -2
- package/lib/signatureSets/blsToExecutionChange.js.map +1 -1
- package/lib/signatureSets/executionPayloadEnvelope.d.ts +2 -3
- package/lib/signatureSets/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/signatureSets/executionPayloadEnvelope.js +6 -7
- package/lib/signatureSets/executionPayloadEnvelope.js.map +1 -1
- package/lib/signatureSets/proposer.d.ts +1 -2
- package/lib/signatureSets/proposer.d.ts.map +1 -1
- package/lib/signatureSets/proposer.js +2 -2
- package/lib/signatureSets/proposer.js.map +1 -1
- package/lib/signatureSets/randao.d.ts +1 -2
- package/lib/signatureSets/randao.d.ts.map +1 -1
- package/lib/signatureSets/randao.js +2 -2
- package/lib/signatureSets/randao.js.map +1 -1
- package/lib/signatureSets/voluntaryExits.d.ts +1 -2
- package/lib/signatureSets/voluntaryExits.d.ts.map +1 -1
- package/lib/signatureSets/voluntaryExits.js +3 -4
- package/lib/signatureSets/voluntaryExits.js.map +1 -1
- package/lib/slot/upgradeStateToGloas.d.ts +2 -1
- package/lib/slot/upgradeStateToGloas.d.ts.map +1 -1
- package/lib/slot/upgradeStateToGloas.js +65 -21
- package/lib/slot/upgradeStateToGloas.js.map +1 -1
- package/lib/stateTransition.js +8 -3
- package/lib/stateTransition.js.map +1 -1
- package/lib/stateView/stateViewFactory.d.ts +1 -1
- package/lib/stateView/stateViewFactory.d.ts.map +1 -1
- package/lib/stateView/stateViewFactory.js +2 -13
- package/lib/stateView/stateViewFactory.js.map +1 -1
- package/lib/testUtils/index.d.ts +1 -0
- package/lib/testUtils/index.d.ts.map +1 -1
- package/lib/testUtils/index.js +1 -0
- package/lib/testUtils/index.js.map +1 -1
- package/lib/testUtils/interopPubkeyCache.d.ts +7 -0
- package/lib/testUtils/interopPubkeyCache.d.ts.map +1 -0
- package/lib/testUtils/interopPubkeyCache.js +92 -0
- package/lib/testUtils/interopPubkeyCache.js.map +1 -0
- package/lib/testUtils/state.d.ts.map +1 -1
- package/lib/testUtils/state.js +5 -5
- package/lib/testUtils/state.js.map +1 -1
- package/lib/testUtils/testFileCache.d.ts.map +1 -1
- package/lib/testUtils/testFileCache.js +3 -0
- package/lib/testUtils/testFileCache.js.map +1 -1
- package/lib/testUtils/util.d.ts +1 -1
- package/lib/testUtils/util.d.ts.map +1 -1
- package/lib/testUtils/util.js +27 -35
- package/lib/testUtils/util.js.map +1 -1
- package/lib/util/gloas.d.ts +6 -0
- package/lib/util/gloas.d.ts.map +1 -1
- package/lib/util/gloas.js +25 -11
- package/lib/util/gloas.js.map +1 -1
- package/lib/util/interop.d.ts +1 -1
- package/lib/util/interop.d.ts.map +1 -1
- package/lib/util/interop.js +1 -1
- package/lib/util/interop.js.map +1 -1
- package/lib/util/pendingDepositsLookup.d.ts +12 -0
- package/lib/util/pendingDepositsLookup.d.ts.map +1 -1
- package/lib/util/pendingDepositsLookup.js +19 -1
- package/lib/util/pendingDepositsLookup.js.map +1 -1
- package/lib/util/signatureSets.d.ts +5 -13
- package/lib/util/signatureSets.d.ts.map +1 -1
- package/lib/util/signatureSets.js +30 -39
- package/lib/util/signatureSets.js.map +1 -1
- package/lib/util/syncCommittee.js +1 -1
- package/lib/util/syncCommittee.js.map +1 -1
- package/package.json +11 -12
- package/src/block/isValidIndexedAttestation.ts +2 -8
- package/src/block/isValidIndexedPayloadAttestation.ts +1 -4
- package/src/block/processAttestationPhase0.ts +0 -1
- package/src/block/processAttestationsAltair.ts +2 -2
- package/src/block/processAttesterSlashing.ts +2 -13
- package/src/block/processDeposit.ts +35 -47
- package/src/block/processExecutionPayloadBid.ts +8 -6
- package/src/block/processProposerSlashing.ts +2 -11
- package/src/block/processRandao.ts +1 -1
- package/src/block/processSyncCommittee.ts +1 -1
- package/src/block/processVoluntaryExit.ts +1 -4
- package/src/cache/epochCache.ts +6 -7
- package/src/cache/stateCache.ts +1 -1
- package/src/cache/syncCommitteeCache.ts +3 -2
- package/src/epoch/processSyncCommitteeUpdates.ts +1 -1
- package/src/index.ts +1 -6
- package/src/lightClient/spec/store.ts +1 -1
- package/src/lightClient/spec/utils.ts +1 -1
- package/src/lightClient/spec/validateLightClientUpdate.ts +1 -1
- package/src/metrics.ts +23 -0
- package/src/rewards/attestationsRewards.ts +1 -1
- package/src/rewards/syncCommitteeRewards.ts +4 -2
- package/src/signatureSets/blsToExecutionChange.ts +1 -2
- package/src/signatureSets/executionPayloadEnvelope.ts +14 -15
- package/src/signatureSets/proposer.ts +1 -3
- package/src/signatureSets/randao.ts +2 -3
- package/src/signatureSets/voluntaryExits.ts +2 -5
- package/src/slot/upgradeStateToGloas.ts +75 -24
- package/src/stateTransition.ts +8 -3
- package/src/stateView/stateViewFactory.ts +2 -14
- package/src/testUtils/index.ts +1 -0
- package/src/testUtils/interopPubkeyCache.ts +100 -0
- package/src/testUtils/state.ts +5 -11
- package/src/testUtils/testFileCache.ts +3 -0
- package/src/testUtils/util.ts +26 -38
- package/src/util/gloas.ts +40 -11
- package/src/util/interop.ts +1 -1
- package/src/util/pendingDepositsLookup.ts +20 -1
- package/src/util/signatureSets.ts +34 -51
- package/src/util/syncCommittee.ts +1 -1
- package/lib/cache/pubkeyCache.d.ts +0 -28
- package/lib/cache/pubkeyCache.d.ts.map +0 -1
- package/lib/cache/pubkeyCache.js +0 -49
- package/lib/cache/pubkeyCache.js.map +0 -1
- package/src/cache/pubkeyCache.ts +0 -74
package/lib/util/gloas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gloas.js","sourceRoot":"","sources":["../../src/util/gloas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gloas.js","sourceRoot":"","sources":["../../src/util/gloas.ts"],"names":[],"mappings":"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"}
|
package/lib/util/interop.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SecretKey } from "@chainsafe/blst";
|
|
1
|
+
import { SecretKey } from "@chainsafe/lodestar-z/blst";
|
|
2
2
|
export declare function interopSecretKeys(validatorCount: number): SecretKey[];
|
|
3
3
|
export declare function interopSecretKey(index: number): SecretKey;
|
|
4
4
|
//# sourceMappingURL=interop.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interop.d.ts","sourceRoot":"","sources":["../../src/util/interop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"interop.d.ts","sourceRoot":"","sources":["../../src/util/interop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAAC,MAAM,4BAA4B,CAAC;AASrD,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,CAIrE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAIzD"}
|
package/lib/util/interop.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { toBufferBE } from "@vekexasia/bigint-buffer2";
|
|
2
2
|
import { digest } from "@chainsafe/as-sha256";
|
|
3
|
-
import { SecretKey } from "@chainsafe/blst";
|
|
3
|
+
import { SecretKey } from "@chainsafe/lodestar-z/blst";
|
|
4
4
|
import { bytesToBigInt, intToBytes } from "@lodestar/utils";
|
|
5
5
|
let curveOrder;
|
|
6
6
|
function getCurveOrder() {
|
package/lib/util/interop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interop.js","sourceRoot":"","sources":["../../src/util/interop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAC,SAAS,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"interop.js","sourceRoot":"","sources":["../../src/util/interop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAC,SAAS,EAAC,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAE1D,IAAI,UAAkB,CAAC;AACvB,SAAS,aAAa;IACpB,IAAI,CAAC,UAAU;QAAE,UAAU,GAAG,MAAM,CAAC,+EAA+E,CAAC,CAAC;IACtH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,cAAsB;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,cAAc,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnD,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,WAAW,GAAG,aAAa,EAAE,CAAC;IACpC,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,EAAE,CAAC,CAAC;IAClG,OAAO,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -17,6 +17,8 @@ import { BuilderDepositSignatureCache } from "../cache/builderDepositSignatureCa
|
|
|
17
17
|
export declare class PendingDepositsLookup {
|
|
18
18
|
private readonly depositsByPubkey;
|
|
19
19
|
private readonly validationCache;
|
|
20
|
+
private signaturesFromCache;
|
|
21
|
+
private signaturesVerified;
|
|
20
22
|
private constructor();
|
|
21
23
|
/** Build an empty lookup for a sequence that will be populated incrementally. */
|
|
22
24
|
static buildEmpty(): PendingDepositsLookup;
|
|
@@ -32,6 +34,16 @@ export declare class PendingDepositsLookup {
|
|
|
32
34
|
* Most of the time it should hit the BuilderDepositSignatureCache so we don't have to validate
|
|
33
35
|
* signatures here.
|
|
34
36
|
*/
|
|
37
|
+
/**
|
|
38
|
+
* Signature checks performed inside `hasPendingValidator()`, split by whether the pre-verify
|
|
39
|
+
* cache served them. These are the scan the caller never sees: when a builder-routed deposit is
|
|
40
|
+
* preceded by same-pubkey validator deposits this walk dominates, and on a `true` result the
|
|
41
|
+
* caller skips its own signature check entirely.
|
|
42
|
+
*/
|
|
43
|
+
get signatureChecks(): {
|
|
44
|
+
fromCache: number;
|
|
45
|
+
verified: number;
|
|
46
|
+
};
|
|
35
47
|
hasPendingValidator(config: BeaconConfig, pubkeyHex: PubkeyHex, cache: BuilderDepositSignatureCache): boolean;
|
|
36
48
|
}
|
|
37
49
|
//# sourceMappingURL=pendingDepositsLookup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pendingDepositsLookup.d.ts","sourceRoot":"","sources":["../../src/util/pendingDepositsLookup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAC,SAAS,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAC,4BAA4B,EAAC,MAAM,0CAA0C,CAAC;AAOtF;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAqB;
|
|
1
|
+
{"version":3,"file":"pendingDepositsLookup.d.ts","sourceRoot":"","sources":["../../src/util/pendingDepositsLookup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAC,SAAS,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAC,4BAA4B,EAAC,MAAM,0CAA0C,CAAC;AAOtF;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe;IALlC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,kBAAkB,CAAK;IAE/B,OAAO,eAGH;IAEJ,iFAAiF;IACjF,MAAM,CAAC,UAAU,IAAI,qBAAqB,CAEzC;IAED;;OAEG;IACH,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAOtE;IAED;;;;;;;OAOG;IACH;;;;;OAKG;IACH,IAAI,eAAe,IAAI;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,CAE3D;IAED,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,4BAA4B,GAAG,OAAO,CA4C5G;CACF"}
|
|
@@ -15,6 +15,8 @@ import { isValidDepositSignature } from "../block/processDeposit.js";
|
|
|
15
15
|
export class PendingDepositsLookup {
|
|
16
16
|
depositsByPubkey;
|
|
17
17
|
validationCache;
|
|
18
|
+
signaturesFromCache = 0;
|
|
19
|
+
signaturesVerified = 0;
|
|
18
20
|
constructor(depositsByPubkey, validationCache) {
|
|
19
21
|
this.depositsByPubkey = depositsByPubkey;
|
|
20
22
|
this.validationCache = validationCache;
|
|
@@ -43,6 +45,15 @@ export class PendingDepositsLookup {
|
|
|
43
45
|
* Most of the time it should hit the BuilderDepositSignatureCache so we don't have to validate
|
|
44
46
|
* signatures here.
|
|
45
47
|
*/
|
|
48
|
+
/**
|
|
49
|
+
* Signature checks performed inside `hasPendingValidator()`, split by whether the pre-verify
|
|
50
|
+
* cache served them. These are the scan the caller never sees: when a builder-routed deposit is
|
|
51
|
+
* preceded by same-pubkey validator deposits this walk dominates, and on a `true` result the
|
|
52
|
+
* caller skips its own signature check entirely.
|
|
53
|
+
*/
|
|
54
|
+
get signatureChecks() {
|
|
55
|
+
return { fromCache: this.signaturesFromCache, verified: this.signaturesVerified };
|
|
56
|
+
}
|
|
46
57
|
hasPendingValidator(config, pubkeyHex, cache) {
|
|
47
58
|
const validation = this.validationCache.get(pubkeyHex);
|
|
48
59
|
if (validation?.hasValidSignature === true) {
|
|
@@ -61,7 +72,14 @@ export class PendingDepositsLookup {
|
|
|
61
72
|
}
|
|
62
73
|
for (let i = startIndex; i < deposits.length; i++) {
|
|
63
74
|
const deposit = deposits[i];
|
|
64
|
-
const
|
|
75
|
+
const cached = cache.getSignatureValidity(deposit);
|
|
76
|
+
if (cached === null) {
|
|
77
|
+
this.signaturesVerified++;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.signaturesFromCache++;
|
|
81
|
+
}
|
|
82
|
+
const isValid = cached ??
|
|
65
83
|
isValidDepositSignature(config, deposit.pubkey, deposit.withdrawalCredentials, deposit.amount, deposit.signature);
|
|
66
84
|
if (isValid) {
|
|
67
85
|
this.validationCache.set(pubkeyHex, { hasValidSignature: true, validatedCount: i + 1 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pendingDepositsLookup.js","sourceRoot":"","sources":["../../src/util/pendingDepositsLookup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,uBAAuB,EAAC,MAAM,4BAA4B,CAAC;AAQnE;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,qBAAqB;
|
|
1
|
+
{"version":3,"file":"pendingDepositsLookup.js","sourceRoot":"","sources":["../../src/util/pendingDepositsLookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type BlsSignatureSet } from "@chainsafe/lodestar-z/bls-verifier";
|
|
2
2
|
import { Root } from "@lodestar/types";
|
|
3
|
-
import { PubkeyCache } from "../cache/pubkeyCache.js";
|
|
4
3
|
export declare enum SignatureSetType {
|
|
5
4
|
single = "single",
|
|
6
5
|
aggregate = "aggregate",
|
|
@@ -16,7 +15,7 @@ export declare enum SignatureSetType {
|
|
|
16
15
|
*/
|
|
17
16
|
export type SingleSignatureSet = {
|
|
18
17
|
type: SignatureSetType.single;
|
|
19
|
-
pubkey:
|
|
18
|
+
pubkey: Uint8Array;
|
|
20
19
|
signingRoot: Root;
|
|
21
20
|
signature: Uint8Array;
|
|
22
21
|
};
|
|
@@ -41,16 +40,9 @@ export type AggregatedSignatureSet = {
|
|
|
41
40
|
signature: Uint8Array;
|
|
42
41
|
};
|
|
43
42
|
export type ISignatureSet = SingleSignatureSet | IndexedSignatureSet | AggregatedSignatureSet;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
*/
|
|
48
|
-
export declare function getSignatureSetPubkey(signatureSet: ISignatureSet, pubkeyCache: PubkeyCache): PublicKey;
|
|
49
|
-
export declare function verifySignatureSet(signatureSet: SingleSignatureSet, pubkeyCache?: PubkeyCache): boolean;
|
|
50
|
-
export declare function verifySignatureSet(signatureSet: IndexedSignatureSet, pubkeyCache: PubkeyCache): boolean;
|
|
51
|
-
export declare function verifySignatureSet(signatureSet: AggregatedSignatureSet, pubkeyCache: PubkeyCache): boolean;
|
|
52
|
-
export declare function verifySignatureSet(signatureSet: ISignatureSet, pubkeyCache: PubkeyCache): boolean;
|
|
53
|
-
export declare function createSingleSignatureSetFromComponents(pubkey: PublicKey, signingRoot: Root, signature: Uint8Array): SingleSignatureSet;
|
|
43
|
+
export declare function toBlsSignatureSet(signatureSet: ISignatureSet): BlsSignatureSet;
|
|
44
|
+
export declare function verifySignatureSet(signatureSet: ISignatureSet): boolean;
|
|
45
|
+
export declare function createSingleSignatureSetFromComponents(pubkey: Uint8Array, signingRoot: Root, signature: Uint8Array): SingleSignatureSet;
|
|
54
46
|
export declare function createIndexedSignatureSetFromComponents(index: number, signingRoot: Root, signature: Uint8Array): IndexedSignatureSet;
|
|
55
47
|
export declare function createAggregateSignatureSetFromComponents(indices: number[], signingRoot: Root, signature: Uint8Array): AggregatedSignatureSet;
|
|
56
48
|
//# sourceMappingURL=signatureSets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signatureSets.d.ts","sourceRoot":"","sources":["../../src/util/signatureSets.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"signatureSets.d.ts","sourceRoot":"","sources":["../../src/util/signatureSets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,eAAe,EAAsB,MAAM,oCAAoC,CAAC;AACpH,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAErC,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB;;;OAGG;IACH,OAAO,YAAY;CACpB;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,sBAAsB,CAAC;AAE9F,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,aAAa,GAAG,eAAe,CAsC9E;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,aAAa,GAAG,OAAO,CAEvE;AAED,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,IAAI,EACjB,SAAS,EAAE,UAAU,GACpB,kBAAkB,CAOpB;AAED,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,IAAI,EACjB,SAAS,EAAE,UAAU,GACpB,mBAAmB,CAOrB;AAED,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,EAAE,IAAI,EACjB,SAAS,EAAE,UAAU,GACpB,sBAAsB,CAOxB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BLS_VERIFIER_SET_TYPE, verifySignatureSets } from "@chainsafe/lodestar-z/bls-verifier";
|
|
2
2
|
export var SignatureSetType;
|
|
3
3
|
(function (SignatureSetType) {
|
|
4
4
|
SignatureSetType["single"] = "single";
|
|
@@ -9,53 +9,44 @@ export var SignatureSetType;
|
|
|
9
9
|
*/
|
|
10
10
|
SignatureSetType["indexed"] = "indexed";
|
|
11
11
|
})(SignatureSetType || (SignatureSetType = {}));
|
|
12
|
-
|
|
13
|
-
* Get the pubkey for a signature set, performing aggregation if necessary.
|
|
14
|
-
* Requires pubkeyCache for indexed and aggregate sets.
|
|
15
|
-
*/
|
|
16
|
-
export function getSignatureSetPubkey(signatureSet, pubkeyCache) {
|
|
12
|
+
export function toBlsSignatureSet(signatureSet) {
|
|
17
13
|
switch (signatureSet.type) {
|
|
18
14
|
case SignatureSetType.single:
|
|
19
|
-
return
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
export function verifySignatureSet(signatureSet, pubkeyCache) {
|
|
34
|
-
// All signatures are not trusted and must be group checked (p2.subgroup_check)
|
|
35
|
-
const signature = Signature.fromBytes(signatureSet.signature, true);
|
|
36
|
-
switch (signatureSet.type) {
|
|
37
|
-
case SignatureSetType.single:
|
|
38
|
-
return verify(signatureSet.signingRoot, signatureSet.pubkey, signature);
|
|
39
|
-
case SignatureSetType.indexed: {
|
|
40
|
-
if (!pubkeyCache) {
|
|
41
|
-
throw Error("pubkeyCache required for indexed signature set");
|
|
42
|
-
}
|
|
43
|
-
const pubkey = pubkeyCache.getOrThrow(signatureSet.index);
|
|
44
|
-
return verify(signatureSet.signingRoot, pubkey, signature);
|
|
45
|
-
}
|
|
15
|
+
return {
|
|
16
|
+
type: BLS_VERIFIER_SET_TYPE.single,
|
|
17
|
+
pubkey: signatureSet.pubkey,
|
|
18
|
+
message: signatureSet.signingRoot,
|
|
19
|
+
signature: signatureSet.signature,
|
|
20
|
+
};
|
|
21
|
+
case SignatureSetType.indexed:
|
|
22
|
+
return {
|
|
23
|
+
type: BLS_VERIFIER_SET_TYPE.indexed,
|
|
24
|
+
index: signatureSet.index,
|
|
25
|
+
message: signatureSet.signingRoot,
|
|
26
|
+
signature: signatureSet.signature,
|
|
27
|
+
};
|
|
46
28
|
case SignatureSetType.aggregate: {
|
|
47
|
-
|
|
48
|
-
|
|
29
|
+
const indices = new Uint32Array(signatureSet.indices.length);
|
|
30
|
+
for (const [i, index] of signatureSet.indices.entries()) {
|
|
31
|
+
if (!Number.isInteger(index) || index < 0 || index > 0xffffffff) {
|
|
32
|
+
throw new RangeError(`Invalid validator index ${index}`);
|
|
33
|
+
}
|
|
34
|
+
indices[i] = index;
|
|
49
35
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
36
|
+
return {
|
|
37
|
+
type: BLS_VERIFIER_SET_TYPE.aggregate,
|
|
38
|
+
indices,
|
|
39
|
+
message: signatureSet.signingRoot,
|
|
40
|
+
signature: signatureSet.signature,
|
|
41
|
+
};
|
|
54
42
|
}
|
|
55
43
|
default:
|
|
56
44
|
throw Error("Unknown signature set type");
|
|
57
45
|
}
|
|
58
46
|
}
|
|
47
|
+
export function verifySignatureSet(signatureSet) {
|
|
48
|
+
return verifySignatureSets([toBlsSignatureSet(signatureSet)]);
|
|
49
|
+
}
|
|
59
50
|
export function createSingleSignatureSetFromComponents(pubkey, signingRoot, signature) {
|
|
60
51
|
return {
|
|
61
52
|
type: SignatureSetType.single,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signatureSets.js","sourceRoot":"","sources":["../../src/util/signatureSets.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"signatureSets.js","sourceRoot":"","sources":["../../src/util/signatureSets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAwB,mBAAmB,EAAC,MAAM,oCAAoC,CAAC;AAGpH,MAAM,CAAN,IAAY,gBAQX;AARD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,2CAAuB,CAAA;IACvB;;;OAGG;IACH,uCAAmB,CAAA;AACrB,CAAC,EARW,gBAAgB,KAAhB,gBAAgB,QAQ3B;AAqCD,MAAM,UAAU,iBAAiB,CAAC,YAA2B;IAC3D,QAAQ,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1B,KAAK,gBAAgB,CAAC,MAAM;YAC1B,OAAO;gBACL,IAAI,EAAE,qBAAqB,CAAC,MAAM;gBAClC,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,OAAO,EAAE,YAAY,CAAC,WAAW;gBACjC,SAAS,EAAE,YAAY,CAAC,SAAS;aAClC,CAAC;QAEJ,KAAK,gBAAgB,CAAC,OAAO;YAC3B,OAAO;gBACL,IAAI,EAAE,qBAAqB,CAAC,OAAO;gBACnC,KAAK,EAAE,YAAY,CAAC,KAAK;gBACzB,OAAO,EAAE,YAAY,CAAC,WAAW;gBACjC,SAAS,EAAE,YAAY,CAAC,SAAS;aAClC,CAAC;QAEJ,KAAK,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7D,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBACxD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,UAAU,EAAE,CAAC;oBAChE,MAAM,IAAI,UAAU,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YACrB,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,qBAAqB,CAAC,SAAS;gBACrC,OAAO;gBACP,OAAO,EAAE,YAAY,CAAC,WAAW;gBACjC,SAAS,EAAE,YAAY,CAAC,SAAS;aAClC,CAAC;QACJ,CAAC;QAED;YACE,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,YAA2B;IAC5D,OAAO,mBAAmB,CAAC,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,sCAAsC,CACpD,MAAkB,EAClB,WAAiB,EACjB,SAAqB;IAErB,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,MAAM;QAC7B,MAAM;QACN,WAAW;QACX,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,KAAa,EACb,WAAiB,EACjB,SAAqB;IAErB,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,OAAO;QAC9B,KAAK;QACL,WAAW;QACX,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yCAAyC,CACvD,OAAiB,EACjB,WAAiB,EACjB,SAAqB;IAErB,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,SAAS;QAChC,OAAO;QACP,WAAW;QACX,SAAS;KACV,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { aggregateSerializedPublicKeys } from "@chainsafe/blst";
|
|
1
|
+
import { aggregateSerializedPublicKeys } from "@chainsafe/lodestar-z/blst";
|
|
2
2
|
import { BASE_REWARD_FACTOR, EFFECTIVE_BALANCE_INCREMENT, SLOTS_PER_EPOCH, SYNC_COMMITTEE_SIZE, SYNC_REWARD_WEIGHT, WEIGHT_DENOMINATOR, } from "@lodestar/params";
|
|
3
3
|
import { bigIntSqrt } from "@lodestar/utils";
|
|
4
4
|
import { getNextSyncCommitteeIndices } from "./seed.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncCommittee.js","sourceRoot":"","sources":["../../src/util/syncCommittee.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,6BAA6B,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"syncCommittee.js","sourceRoot":"","sources":["../../src/util/syncCommittee.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,6BAA6B,EAAC,MAAM,4BAA4B,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAE3B,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAC,2BAA2B,EAAC,MAAM,WAAW,CAAC;AAEtD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAa,EACb,KAA0B,EAC1B,sBAAmC,EACnC,0BAAsD;IAEtD,MAAM,OAAO,GAAG,2BAA2B,CAAC,IAAI,EAAE,KAAK,EAAE,sBAAsB,EAAE,0BAA0B,CAAC,CAAC;IAE7G,iFAAiF;IACjF,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO;QACL,OAAO;QACP,aAAa,EAAE;YACb,OAAO;YACP,eAAe,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE;SAClE;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,4BAAoC;IAC/E,MAAM,kBAAkB,GAAG,MAAM,CAAC,4BAA4B,CAAC,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACtG,MAAM,sBAAsB,GAAG,IAAI,CAAC,KAAK,CACvC,CAAC,2BAA2B,GAAG,kBAAkB,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAC5F,CAAC;IACF,MAAM,gBAAgB,GAAG,sBAAsB,GAAG,4BAA4B,CAAC;IAC/E,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CACtC,IAAI,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,kBAAkB,CAAC,GAAG,eAAe,CAC3F,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAC,qBAAqB,GAAG,mBAAmB,CAAC,CAAC;AACjE,CAAC;AAED;;;IAGI;AACJ,MAAM,UAAU,6BAA6B,CAAC,2BAAmC;IAC/E,OAAO,IAAI,CAAC,KAAK,CACf,CAAC,2BAA2B,GAAG,kBAAkB,CAAC;QAChD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,2BAA2B,CAAC,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAChG,CAAC;AACJ,CAAC"}
|
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.47.0-dev.
|
|
14
|
+
"version": "1.47.0-dev.bd761ec9ea",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -65,20 +65,19 @@
|
|
|
65
65
|
},
|
|
66
66
|
"types": "lib/index.d.ts",
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@chainsafe/as-sha256": "^1.2.
|
|
69
|
-
"@chainsafe/
|
|
70
|
-
"@chainsafe/persistent-merkle-tree": "^1.3.
|
|
71
|
-
"@chainsafe/
|
|
72
|
-
"@chainsafe/ssz": "^1.6.2",
|
|
68
|
+
"@chainsafe/as-sha256": "^1.2.5",
|
|
69
|
+
"@chainsafe/lodestar-z": "catalog:",
|
|
70
|
+
"@chainsafe/persistent-merkle-tree": "^1.3.1",
|
|
71
|
+
"@chainsafe/ssz": "^1.6.3",
|
|
73
72
|
"@chainsafe/swap-or-not-shuffle": "^1.2.1",
|
|
74
|
-
"@lodestar/config": "^1.47.0-dev.
|
|
75
|
-
"@lodestar/params": "^1.47.0-dev.
|
|
76
|
-
"@lodestar/types": "^1.47.0-dev.
|
|
77
|
-
"@lodestar/utils": "^1.47.0-dev.
|
|
73
|
+
"@lodestar/config": "^1.47.0-dev.bd761ec9ea",
|
|
74
|
+
"@lodestar/params": "^1.47.0-dev.bd761ec9ea",
|
|
75
|
+
"@lodestar/types": "^1.47.0-dev.bd761ec9ea",
|
|
76
|
+
"@lodestar/utils": "^1.47.0-dev.bd761ec9ea",
|
|
78
77
|
"@vekexasia/bigint-buffer2": "^1.1.1"
|
|
79
78
|
},
|
|
80
79
|
"devDependencies": {
|
|
81
|
-
"@lodestar/api": "^1.47.0-dev.
|
|
80
|
+
"@lodestar/api": "^1.47.0-dev.bd761ec9ea"
|
|
82
81
|
},
|
|
83
82
|
"keywords": [
|
|
84
83
|
"ethereum",
|
|
@@ -86,5 +85,5 @@
|
|
|
86
85
|
"beacon",
|
|
87
86
|
"blockchain"
|
|
88
87
|
],
|
|
89
|
-
"gitHead": "
|
|
88
|
+
"gitHead": "e6ab541ea0505d694dd9d076601009f59e26751f"
|
|
90
89
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {BeaconConfig} from "@lodestar/config";
|
|
2
2
|
import {ForkSeq, MAX_COMMITTEES_PER_SLOT, MAX_VALIDATORS_PER_COMMITTEE} from "@lodestar/params";
|
|
3
3
|
import {IndexedAttestation, IndexedAttestationBigint, Slot} from "@lodestar/types";
|
|
4
|
-
import {PubkeyCache} from "../cache/pubkeyCache.js";
|
|
5
4
|
import {getIndexedAttestationBigintSignatureSet, getIndexedAttestationSignatureSet} from "../signatureSets/index.js";
|
|
6
5
|
import {verifySignatureSet} from "../util/index.js";
|
|
7
6
|
|
|
@@ -10,7 +9,6 @@ import {verifySignatureSet} from "../util/index.js";
|
|
|
10
9
|
*/
|
|
11
10
|
export function isValidIndexedAttestation(
|
|
12
11
|
config: BeaconConfig,
|
|
13
|
-
pubkeyCache: PubkeyCache,
|
|
14
12
|
stateSlot: Slot,
|
|
15
13
|
validatorsLen: number,
|
|
16
14
|
indexedAttestation: IndexedAttestation,
|
|
@@ -21,14 +19,13 @@ export function isValidIndexedAttestation(
|
|
|
21
19
|
}
|
|
22
20
|
|
|
23
21
|
if (verifySignature) {
|
|
24
|
-
return verifySignatureSet(getIndexedAttestationSignatureSet(config, stateSlot, indexedAttestation)
|
|
22
|
+
return verifySignatureSet(getIndexedAttestationSignatureSet(config, stateSlot, indexedAttestation));
|
|
25
23
|
}
|
|
26
24
|
return true;
|
|
27
25
|
}
|
|
28
26
|
|
|
29
27
|
export function isValidIndexedAttestationBigint(
|
|
30
28
|
config: BeaconConfig,
|
|
31
|
-
pubkeyCache: PubkeyCache,
|
|
32
29
|
stateSlot: Slot,
|
|
33
30
|
validatorsLen: number,
|
|
34
31
|
indexedAttestation: IndexedAttestationBigint,
|
|
@@ -39,10 +36,7 @@ export function isValidIndexedAttestationBigint(
|
|
|
39
36
|
}
|
|
40
37
|
|
|
41
38
|
if (verifySignature) {
|
|
42
|
-
return verifySignatureSet(
|
|
43
|
-
getIndexedAttestationBigintSignatureSet(config, stateSlot, indexedAttestation),
|
|
44
|
-
pubkeyCache
|
|
45
|
-
);
|
|
39
|
+
return verifySignatureSet(getIndexedAttestationBigintSignatureSet(config, stateSlot, indexedAttestation));
|
|
46
40
|
}
|
|
47
41
|
return true;
|
|
48
42
|
}
|
|
@@ -16,10 +16,7 @@ export function isValidIndexedPayloadAttestation(
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
if (verifySignature) {
|
|
19
|
-
return verifySignatureSet(
|
|
20
|
-
getIndexedPayloadAttestationSignatureSet(state.config, indexedPayloadAttestation),
|
|
21
|
-
state.epochCtx.pubkeyCache
|
|
22
|
-
);
|
|
19
|
+
return verifySignatureSet(getIndexedPayloadAttestationSignatureSet(state.config, indexedPayloadAttestation));
|
|
23
20
|
}
|
|
24
21
|
|
|
25
22
|
return true;
|
|
@@ -67,7 +67,7 @@ export function processAttestationsAltair(
|
|
|
67
67
|
// we can verify only that and nothing else.
|
|
68
68
|
if (verifySignature) {
|
|
69
69
|
const sigSet = getAttestationWithIndicesSignatureSet(state.config, state.slot, attestation, attestingIndices);
|
|
70
|
-
if (!verifySignatureSet(sigSet
|
|
70
|
+
if (!verifySignatureSet(sigSet)) {
|
|
71
71
|
throw new Error("Attestation signature is not valid");
|
|
72
72
|
}
|
|
73
73
|
}
|
|
@@ -134,7 +134,7 @@ export function processAttestationsAltair(
|
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
if (isSameSlotAttestation && flagsNewSet !== 0) {
|
|
137
|
+
if (fork >= ForkSeq.gloas && isSameSlotAttestation && flags === 0 && flagsNewSet !== 0) {
|
|
138
138
|
paymentWeightToAdd += effectiveBalanceIncrements[validatorIndex];
|
|
139
139
|
}
|
|
140
140
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {BeaconConfig} from "@lodestar/config";
|
|
2
2
|
import {ForkSeq} from "@lodestar/params";
|
|
3
3
|
import {AttesterSlashing, Slot} from "@lodestar/types";
|
|
4
|
-
import {PubkeyCache} from "../cache/pubkeyCache.js";
|
|
5
4
|
import {CachedBeaconStateAllForks} from "../types.js";
|
|
6
5
|
import {getAttesterSlashableIndices, isSlashableAttestationData, isSlashableValidator} from "../util/index.js";
|
|
7
6
|
import {isValidIndexedAttestationBigint} from "./isValidIndexedAttestation.js";
|
|
@@ -20,14 +19,7 @@ export function processAttesterSlashing(
|
|
|
20
19
|
verifySignatures = true
|
|
21
20
|
): void {
|
|
22
21
|
const {epochCtx} = state;
|
|
23
|
-
assertValidAttesterSlashing(
|
|
24
|
-
state.config,
|
|
25
|
-
epochCtx.pubkeyCache,
|
|
26
|
-
state.slot,
|
|
27
|
-
state.validators.length,
|
|
28
|
-
attesterSlashing,
|
|
29
|
-
verifySignatures
|
|
30
|
-
);
|
|
22
|
+
assertValidAttesterSlashing(state.config, state.slot, state.validators.length, attesterSlashing, verifySignatures);
|
|
31
23
|
|
|
32
24
|
const intersectingIndices = getAttesterSlashableIndices(attesterSlashing);
|
|
33
25
|
|
|
@@ -48,7 +40,6 @@ export function processAttesterSlashing(
|
|
|
48
40
|
|
|
49
41
|
export function assertValidAttesterSlashing(
|
|
50
42
|
config: BeaconConfig,
|
|
51
|
-
pubkeyCache: PubkeyCache,
|
|
52
43
|
stateSlot: Slot,
|
|
53
44
|
validatorsLen: number,
|
|
54
45
|
attesterSlashing: AttesterSlashing,
|
|
@@ -65,9 +56,7 @@ export function assertValidAttesterSlashing(
|
|
|
65
56
|
// be higher than the clock and the slashing would still be valid. Same applies to attestation data index, which
|
|
66
57
|
// can be any arbitrary value. Must use bigint variants to hash correctly to all possible values
|
|
67
58
|
for (const [i, attestation] of [attestation1, attestation2].entries()) {
|
|
68
|
-
if (
|
|
69
|
-
!isValidIndexedAttestationBigint(config, pubkeyCache, stateSlot, validatorsLen, attestation, verifySignatures)
|
|
70
|
-
) {
|
|
59
|
+
if (!isValidIndexedAttestationBigint(config, stateSlot, validatorsLen, attestation, verifySignatures)) {
|
|
71
60
|
throw new Error(`AttesterSlashing attestation${i} is invalid`);
|
|
72
61
|
}
|
|
73
62
|
}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
BLS_VERIFIER_MAX_BATCH_SIZE,
|
|
3
|
+
BLS_VERIFIER_SET_TYPE,
|
|
4
|
+
type BlsSignatureSet,
|
|
5
|
+
verifySignatureSets,
|
|
6
|
+
} from "@chainsafe/lodestar-z/bls-verifier";
|
|
2
7
|
import {BeaconConfig} from "@lodestar/config";
|
|
3
8
|
import {
|
|
4
9
|
DEPOSIT_CONTRACT_TREE_DEPTH,
|
|
@@ -13,7 +18,14 @@ import {BLSPubkey, Bytes32, UintNum64, electra, phase0, ssz} from "@lodestar/typ
|
|
|
13
18
|
import {verifyMerkleBranch} from "@lodestar/utils";
|
|
14
19
|
import {ZERO_HASH} from "../constants/index.js";
|
|
15
20
|
import {CachedBeaconStateAllForks, CachedBeaconStateAltair, CachedBeaconStateElectra} from "../types.js";
|
|
16
|
-
import {
|
|
21
|
+
import {
|
|
22
|
+
computeDomain,
|
|
23
|
+
computeSigningRoot,
|
|
24
|
+
createSingleSignatureSetFromComponents,
|
|
25
|
+
getMaxEffectiveBalance,
|
|
26
|
+
increaseBalance,
|
|
27
|
+
verifySignatureSet,
|
|
28
|
+
} from "../util/index.js";
|
|
17
29
|
|
|
18
30
|
/**
|
|
19
31
|
* Process a Deposit operation. Potentially adds a new validator to the registry. Mutates the validators and balances
|
|
@@ -159,11 +171,7 @@ export function isValidDepositSignature(
|
|
|
159
171
|
const domain = computeDomain(DOMAIN_DEPOSIT, config.GENESIS_FORK_VERSION, ZERO_HASH);
|
|
160
172
|
const signingRoot = computeSigningRoot(ssz.phase0.DepositMessage, depositMessage, domain);
|
|
161
173
|
try {
|
|
162
|
-
|
|
163
|
-
const publicKey = PublicKey.fromBytes(pubkey, true);
|
|
164
|
-
const signature = Signature.fromBytes(depositSignature, true);
|
|
165
|
-
|
|
166
|
-
return verify(signingRoot, publicKey, signature);
|
|
174
|
+
return verifySignatureSet(createSingleSignatureSetFromComponents(pubkey, signingRoot, depositSignature));
|
|
167
175
|
} catch (_e) {
|
|
168
176
|
return false; // Catch all BLS errors: failed key validation, failed signature validation, invalid signature
|
|
169
177
|
}
|
|
@@ -184,54 +192,34 @@ export function verifyDepositSignatures(config: BeaconConfig, deposits: electra.
|
|
|
184
192
|
// fork-agnostic domain since deposits are valid across forks, matching isValidDepositSignature
|
|
185
193
|
const domain = computeDomain(DOMAIN_DEPOSIT, config.GENESIS_FORK_VERSION, ZERO_HASH);
|
|
186
194
|
|
|
187
|
-
const signatureSets:
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
195
|
+
const signatureSets: BlsSignatureSet[] = deposits.map(({pubkey, withdrawalCredentials, amount, signature}) => ({
|
|
196
|
+
type: BLS_VERIFIER_SET_TYPE.single,
|
|
197
|
+
pubkey,
|
|
198
|
+
message: computeSigningRoot(ssz.phase0.DepositMessage, {pubkey, withdrawalCredentials, amount}, domain),
|
|
199
|
+
signature,
|
|
200
|
+
}));
|
|
201
|
+
|
|
202
|
+
for (let chunkStart = 0; chunkStart < signatureSets.length; chunkStart += BLS_VERIFIER_MAX_BATCH_SIZE) {
|
|
203
|
+
const chunk = signatureSets.slice(chunkStart, chunkStart + BLS_VERIFIER_MAX_BATCH_SIZE);
|
|
204
|
+
let chunkValid: boolean;
|
|
193
205
|
try {
|
|
194
|
-
|
|
195
|
-
// batched across all sets.
|
|
196
|
-
pk = PublicKey.fromBytes(pubkey);
|
|
197
|
-
sig = Signature.fromBytes(signature);
|
|
206
|
+
chunkValid = verifySignatureSets(chunk);
|
|
198
207
|
} catch (_) {
|
|
199
|
-
|
|
200
|
-
continue;
|
|
208
|
+
chunkValid = false;
|
|
201
209
|
}
|
|
202
|
-
const msg = computeSigningRoot(ssz.phase0.DepositMessage, {pubkey, withdrawalCredentials, amount}, domain);
|
|
203
|
-
signatureSets.push({pk, msg, sig});
|
|
204
|
-
signatureSetDepositIndices.push(i);
|
|
205
|
-
}
|
|
206
210
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
// Deposit pubkeys and signatures are untrusted, so group + infinity checks are required.
|
|
212
|
-
// The trailing (true, true) args delegate those checks to blst, amortized across the batch.
|
|
213
|
-
let batchValid: boolean;
|
|
214
|
-
try {
|
|
215
|
-
batchValid =
|
|
216
|
-
signatureSets.length >= 2
|
|
217
|
-
? verifyMultipleAggregateSignatures(signatureSets, true, true)
|
|
218
|
-
: verify(signatureSets[0].msg, signatureSets[0].pk, signatureSets[0].sig, true, true);
|
|
219
|
-
} catch (_) {
|
|
220
|
-
batchValid = false;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
if (batchValid) {
|
|
224
|
-
for (const depositIndex of signatureSetDepositIndices) {
|
|
225
|
-
results[depositIndex] = true;
|
|
211
|
+
if (chunkValid) {
|
|
212
|
+
results.fill(true, chunkStart, chunkStart + chunk.length);
|
|
213
|
+
continue;
|
|
226
214
|
}
|
|
227
|
-
|
|
228
|
-
for (let
|
|
215
|
+
|
|
216
|
+
for (let i = 0; i < chunk.length; i++) {
|
|
229
217
|
try {
|
|
230
|
-
if (
|
|
231
|
-
results[
|
|
218
|
+
if (verifySignatureSets([chunk[i]])) {
|
|
219
|
+
results[chunkStart + i] = true;
|
|
232
220
|
}
|
|
233
221
|
} catch (_) {
|
|
234
|
-
//
|
|
222
|
+
// Invalid point or malformed bytes leave this deposit false.
|
|
235
223
|
}
|
|
236
224
|
}
|
|
237
225
|
}
|