@aztec/node-keystore 3.0.0-nightly.20251214 → 3.0.0-nightly.20251217
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/dest/keystore_manager.d.ts +4 -4
- package/dest/keystore_manager.d.ts.map +1 -1
- package/dest/keystore_manager.js +19 -4
- package/dest/loader.d.ts +1 -1
- package/dest/loader.d.ts.map +1 -1
- package/dest/loader.js +51 -3
- package/dest/schemas.d.ts +1949 -3
- package/dest/schemas.d.ts.map +1 -1
- package/dest/schemas.js +49 -5
- package/dest/types.d.ts +13 -6
- package/dest/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/keystore_manager.ts +29 -4
- package/src/loader.ts +57 -2
- package/src/schemas.ts +54 -5
- package/src/types.ts +12 -5
|
@@ -54,7 +54,7 @@ export declare class KeystoreManager {
|
|
|
54
54
|
*/
|
|
55
55
|
createAttesterSigners(validatorIndex: number): EthSigner[];
|
|
56
56
|
/**
|
|
57
|
-
* Create signers for validator publisher accounts (falls back to attester if not specified)
|
|
57
|
+
* Create signers for validator publisher accounts (falls back to keystore-level publisher, then to attester if not specified)
|
|
58
58
|
*/
|
|
59
59
|
createPublisherSigners(validatorIndex: number): EthSigner[];
|
|
60
60
|
createAllValidatorPublisherSigners(): EthSigner[];
|
|
@@ -78,11 +78,11 @@ export declare class KeystoreManager {
|
|
|
78
78
|
*/
|
|
79
79
|
getValidatorCount(): number;
|
|
80
80
|
/**
|
|
81
|
-
* Get coinbase address for validator (falls back to the specific attester address)
|
|
81
|
+
* Get coinbase address for validator (falls back to keystore-level coinbase, then to the specific attester address)
|
|
82
82
|
*/
|
|
83
83
|
getCoinbaseAddress(validatorIndex: number, attesterAddress: EthAddress): EthAddress;
|
|
84
84
|
/**
|
|
85
|
-
* Get fee recipient for validator
|
|
85
|
+
* Get fee recipient for validator (falls back to keystore-level feeRecipient)
|
|
86
86
|
*/
|
|
87
87
|
getFeeRecipient(validatorIndex: number): AztecAddress;
|
|
88
88
|
/**
|
|
@@ -136,4 +136,4 @@ export declare class KeystoreManager {
|
|
|
136
136
|
/** Extract ETH accounts from AttesterAccounts */
|
|
137
137
|
private extractEthAccountsFromAttester;
|
|
138
138
|
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5c3RvcmVfbWFuYWdlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2tleXN0b3JlX21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFLaEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLaEQsT0FBTyxLQUFLLEVBSVYsV0FBVyxFQUVYLHFCQUFxQixFQUNyQixRQUFRLEVBRVIsY0FBYyxFQUNkLGlCQUFpQixJQUFJLHVCQUF1QixFQUM3QyxNQUFNLFlBQVksQ0FBQztBQUVwQjs7R0FFRztBQUNILHFCQUFhLGFBQWMsU0FBUSxLQUFLO0lBR3BCLEtBQUssQ0FBQztJQUZ4QixZQUNFLE9BQU8sRUFBRSxNQUFNLEVBQ0MsS0FBSyxDQUFDLG1CQUFPLEVBSTlCO0NBQ0Y7QUFFRDs7R0FFRztBQUNILHFCQUFhLGVBQWU7SUFDMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQVc7SUFFcEM7Ozs7T0FJRztJQUNILFlBQVksUUFBUSxFQUFFLFFBQVEsRUFHN0I7SUFFRDs7O09BR0c7SUFDRyxlQUFlLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQXNFckM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQywrQkFBK0I7SUFrQnZDOzs7T0FHRztJQUNILE9BQU8sQ0FBQywwQ0FBMEM7SUFLbEQ7O09BRUc7SUFDSCxPQUFPLENBQUMsMkNBQTJDO0lBK0NuRDs7T0FFRztJQUNILHFCQUFxQixDQUFDLGNBQWMsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUFFLENBSXpEO0lBRUQ7O09BRUc7SUFDSCxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFBRSxDQW9CMUQ7SUFFRCxrQ0FBa0MsSUFBSSxTQUFTLEVBQUUsQ0FTaEQ7SUFFRDs7T0FFRztJQUNILG9CQUFvQixJQUFJLFNBQVMsRUFBRSxDQU1sQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLElBQUk7UUFBRSxFQUFFLEVBQUUsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQTtLQUFFLEdBQUcsU0FBUyxDQStCdEY7SUFFRDs7T0FFRztJQUNILFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLHVCQUF1QixDQUtuRDtJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLElBQUksTUFBTSxDQUUxQjtJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsVUFBVSxHQUFHLFVBQVUsQ0FjbEY7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxjQUFjLEVBQUUsTUFBTSxHQUFHLFlBQVksQ0FlcEQ7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUU1QztJQUVEOzs7T0FHRztJQUNILGVBQWUsSUFBSSxjQUFjLEdBQUcsU0FBUyxDQUU1QztJQUVEOzs7T0FHRztJQUNILHVDQUF1QyxJQUFJLElBQUksQ0FtQjlDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsNEJBQTRCO0lBK0JwQzs7T0FFRztJQUNILE9BQU8sQ0FBQywwQkFBMEI7SUEyQ2xDOztPQUVHO0lBQ0gsT0FBTyxDQUFDLHNCQUFzQjtJQWtEOUI7O09BRUc7SUFDSCxPQUFPLENBQUMsZ0NBQWdDO0lBd0J4Qzs7T0FFRztJQUNILE9BQU8sQ0FBQyx5QkFBeUI7SUE4QmpDOztPQUVHO0lBQ0csV0FBVyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBRTFFO0lBRUQ7O09BRUc7SUFDRyxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUV6RjtJQUVEOzs7T0FHRztJQUNILDhCQUE4QixDQUM1QixjQUFjLEVBQUUsTUFBTSxFQUN0QixlQUFlLEVBQUUsVUFBVSxHQUMxQixxQkFBcUIsR0FBRyxTQUFTLENBd0duQztJQUVELGlEQUFpRDtJQUNqRCxPQUFPLENBQUMsOEJBQThCO0NBeUJ2QyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keystore_manager.d.ts","sourceRoot":"","sources":["../src/keystore_manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAKhE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAKhD,OAAO,KAAK,EAIV,WAAW,EAEX,qBAAqB,EACrB,QAAQ,EAER,cAAc,EACd,iBAAiB,IAAI,uBAAuB,EAC7C,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IAGpB,KAAK,CAAC;IAFxB,YACE,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,mBAAO,EAI9B;CACF;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IAEpC;;;;OAIG;IACH,YAAY,QAAQ,EAAE,QAAQ,EAG7B;IAED;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAsErC;IAED;;;;;OAKG;IACH,OAAO,CAAC,+BAA+B;IAkBvC;;;OAGG;IACH,OAAO,CAAC,0CAA0C;IAKlD;;OAEG;IACH,OAAO,CAAC,2CAA2C;IA+CnD;;OAEG;IACH,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,CAIzD;IAED;;OAEG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"keystore_manager.d.ts","sourceRoot":"","sources":["../src/keystore_manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAKhE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAKhD,OAAO,KAAK,EAIV,WAAW,EAEX,qBAAqB,EACrB,QAAQ,EAER,cAAc,EACd,iBAAiB,IAAI,uBAAuB,EAC7C,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IAGpB,KAAK,CAAC;IAFxB,YACE,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,mBAAO,EAI9B;CACF;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IAEpC;;;;OAIG;IACH,YAAY,QAAQ,EAAE,QAAQ,EAG7B;IAED;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAsErC;IAED;;;;;OAKG;IACH,OAAO,CAAC,+BAA+B;IAkBvC;;;OAGG;IACH,OAAO,CAAC,0CAA0C;IAKlD;;OAEG;IACH,OAAO,CAAC,2CAA2C;IA+CnD;;OAEG;IACH,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,CAIzD;IAED;;OAEG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,CAoB1D;IAED,kCAAkC,IAAI,SAAS,EAAE,CAShD;IAED;;OAEG;IACH,oBAAoB,IAAI,SAAS,EAAE,CAMlC;IAED;;OAEG;IACH,mBAAmB,IAAI;QAAE,EAAE,EAAE,UAAU,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,SAAS,EAAE,CAAA;KAAE,GAAG,SAAS,CA+BtF;IAED;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,uBAAuB,CAKnD;IAED;;OAEG;IACH,iBAAiB,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,GAAG,UAAU,CAclF;IAED;;OAEG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,CAepD;IAED;;;OAGG;IACH,kBAAkB,IAAI,WAAW,GAAG,SAAS,CAE5C;IAED;;;OAGG;IACH,eAAe,IAAI,cAAc,GAAG,SAAS,CAE5C;IAED;;;OAGG;IACH,uCAAuC,IAAI,IAAI,CAmB9C;IAED;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA+BpC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA2ClC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkD9B;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAwBxC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA8BjC;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAE1E;IAED;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,CAEzF;IAED;;;OAGG;IACH,8BAA8B,CAC5B,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,UAAU,GAC1B,qBAAqB,GAAG,SAAS,CAwGnC;IAED,iDAAiD;IACjD,OAAO,CAAC,8BAA8B;CAyBvC"}
|
package/dest/keystore_manager.js
CHANGED
|
@@ -170,12 +170,16 @@ import { LocalSigner, RemoteSigner } from './signer.js';
|
|
|
170
170
|
return this.createSignersFromEthAccounts(ethAccounts, validator.remoteSigner || this.keystore.remoteSigner);
|
|
171
171
|
}
|
|
172
172
|
/**
|
|
173
|
-
* Create signers for validator publisher accounts (falls back to attester if not specified)
|
|
173
|
+
* Create signers for validator publisher accounts (falls back to keystore-level publisher, then to attester if not specified)
|
|
174
174
|
*/ createPublisherSigners(validatorIndex) {
|
|
175
175
|
const validator = this.getValidator(validatorIndex);
|
|
176
176
|
if (validator.publisher) {
|
|
177
177
|
return this.createSignersFromEthAccounts(validator.publisher, validator.remoteSigner || this.keystore.remoteSigner);
|
|
178
178
|
}
|
|
179
|
+
// Fall back to keystore-level publisher
|
|
180
|
+
if (this.keystore.publisher) {
|
|
181
|
+
return this.createSignersFromEthAccounts(this.keystore.publisher, validator.remoteSigner || this.keystore.remoteSigner);
|
|
182
|
+
}
|
|
179
183
|
// Fall back to attester signers
|
|
180
184
|
return this.createAttesterSigners(validatorIndex);
|
|
181
185
|
}
|
|
@@ -239,20 +243,31 @@ import { LocalSigner, RemoteSigner } from './signer.js';
|
|
|
239
243
|
return this.keystore.validators?.length || 0;
|
|
240
244
|
}
|
|
241
245
|
/**
|
|
242
|
-
* Get coinbase address for validator (falls back to the specific attester address)
|
|
246
|
+
* Get coinbase address for validator (falls back to keystore-level coinbase, then to the specific attester address)
|
|
243
247
|
*/ getCoinbaseAddress(validatorIndex, attesterAddress) {
|
|
244
248
|
const validator = this.getValidator(validatorIndex);
|
|
245
249
|
if (validator.coinbase) {
|
|
246
250
|
return validator.coinbase;
|
|
247
251
|
}
|
|
252
|
+
// Fall back to keystore-level coinbase
|
|
253
|
+
if (this.keystore.coinbase) {
|
|
254
|
+
return this.keystore.coinbase;
|
|
255
|
+
}
|
|
248
256
|
// Fall back to the specific attester address
|
|
249
257
|
return attesterAddress;
|
|
250
258
|
}
|
|
251
259
|
/**
|
|
252
|
-
* Get fee recipient for validator
|
|
260
|
+
* Get fee recipient for validator (falls back to keystore-level feeRecipient)
|
|
253
261
|
*/ getFeeRecipient(validatorIndex) {
|
|
254
262
|
const validator = this.getValidator(validatorIndex);
|
|
255
|
-
|
|
263
|
+
if (validator.feeRecipient) {
|
|
264
|
+
return validator.feeRecipient;
|
|
265
|
+
}
|
|
266
|
+
// Fall back to keystore-level feeRecipient
|
|
267
|
+
if (this.keystore.feeRecipient) {
|
|
268
|
+
return this.keystore.feeRecipient;
|
|
269
|
+
}
|
|
270
|
+
throw new KeystoreError(`No feeRecipient configured for validator ${validatorIndex}. You can set it at validator or keystore level.`);
|
|
256
271
|
}
|
|
257
272
|
/**
|
|
258
273
|
* Get the raw slasher configuration as provided in the keystore file.
|
package/dest/loader.d.ts
CHANGED
|
@@ -59,4 +59,4 @@ export declare function loadMultipleKeystores(paths: string | string[]): KeyStor
|
|
|
59
59
|
* @throws KeyStoreLoadError When duplicate attester keys are found or multiple prover configs exist.
|
|
60
60
|
*/
|
|
61
61
|
export declare function mergeKeystores(keystores: KeyStore[]): KeyStore;
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNBLE9BQU8sS0FBSyxFQUFlLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUl4RDs7R0FFRztBQUNILHFCQUFhLGlCQUFrQixTQUFRLEtBQUs7SUFHakMsUUFBUSxFQUFFLE1BQU07SUFDUCxLQUFLLENBQUM7SUFIeEIsWUFDRSxPQUFPLEVBQUUsTUFBTSxFQUNSLFFBQVEsRUFBRSxNQUFNLEVBQ1AsS0FBSyxDQUFDLG1CQUFPLEVBSTlCO0NBQ0Y7QUFFRDs7Ozs7O0dBTUc7QUFDSCx3QkFBZ0IsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxRQUFRLENBdUIzRDtBQUVEOzs7Ozs7R0FNRztBQUNILHdCQUFnQixxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLFFBQVEsRUFBRSxDQW1DakU7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCx3QkFBZ0IsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsUUFBUSxFQUFFLENBdUJ0RDtBQUVEOzs7Ozs7R0FNRztBQUNILHdCQUFnQixxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxHQUFHLFFBQVEsRUFBRSxDQThCMUU7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCx3QkFBZ0IsY0FBYyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxRQUFRLENBdUk5RCJ9
|
package/dest/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIxD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAGjC,QAAQ,EAAE,MAAM;IACP,KAAK,CAAC;IAHxB,YACE,OAAO,EAAE,MAAM,EACR,QAAQ,EAAE,MAAM,EACP,KAAK,CAAC,mBAAO,EAI9B;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAuB3D;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmCjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAuBtD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,QAAQ,EAAE,CA8B1E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIxD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAGjC,QAAQ,EAAE,MAAM;IACP,KAAK,CAAC;IAHxB,YACE,OAAO,EAAE,MAAM,EACR,QAAQ,EAAE,MAAM,EACP,KAAK,CAAC,mBAAO,EAI9B;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAuB3D;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmCjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAuBtD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,QAAQ,EAAE,CA8B1E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAuI9D"}
|
package/dest/loader.js
CHANGED
|
@@ -168,12 +168,17 @@ const logger = createLogger('node-keystore:loader');
|
|
|
168
168
|
}
|
|
169
169
|
// Track attester addresses to prevent duplicates
|
|
170
170
|
const attesterAddresses = new Set();
|
|
171
|
+
// Determine schema version: use v2 if any input is v2
|
|
172
|
+
const schemaVersion = keystores.some((ks)=>ks.schemaVersion === 2) ? 2 : 1;
|
|
171
173
|
const merged = {
|
|
172
|
-
schemaVersion
|
|
174
|
+
schemaVersion,
|
|
173
175
|
validators: [],
|
|
174
176
|
slasher: undefined,
|
|
175
177
|
remoteSigner: undefined,
|
|
176
|
-
prover: undefined
|
|
178
|
+
prover: undefined,
|
|
179
|
+
publisher: undefined,
|
|
180
|
+
coinbase: undefined,
|
|
181
|
+
feeRecipient: undefined
|
|
177
182
|
};
|
|
178
183
|
for(let i = 0; i < keystores.length; i++){
|
|
179
184
|
const keystore = keystores[i];
|
|
@@ -189,8 +194,14 @@ const logger = createLogger('node-keystore:loader');
|
|
|
189
194
|
}
|
|
190
195
|
attesterAddresses.add(key);
|
|
191
196
|
}
|
|
197
|
+
// When merging v1 validators into a v2+ result, preserve original fallback behavior
|
|
198
|
+
// by explicitly setting publisher/coinbase/feeRecipient if they're missing
|
|
199
|
+
if (keystore.schemaVersion !== schemaVersion) {
|
|
200
|
+
throw new KeyStoreLoadError(`Cannot merge keystores with different schema versions: ${keystore.schemaVersion} and ${schemaVersion}`, `keystores[${i}].schemaVersion`);
|
|
201
|
+
} else {
|
|
202
|
+
merged.validators.push(validator);
|
|
203
|
+
}
|
|
192
204
|
}
|
|
193
|
-
merged.validators.push(...keystore.validators);
|
|
194
205
|
}
|
|
195
206
|
// Merge slasher (accumulate all)
|
|
196
207
|
if (keystore.slasher) {
|
|
@@ -222,6 +233,43 @@ const logger = createLogger('node-keystore:loader');
|
|
|
222
233
|
}
|
|
223
234
|
merged.prover = keystore.prover;
|
|
224
235
|
}
|
|
236
|
+
// Merge top-level publisher (accumulate all, unless conflicting MnemonicConfigs)
|
|
237
|
+
if (keystore.publisher) {
|
|
238
|
+
if (!merged.publisher) {
|
|
239
|
+
merged.publisher = keystore.publisher;
|
|
240
|
+
} else {
|
|
241
|
+
const isMnemonic = (accounts)=>typeof accounts === 'object' && accounts !== null && 'mnemonic' in accounts;
|
|
242
|
+
// If either is a mnemonic, warn and use last one (can't merge mnemonics)
|
|
243
|
+
if (isMnemonic(merged.publisher) || isMnemonic(keystore.publisher)) {
|
|
244
|
+
logger.warn('Multiple default publisher configurations found with mnemonic, using the last one (cannot merge mnemonics)');
|
|
245
|
+
merged.publisher = keystore.publisher;
|
|
246
|
+
} else {
|
|
247
|
+
// Both are non-mnemonic, accumulate them
|
|
248
|
+
const toArray = (accounts)=>Array.isArray(accounts) ? accounts : [
|
|
249
|
+
accounts
|
|
250
|
+
];
|
|
251
|
+
const combined = [
|
|
252
|
+
...toArray(merged.publisher),
|
|
253
|
+
...toArray(keystore.publisher)
|
|
254
|
+
];
|
|
255
|
+
merged.publisher = combined;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// Merge top-level coinbase (last one wins, but warn about conflicts)
|
|
260
|
+
if (keystore.coinbase) {
|
|
261
|
+
if (merged.coinbase) {
|
|
262
|
+
logger.warn('Multiple default coinbase addresses found, using the last one');
|
|
263
|
+
}
|
|
264
|
+
merged.coinbase = keystore.coinbase;
|
|
265
|
+
}
|
|
266
|
+
// Merge top-level feeRecipient (last one wins, but warn about conflicts)
|
|
267
|
+
if (keystore.feeRecipient) {
|
|
268
|
+
if (merged.feeRecipient) {
|
|
269
|
+
logger.warn('Multiple default feeRecipient addresses found, using the last one');
|
|
270
|
+
}
|
|
271
|
+
merged.feeRecipient = keystore.feeRecipient;
|
|
272
|
+
}
|
|
225
273
|
}
|
|
226
274
|
// Clean up empty arrays
|
|
227
275
|
if (merged.validators.length === 0) {
|