@hyperlane-xyz/cli 34.0.0 → 35.0.0

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/bundle/index.js CHANGED
@@ -128363,7 +128363,7 @@ __webpack_unused_export__ = ({ value: true });
128363
128363
  let converter;
128364
128364
  {
128365
128365
  try {
128366
- converter = __nccwpck_require__(8441)('bigint_buffer');
128366
+ converter = __WEBPACK_EXTERNAL_createRequire(import.meta.url)(__nccwpck_require__.ab + "build/Release/bigint_buffer.node");
128367
128367
  }
128368
128368
  catch (e) {
128369
128369
  // Silently fall back to pure JS implementation
@@ -128436,234 +128436,6 @@ function toBufferBE(num, width) {
128436
128436
  exports.zy = toBufferBE;
128437
128437
 
128438
128438
 
128439
- /***/ }),
128440
-
128441
- /***/ 8441:
128442
- /***/ ((module, exports, __nccwpck_require__) => {
128443
-
128444
- /**
128445
- * Module dependencies.
128446
- */
128447
-
128448
- var fs = __nccwpck_require__(79896),
128449
- path = __nccwpck_require__(16928),
128450
- fileURLToPath = __nccwpck_require__(53904),
128451
- join = path.join,
128452
- dirname = path.dirname,
128453
- exists =
128454
- (fs.accessSync &&
128455
- function(path) {
128456
- try {
128457
- fs.accessSync(path);
128458
- } catch (e) {
128459
- return false;
128460
- }
128461
- return true;
128462
- }) ||
128463
- fs.existsSync ||
128464
- path.existsSync,
128465
- defaults = {
128466
- arrow: process.env.NODE_BINDINGS_ARROW || ' → ',
128467
- compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled',
128468
- platform: process.platform,
128469
- arch: process.arch,
128470
- nodePreGyp:
128471
- 'node-v' +
128472
- process.versions.modules +
128473
- '-' +
128474
- process.platform +
128475
- '-' +
128476
- process.arch,
128477
- version: process.versions.node,
128478
- bindings: 'bindings.node',
128479
- try: [
128480
- // node-gyp's linked version in the "build" dir
128481
- ['module_root', 'build', 'bindings'],
128482
- // node-waf and gyp_addon (a.k.a node-gyp)
128483
- ['module_root', 'build', 'Debug', 'bindings'],
128484
- ['module_root', 'build', 'Release', 'bindings'],
128485
- // Debug files, for development (legacy behavior, remove for node v0.9)
128486
- ['module_root', 'out', 'Debug', 'bindings'],
128487
- ['module_root', 'Debug', 'bindings'],
128488
- // Release files, but manually compiled (legacy behavior, remove for node v0.9)
128489
- ['module_root', 'out', 'Release', 'bindings'],
128490
- ['module_root', 'Release', 'bindings'],
128491
- // Legacy from node-waf, node <= 0.4.x
128492
- ['module_root', 'build', 'default', 'bindings'],
128493
- // Production "Release" buildtype binary (meh...)
128494
- ['module_root', 'compiled', 'version', 'platform', 'arch', 'bindings'],
128495
- // node-qbs builds
128496
- ['module_root', 'addon-build', 'release', 'install-root', 'bindings'],
128497
- ['module_root', 'addon-build', 'debug', 'install-root', 'bindings'],
128498
- ['module_root', 'addon-build', 'default', 'install-root', 'bindings'],
128499
- // node-pre-gyp path ./lib/binding/{node_abi}-{platform}-{arch}
128500
- ['module_root', 'lib', 'binding', 'nodePreGyp', 'bindings']
128501
- ]
128502
- };
128503
-
128504
- /**
128505
- * The main `bindings()` function loads the compiled bindings for a given module.
128506
- * It uses V8's Error API to determine the parent filename that this function is
128507
- * being invoked from, which is then used to find the root directory.
128508
- */
128509
-
128510
- function bindings(opts) {
128511
- // Argument surgery
128512
- if (typeof opts == 'string') {
128513
- opts = { bindings: opts };
128514
- } else if (!opts) {
128515
- opts = {};
128516
- }
128517
-
128518
- // maps `defaults` onto `opts` object
128519
- Object.keys(defaults).map(function(i) {
128520
- if (!(i in opts)) opts[i] = defaults[i];
128521
- });
128522
-
128523
- // Get the module root
128524
- if (!opts.module_root) {
128525
- opts.module_root = exports.getRoot(exports.getFileName());
128526
- }
128527
-
128528
- // Ensure the given bindings name ends with .node
128529
- if (path.extname(opts.bindings) != '.node') {
128530
- opts.bindings += '.node';
128531
- }
128532
-
128533
- // https://github.com/webpack/webpack/issues/4175#issuecomment-342931035
128534
- var requireFunc =
128535
- true
128536
- ? eval("require")
128537
- : 0;
128538
-
128539
- var tries = [],
128540
- i = 0,
128541
- l = opts.try.length,
128542
- n,
128543
- b,
128544
- err;
128545
-
128546
- for (; i < l; i++) {
128547
- n = join.apply(
128548
- null,
128549
- opts.try[i].map(function(p) {
128550
- return opts[p] || p;
128551
- })
128552
- );
128553
- tries.push(n);
128554
- try {
128555
- b = opts.path ? requireFunc.resolve(n) : requireFunc(n);
128556
- if (!opts.path) {
128557
- b.path = n;
128558
- }
128559
- return b;
128560
- } catch (e) {
128561
- if (e.code !== 'MODULE_NOT_FOUND' &&
128562
- e.code !== 'QUALIFIED_PATH_RESOLUTION_FAILED' &&
128563
- !/not find/i.test(e.message)) {
128564
- throw e;
128565
- }
128566
- }
128567
- }
128568
-
128569
- err = new Error(
128570
- 'Could not locate the bindings file. Tried:\n' +
128571
- tries
128572
- .map(function(a) {
128573
- return opts.arrow + a;
128574
- })
128575
- .join('\n')
128576
- );
128577
- err.tries = tries;
128578
- throw err;
128579
- }
128580
- module.exports = exports = bindings;
128581
-
128582
- /**
128583
- * Gets the filename of the JavaScript file that invokes this function.
128584
- * Used to help find the root directory of a module.
128585
- * Optionally accepts an filename argument to skip when searching for the invoking filename
128586
- */
128587
-
128588
- exports.getFileName = function getFileName(calling_file) {
128589
- var origPST = Error.prepareStackTrace,
128590
- origSTL = Error.stackTraceLimit,
128591
- dummy = {},
128592
- fileName;
128593
-
128594
- Error.stackTraceLimit = 10;
128595
-
128596
- Error.prepareStackTrace = function(e, st) {
128597
- for (var i = 0, l = st.length; i < l; i++) {
128598
- fileName = st[i].getFileName();
128599
- if (fileName !== __filename) {
128600
- if (calling_file) {
128601
- if (fileName !== calling_file) {
128602
- return;
128603
- }
128604
- } else {
128605
- return;
128606
- }
128607
- }
128608
- }
128609
- };
128610
-
128611
- // run the 'prepareStackTrace' function above
128612
- Error.captureStackTrace(dummy);
128613
- dummy.stack;
128614
-
128615
- // cleanup
128616
- Error.prepareStackTrace = origPST;
128617
- Error.stackTraceLimit = origSTL;
128618
-
128619
- // handle filename that starts with "file://"
128620
- var fileSchema = 'file://';
128621
- if (fileName.indexOf(fileSchema) === 0) {
128622
- fileName = fileURLToPath(fileName);
128623
- }
128624
-
128625
- return fileName;
128626
- };
128627
-
128628
- /**
128629
- * Gets the root directory of a module, given an arbitrary filename
128630
- * somewhere in the module tree. The "root directory" is the directory
128631
- * containing the `package.json` file.
128632
- *
128633
- * In: /home/nate/node-native-module/lib/index.js
128634
- * Out: /home/nate/node-native-module
128635
- */
128636
-
128637
- exports.getRoot = function getRoot(file) {
128638
- var dir = dirname(file),
128639
- prev;
128640
- while (true) {
128641
- if (dir === '.') {
128642
- // Avoids an infinite loop in rare cases, like the REPL
128643
- dir = process.cwd();
128644
- }
128645
- if (
128646
- exists(join(dir, 'package.json')) ||
128647
- exists(join(dir, 'node_modules'))
128648
- ) {
128649
- // Found the 'package.json' file or 'node_modules' dir; we're done
128650
- return dir;
128651
- }
128652
- if (prev === dir) {
128653
- // Got to the top
128654
- throw new Error(
128655
- 'Could not find module root given file: "' +
128656
- file +
128657
- '". Do you have a `package.json` file? '
128658
- );
128659
- }
128660
- // Try the parent dir next
128661
- prev = dir;
128662
- dir = join(dir, '..');
128663
- }
128664
- };
128665
-
128666
-
128667
128439
  /***/ }),
128668
128440
 
128669
128441
  /***/ 73258:
@@ -205000,79 +204772,6 @@ module.exports.main = main;
205000
204772
  module.exports.windows = windows;
205001
204773
 
205002
204774
 
205003
- /***/ }),
205004
-
205005
- /***/ 53904:
205006
- /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
205007
-
205008
-
205009
- /**
205010
- * Module dependencies.
205011
- */
205012
-
205013
- var sep = (__nccwpck_require__(16928).sep) || '/';
205014
-
205015
- /**
205016
- * Module exports.
205017
- */
205018
-
205019
- module.exports = fileUriToPath;
205020
-
205021
- /**
205022
- * File URI to Path function.
205023
- *
205024
- * @param {String} uri
205025
- * @return {String} path
205026
- * @api public
205027
- */
205028
-
205029
- function fileUriToPath (uri) {
205030
- if ('string' != typeof uri ||
205031
- uri.length <= 7 ||
205032
- 'file://' != uri.substring(0, 7)) {
205033
- throw new TypeError('must pass in a file:// URI to convert to a file path');
205034
- }
205035
-
205036
- var rest = decodeURI(uri.substring(7));
205037
- var firstSlash = rest.indexOf('/');
205038
- var host = rest.substring(0, firstSlash);
205039
- var path = rest.substring(firstSlash + 1);
205040
-
205041
- // 2. Scheme Definition
205042
- // As a special case, <host> can be the string "localhost" or the empty
205043
- // string; this is interpreted as "the machine from which the URL is
205044
- // being interpreted".
205045
- if ('localhost' == host) host = '';
205046
-
205047
- if (host) {
205048
- host = sep + sep + host;
205049
- }
205050
-
205051
- // 3.2 Drives, drive letters, mount points, file system root
205052
- // Drive letters are mapped into the top of a file URI in various ways,
205053
- // depending on the implementation; some applications substitute
205054
- // vertical bar ("|") for the colon after the drive letter, yielding
205055
- // "file:///c|/tmp/test.txt". In some cases, the colon is left
205056
- // unchanged, as in "file:///c:/tmp/test.txt". In other cases, the
205057
- // colon is simply omitted, as in "file:///c/tmp/test.txt".
205058
- path = path.replace(/^(.+)\|/, '$1:');
205059
-
205060
- // for Windows, we need to invert the path separators from what a URI uses
205061
- if (sep == '\\') {
205062
- path = path.replace(/\//g, '\\');
205063
- }
205064
-
205065
- if (/^.+\:/.test(path)) {
205066
- // has Windows drive at beginning of path
205067
- } else {
205068
- // unix path…
205069
- path = sep + path;
205070
- }
205071
-
205072
- return host + path;
205073
- }
205074
-
205075
-
205076
204775
  /***/ }),
205077
204776
 
205078
204777
  /***/ 18970:
@@ -672786,6 +672485,18 @@ class AleoBase {
672786
672485
  programManager.setAccount(account);
672787
672486
  return programManager;
672788
672487
  }
672488
+ get networkPath() {
672489
+ return this.chainId === _utils_types_js__WEBPACK_IMPORTED_MODULE_3__/* .AleoNetworkId */ .lH.TESTNET ? 'testnet' : 'mainnet';
672490
+ }
672491
+ async findBlockHashByTxId(txId) {
672492
+ const url = `${this.rpcUrls[0]}/${this.networkPath}/find/blockHash/${txId}`;
672493
+ return (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__/* .retryAsync */ .tH)(async () => {
672494
+ const res = await fetch(url);
672495
+ if (!res.ok)
672496
+ throw new Error(`HTTP ${res.status}`);
672497
+ return JSON.parse(await res.text());
672498
+ }, _utils_helper_js__WEBPACK_IMPORTED_MODULE_2__/* .RETRY_ATTEMPTS */ .Km, _utils_helper_js__WEBPACK_IMPORTED_MODULE_2__/* .RETRY_DELAY_MS */ .k);
672499
+ }
672789
672500
  async queryMappingValue(programId, mappingName, key) {
672790
672501
  try {
672791
672502
  const result = await (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__/* .retryAsync */ .tH)(() => this.aleoClient.getProgramMappingValue(programId, mappingName, key), _utils_helper_js__WEBPACK_IMPORTED_MODULE_2__/* .RETRY_ATTEMPTS */ .Km, _utils_helper_js__WEBPACK_IMPORTED_MODULE_2__/* .RETRY_DELAY_MS */ .k);
@@ -672979,6 +672690,16 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_pro
672979
672690
 
672980
672691
  class AleoProvider extends _base_js__WEBPACK_IMPORTED_MODULE_6__/* .AleoBase */ .N {
672981
672692
  transactionFeeCache = {};
672693
+ signerTransferCache = new Map();
672694
+ async hasSignerTransferFunctions(programId) {
672695
+ if (this.signerTransferCache.has(programId)) {
672696
+ return this.signerTransferCache.get(programId);
672697
+ }
672698
+ const program = await this.aleoClient.getProgram(programId);
672699
+ const hasSigner = program.toString().includes('transfer_remote_as_signer');
672700
+ this.signerTransferCache.set(programId, hasSigner);
672701
+ return hasSigner;
672702
+ }
672982
672703
  static async connect(rpcUrls, chainId) {
672983
672704
  return new AleoProvider(rpcUrls, chainId);
672984
672705
  }
@@ -673178,6 +672899,28 @@ class AleoProvider extends _base_js__WEBPACK_IMPORTED_MODULE_6__/* .AleoBase */
673178
672899
  }
673179
672900
  }
673180
672901
  }
672902
+ // ### QUERY DISPATCH ###
672903
+ async getDispatchNonceForTx(mailboxAddress, txId) {
672904
+ const { programId } = (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_3__/* .fromAleoAddress */ .kz)(mailboxAddress);
672905
+ const blockHash = await this.findBlockHashByTxId(txId);
672906
+ const block = await this.aleoClient.getBlockByHash(blockHash);
672907
+ const blockHeight = Number(block.header.metadata.height);
672908
+ const nonce = await this.queryMappingValue(programId, 'dispatch_event_index', `${blockHeight}u32`);
672909
+ return nonce != null ? nonce : null;
672910
+ }
672911
+ async getDispatchedMessageId(mailboxAddress, nonce) {
672912
+ const { programId } = (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_3__/* .fromAleoAddress */ .kz)(mailboxAddress);
672913
+ const raw = await this.queryMappingString(programId, 'dispatch_id_events', `${nonce}u32`);
672914
+ return (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_3__/* .u128PairToBytes32 */ .Gb)(raw);
672915
+ }
672916
+ async getDispatchedDestinationDomain(mailboxAddress, nonce) {
672917
+ const { programId } = (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_3__/* .fromAleoAddress */ .kz)(mailboxAddress);
672918
+ const result = await this.queryMappingValue(programId, 'dispatch_events', `${nonce}u32`);
672919
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_7__/* .assert */ .v)(result != null, `No dispatch_events entry at nonce ${nonce} (mailbox=${mailboxAddress})`);
672920
+ const domain = result['destination_domain'];
672921
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_7__/* .assert */ .v)(typeof domain === 'number', `destination_domain is not a number: ${domain}`);
672922
+ return domain;
672923
+ }
673181
672924
  async getQuotes(gasLimit, destinationDomainId, hooks) {
673182
672925
  let total_quote = new bignumber_js__WEBPACK_IMPORTED_MODULE_1__/* .BigNumber */ .g(0);
673183
672926
  const quotes = [];
@@ -673294,13 +673037,16 @@ class AleoProvider extends _base_js__WEBPACK_IMPORTED_MODULE_6__/* .AleoBase */
673294
673037
  required_hook:${mailbox.requiredHook ? (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_3__/* .fromAleoAddress */ .kz)(mailbox.requiredHook).address : _utils_helper_js__WEBPACK_IMPORTED_MODULE_3__/* .ALEO_NULL_ADDRESS */ .B$}
673295
673038
  }`;
673296
673039
  const amount = `${req.amount}${tokenType === _hyperlane_xyz_provider_sdk__WEBPACK_IMPORTED_MODULE_2__/* .AltVM.TokenType */ .bx.ks.native ? 'u64' : 'u128'}`;
673040
+ const useSignerVariant = await this.hasSignerTransferFunctions(programId);
673297
673041
  if (req.customHookAddress) {
673298
673042
  const metadataBytes = (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_3__/* .fillArray */ .R2)([...Buffer.from((0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_8__/* .strip0x */ .LL)(req.customHookMetadata || ''), 'hex')], 64, 0);
673299
673043
  const gasLimit = _provablehq_sdk_mainnet_js__WEBPACK_IMPORTED_MODULE_0__/* .U128 */ .xQ.fromBytesLe(Uint8Array.from(metadataBytes.slice(0, 16))).toString();
673300
673044
  const hookMetadata = `{gas_limit:${gasLimit},extra_data:[${metadataBytes.map((b) => `${b}u8`).join(',')}]}`;
673301
673045
  return {
673302
673046
  programName: programId,
673303
- functionName: 'transfer_remote_with_hook',
673047
+ functionName: useSignerVariant
673048
+ ? 'transfer_remote_with_hook_as'
673049
+ : 'transfer_remote_with_hook',
673304
673050
  priorityFee: 0,
673305
673051
  privateFee: false,
673306
673052
  inputs: [
@@ -673318,7 +673064,9 @@ class AleoProvider extends _base_js__WEBPACK_IMPORTED_MODULE_6__/* .AleoBase */
673318
673064
  }
673319
673065
  return {
673320
673066
  programName: programId,
673321
- functionName: 'transfer_remote',
673067
+ functionName: useSignerVariant
673068
+ ? 'transfer_remote_as_signer'
673069
+ : 'transfer_remote',
673322
673070
  priorityFee: 0,
673323
673071
  privateFee: false,
673324
673072
  inputs: [
@@ -673346,24 +673094,26 @@ __nccwpck_require__.a(__webpack_module__, async (__webpack_handle_async_dependen
673346
673094
  /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
673347
673095
  /* harmony export */ C: () => (/* binding */ AleoSigner)
673348
673096
  /* harmony export */ });
673349
- /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(21387);
673350
- /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(73689);
673351
- /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(14918);
673352
- /* harmony import */ var _utils_helper_js__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(86255);
673353
- /* harmony import */ var _provider_js__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(18269);
673354
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_utils_helper_js__WEBPACK_IMPORTED_MODULE_0__, _provider_js__WEBPACK_IMPORTED_MODULE_1__]);
673355
- ([_utils_helper_js__WEBPACK_IMPORTED_MODULE_0__, _provider_js__WEBPACK_IMPORTED_MODULE_1__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
673097
+ /* harmony import */ var _hyperlane_xyz_provider_sdk_warp__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(17791);
673098
+ /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(21387);
673099
+ /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(73689);
673100
+ /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(14918);
673101
+ /* harmony import */ var _utils_helper_js__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(86255);
673102
+ /* harmony import */ var _provider_js__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(18269);
673103
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_utils_helper_js__WEBPACK_IMPORTED_MODULE_1__, _provider_js__WEBPACK_IMPORTED_MODULE_2__]);
673104
+ ([_utils_helper_js__WEBPACK_IMPORTED_MODULE_1__, _provider_js__WEBPACK_IMPORTED_MODULE_2__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
673105
+
673356
673106
 
673357
673107
 
673358
673108
 
673359
- class AleoSigner extends _provider_js__WEBPACK_IMPORTED_MODULE_1__/* .AleoProvider */ .t {
673109
+ class AleoSigner extends _provider_js__WEBPACK_IMPORTED_MODULE_2__/* .AleoProvider */ .t {
673360
673110
  static WARP_SUFFIX_ALREADY_DEPLOYED_ERROR = 'already deployed, please choose another suffix';
673361
673111
  programManager;
673362
673112
  static async connectWithSigner(rpcUrls, privateKey, extraParams) {
673363
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_2__/* .assert */ .v)(extraParams, `extra params not defined`);
673113
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_3__/* .assert */ .v)(extraParams, `extra params not defined`);
673364
673114
  const metadata = extraParams.metadata;
673365
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_2__/* .assert */ .v)(metadata, `metadata not defined in extra params`);
673366
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_2__/* .assert */ .v)(!(0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_3__/* .isNullish */ .u)(metadata.chainId), `chainId not defined in metadata extra params`);
673115
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_3__/* .assert */ .v)(metadata, `metadata not defined in extra params`);
673116
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_3__/* .assert */ .v)(!(0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_4__/* .isNullish */ .u)(metadata.chainId), `chainId not defined in metadata extra params`);
673367
673117
  const chainId = parseInt(metadata.chainId.toString());
673368
673118
  return new AleoSigner(rpcUrls, chainId, privateKey);
673369
673119
  }
@@ -673377,7 +673127,7 @@ class AleoSigner extends _provider_js__WEBPACK_IMPORTED_MODULE_1__/* .AleoProvid
673377
673127
  // Check if it's already deployed
673378
673128
  const isDeployed = await this.isProgramDeployed(ismManagerProgramId);
673379
673129
  if (!isDeployed) {
673380
- const suffix = (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_0__/* .getProgramSuffix */ .GC)(ismManagerProgramId);
673130
+ const suffix = (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_1__/* .getProgramSuffix */ .GC)(ismManagerProgramId);
673381
673131
  await this.deployProgram('ism_manager', suffix);
673382
673132
  }
673383
673133
  return ismManagerProgramId;
@@ -673397,16 +673147,19 @@ class AleoSigner extends _provider_js__WEBPACK_IMPORTED_MODULE_1__/* .AleoProvid
673397
673147
  err.message.includes(programId));
673398
673148
  }
673399
673149
  async getWarpTokenSuffix(tokenType, preferredSuffix, maxAttempts = 20) {
673150
+ if (tokenType === _hyperlane_xyz_provider_sdk_warp__WEBPACK_IMPORTED_MODULE_0__/* .TokenType */ .ks.native) {
673151
+ return 'credits';
673152
+ }
673400
673153
  const configuredSuffix = preferredSuffix || this.warpSuffix;
673401
673154
  if (configuredSuffix) {
673402
- const tokenProgramId = `${this.prefix}_${tokenType}_${configuredSuffix}.aleo`;
673155
+ const tokenProgramId = `${this.prefix}_warp_token_${configuredSuffix}.aleo`;
673403
673156
  const isAlreadyDeployed = await this.isProgramDeployed(tokenProgramId);
673404
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_2__/* .assert */ .v)(!isAlreadyDeployed, `Warp route with suffix ${configuredSuffix} ${AleoSigner.WARP_SUFFIX_ALREADY_DEPLOYED_ERROR}`);
673157
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_3__/* .assert */ .v)(!isAlreadyDeployed, `Warp route with suffix ${configuredSuffix} ${AleoSigner.WARP_SUFFIX_ALREADY_DEPLOYED_ERROR}`);
673405
673158
  return configuredSuffix;
673406
673159
  }
673407
673160
  for (let i = 0; i < maxAttempts; i++) {
673408
- const suffix = this.generateSuffix(_utils_helper_js__WEBPACK_IMPORTED_MODULE_0__/* .SUFFIX_LENGTH_LONG */ .SO);
673409
- const tokenProgramId = `${this.prefix}_${tokenType}_${suffix}.aleo`;
673161
+ const suffix = this.generateSuffix(_utils_helper_js__WEBPACK_IMPORTED_MODULE_1__/* .SUFFIX_LENGTH_LONG */ .SO);
673162
+ const tokenProgramId = `${this.prefix}_warp_token_${suffix}.aleo`;
673410
673163
  if (!(await this.isProgramDeployed(tokenProgramId))) {
673411
673164
  return suffix;
673412
673165
  }
@@ -673414,7 +673167,7 @@ class AleoSigner extends _provider_js__WEBPACK_IMPORTED_MODULE_1__/* .AleoProvid
673414
673167
  throw new Error(`Could not find an unused suffix for ${tokenType} after ${maxAttempts} attempts`);
673415
673168
  }
673416
673169
  async deployProgram(programName, coreSuffix, warpSuffix) {
673417
- const programs = (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_0__/* .loadProgramsInDeployOrder */ .wR)(this.prefix, programName, coreSuffix, warpSuffix);
673170
+ const programs = (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_1__/* .loadProgramsInDeployOrder */ .wR)(this.prefix, programName, coreSuffix, warpSuffix);
673418
673171
  for (const { id, program } of programs) {
673419
673172
  if (await this.isProgramDeployed(id)) {
673420
673173
  continue;
@@ -673455,7 +673208,7 @@ class AleoSigner extends _provider_js__WEBPACK_IMPORTED_MODULE_1__/* .AleoProvid
673455
673208
  async getHookManager(suffix) {
673456
673209
  const programs = await this.deployProgram('hook_manager', suffix);
673457
673210
  const hookManagerProgramId = programs['hook_manager'];
673458
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_2__/* .assert */ .v)(hookManagerProgramId, `hook_manager program not deployed`);
673211
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_3__/* .assert */ .v)(hookManagerProgramId, `hook_manager program not deployed`);
673459
673212
  return hookManagerProgramId;
673460
673213
  }
673461
673214
  supportsTransactionBatching() {
@@ -673468,7 +673221,7 @@ class AleoSigner extends _provider_js__WEBPACK_IMPORTED_MODULE_1__/* .AleoProvid
673468
673221
  const tx = this.skipProofs
673469
673222
  ? await this.programManager.buildDevnodeExecutionTransaction(transaction)
673470
673223
  : await this.programManager.buildExecutionTransaction(transaction);
673471
- const txId = await (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_4__/* .retryAsync */ .tH)(() => this.programManager.networkClient.submitTransaction(tx), _utils_helper_js__WEBPACK_IMPORTED_MODULE_0__/* .RETRY_ATTEMPTS */ .Km, _utils_helper_js__WEBPACK_IMPORTED_MODULE_0__/* .RETRY_DELAY_MS */ .k);
673224
+ const txId = await (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__/* .retryAsync */ .tH)(() => this.programManager.networkClient.submitTransaction(tx), _utils_helper_js__WEBPACK_IMPORTED_MODULE_1__/* .RETRY_ATTEMPTS */ .Km, _utils_helper_js__WEBPACK_IMPORTED_MODULE_1__/* .RETRY_DELAY_MS */ .k);
673472
673225
  const receipt = await this.aleoClient.waitForTransactionConfirmation(txId);
673473
673226
  return {
673474
673227
  ...receipt,
@@ -675297,6 +675050,7 @@ __nccwpck_require__.a(__webpack_module__, async (__webpack_handle_async_dependen
675297
675050
  /* harmony export */ B$: () => (/* binding */ ALEO_NULL_ADDRESS),
675298
675051
  /* harmony export */ ED: () => (/* binding */ getUnusedSuffix),
675299
675052
  /* harmony export */ GC: () => (/* binding */ getProgramSuffix),
675053
+ /* harmony export */ Gb: () => (/* binding */ u128PairToBytes32),
675300
675054
  /* harmony export */ Km: () => (/* binding */ RETRY_ATTEMPTS),
675301
675055
  /* harmony export */ M0: () => (/* binding */ formatAddress),
675302
675056
  /* harmony export */ NL: () => (/* binding */ providerWarpTokenTypeFromAleoTokenType),
@@ -675321,10 +675075,12 @@ __nccwpck_require__.a(__webpack_module__, async (__webpack_handle_async_dependen
675321
675075
  /* harmony export */ wR: () => (/* binding */ loadProgramsInDeployOrder),
675322
675076
  /* harmony export */ zg: () => (/* binding */ formatIsmAddress)
675323
675077
  /* harmony export */ });
675324
- /* unused harmony exports MAINNET_PREFIX, TESTNET_PREFIX, getProgramPrefix, isProgramDeployed */
675078
+ /* unused harmony exports MAINNET_PREFIX, TESTNET_PREFIX, getProgramPrefix, toKeyId, isProgramDeployed */
675325
675079
  /* harmony import */ var _provablehq_sdk_mainnet_js__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(73565);
675326
675080
  /* harmony import */ var _hyperlane_xyz_provider_sdk_warp__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(17791);
675327
675081
  /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(93142);
675082
+ /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(21387);
675083
+ /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(18508);
675328
675084
  /* harmony import */ var _artifacts_js__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(29026);
675329
675085
  /* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(96602);
675330
675086
  var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_provablehq_sdk_mainnet_js__WEBPACK_IMPORTED_MODULE_0__]);
@@ -675383,7 +675139,13 @@ function loadProgramsInDeployOrder(prefix, programName, coreSuffix, warpSuffix)
675383
675139
  programs = programs.map((p) => _provablehq_sdk_mainnet_js__WEBPACK_IMPORTED_MODULE_0__/* .Program */ .BP.fromString(p
675384
675140
  .toString()
675385
675141
  .replaceAll(/(mailbox|hook_manager|dispatch_proxy|validator_announce).aleo/g, (_, p1) => (coreSuffix ? `${p1}_${coreSuffix}.aleo` : `${p1}.aleo`))
675386
- .replaceAll(/(hyp_native|hyp_collateral|hyp_synthetic).aleo/g, (_, p1) => `${p1}_${getCustomWarpSuffixFromEnv() || warpSuffix || coreSuffix}.aleo`)));
675142
+ .replaceAll(/(hyp_native|hyp_collateral|hyp_synthetic).aleo/g, (_, p1) => {
675143
+ if (p1 === 'hyp_native') {
675144
+ return `hyp_warp_token_credits.aleo`;
675145
+ }
675146
+ const effectiveSuffix = getCustomWarpSuffixFromEnv() || warpSuffix || coreSuffix;
675147
+ return `hyp_warp_token_${effectiveSuffix}.aleo`;
675148
+ })));
675387
675149
  if (customIsmSuffix) {
675388
675150
  programs = programs.map((p) => _provablehq_sdk_mainnet_js__WEBPACK_IMPORTED_MODULE_0__/* .Program */ .BP.fromString(p
675389
675151
  .toString()
@@ -675436,7 +675198,18 @@ constructor:
675436
675198
  }
675437
675199
  return programs.map((p) => ({
675438
675200
  id: p.id(),
675439
- name: Object.keys(_artifacts_js__WEBPACK_IMPORTED_MODULE_2__/* .programRegistry */ .aE).find((r) => p.id().startsWith(`${prefix}_${r.replaceAll('hyp_', '')}`)) || '',
675201
+ name: Object.keys(_artifacts_js__WEBPACK_IMPORTED_MODULE_2__/* .programRegistry */ .aE).find((r) => {
675202
+ if (r === 'hyp_native') {
675203
+ return p.id() === `${prefix}_warp_token_credits.aleo`;
675204
+ }
675205
+ if ((r === 'hyp_collateral' || r === 'hyp_synthetic') &&
675206
+ r === programName &&
675207
+ p.id().startsWith(`${prefix}_warp_token_`) &&
675208
+ p.id() !== `${prefix}_warp_token_credits.aleo`) {
675209
+ return true;
675210
+ }
675211
+ return p.id().startsWith(`${prefix}_${r.replaceAll('hyp_', '')}`);
675212
+ }) || '',
675440
675213
  program: p.toString(),
675441
675214
  }));
675442
675215
  }
@@ -675550,11 +675323,74 @@ function bytes32ToU128String(input) {
675550
675323
  const highBytes = Uint8Array.from(bytes.subarray(16, 32));
675551
675324
  return `[${_provablehq_sdk_mainnet_js__WEBPACK_IMPORTED_MODULE_0__/* .U128 */ .xQ.fromBytesLe(lowBytes).toString()},${_provablehq_sdk_mainnet_js__WEBPACK_IMPORTED_MODULE_0__/* .U128 */ .xQ.fromBytesLe(highBytes).toString()}]`;
675552
675325
  }
675326
+ // Inverse of bytes32ToU128String: parses "[lowU128u128, highU128u128]" from dispatch_id_events
675327
+ // and converts back to a 0x-prefixed 32-byte hex string.
675328
+ function u128PairToBytes32(u128PairStr) {
675329
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__/* .assert */ .v)(u128PairStr.startsWith('[') && u128PairStr.endsWith(']'), `u128PairToBytes32: expected "[low,high]" format, got: ${u128PairStr}`);
675330
+ const inner = u128PairStr.slice(1, -1);
675331
+ const parts = inner.split(',').map((s) => s.trim().replace(/u128$/, ''));
675332
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__/* .assert */ .v)(parts.length === 2, `u128PairToBytes32: expected exactly 2 comma-separated parts, got ${parts.length}: ${inner}`);
675333
+ const low = BigInt(parts[0]);
675334
+ const high = BigInt(parts[1]);
675335
+ const u128Max = 2n ** 128n;
675336
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__/* .assert */ .v)(low >= 0n && low < u128Max, `u128PairToBytes32: low value out of u128 range: ${low}`);
675337
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__/* .assert */ .v)(high >= 0n && high < u128Max, `u128PairToBytes32: high value out of u128 range: ${high}`);
675338
+ const bytes = new Uint8Array(32);
675339
+ let tempLow = low;
675340
+ for (let i = 0; i < 16; i++) {
675341
+ bytes[i] = Number(tempLow & 0xffn);
675342
+ tempLow >>= 8n;
675343
+ }
675344
+ let tempHigh = high;
675345
+ for (let i = 0; i < 16; i++) {
675346
+ bytes[16 + i] = Number(tempHigh & 0xffn);
675347
+ tempHigh >>= 8n;
675348
+ }
675349
+ return (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_6__/* .toHexString */ .U5)(Buffer.from(bytes));
675350
+ }
675553
675351
  function getBalanceKey(address, denom) {
675554
675352
  return new _provablehq_sdk_mainnet_js__WEBPACK_IMPORTED_MODULE_0__/* .BHP256 */ .I_()
675555
675353
  .hash(_provablehq_sdk_mainnet_js__WEBPACK_IMPORTED_MODULE_0__/* .Plaintext */ .wN.fromString(`{account:${address},token_id:${denom}}`).toBitsLe())
675556
675354
  .toString();
675557
675355
  }
675356
+ // Aleo scalar field (BLS12-377 Fr) is 253 bits.
675357
+ const ALEO_FIELD_BITS = 253;
675358
+ // Encodes an Aleo Identifier to its snarkVM LE bit representation.
675359
+ // Identifier stores ASCII bytes packed into a field element: chars → LE bits → zero-padded to 253 bits.
675360
+ function identifierToBitsLe(name) {
675361
+ const bits = [];
675362
+ for (let i = 0; i < name.length; i++) {
675363
+ const byte = name.charCodeAt(i);
675364
+ for (let b = 0; b < 8; b++)
675365
+ bits.push(((byte >> b) & 1) === 1);
675366
+ }
675367
+ while (bits.length < ALEO_FIELD_BITS)
675368
+ bits.push(false);
675369
+ return bits;
675370
+ }
675371
+ // Encodes an Aleo ProgramID (e.g., "mailbox.aleo") as LE bits.
675372
+ // ProgramID serializes as: name identifier bits || network identifier bits.
675373
+ function programIdToBitsLe(programId) {
675374
+ const dot = programId.lastIndexOf('.');
675375
+ return [
675376
+ ...identifierToBitsLe(programId.slice(0, dot)),
675377
+ ...identifierToBitsLe(programId.slice(dot + 1)),
675378
+ ];
675379
+ }
675380
+ // Computes the Aleo mapping key_id used in FinalizeJSON.
675381
+ // Matches the Rust `to_key_id` in hyperlane-aleo/src/utils.rs:
675382
+ // BHP1024(programId_bits | false | mappingName_bits | false | plaintextKey_bits)
675383
+ // key must be a valid Aleo plaintext string, e.g. "0u32".
675384
+ function toKeyId(programId, mappingName, key) {
675385
+ const bits = [
675386
+ ...programIdToBitsLe(programId),
675387
+ false,
675388
+ ...identifierToBitsLe(mappingName),
675389
+ false,
675390
+ ...Plaintext.fromString(key).toBitsLe(),
675391
+ ];
675392
+ return new BHP1024().hash(bits).toString();
675393
+ }
675558
675394
  /**
675559
675395
  * Convert AleoTokenType to provider-sdk TokenType
675560
675396
  */
@@ -676141,9 +675977,11 @@ class AleoNativeTokenWriter extends AleoNativeTokenReader {
676141
675977
  // Get mailbox suffix for deployment
676142
675978
  const { programId: mailboxProgramId } = (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_2__/* .fromAleoAddress */ .kz)(config.mailbox);
676143
675979
  const mailboxSuffix = (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_2__/* .getProgramSuffix */ .GC)(mailboxProgramId);
676144
- // Resolve token suffix from preferred setting or generate a collision-free one
675980
+ // Resolve token suffix from preferred setting or generate a collision-free one.
675981
+ // Native tokens always use the fixed 'credits' suffix, so the program may
675982
+ // already be deployed and initialized from a previous warp deploy run.
676145
675983
  const tokenSuffix = await this.signer.getWarpTokenSuffix('native');
676146
- // Deploy native token program
675984
+ // Deploy native token program (idempotent if already on-chain)
676147
675985
  const programs = await this.signer
676148
675986
  .deployProgram('hyp_native', mailboxSuffix, tokenSuffix)
676149
675987
  .catch((error) => {
@@ -676151,6 +675989,15 @@ class AleoNativeTokenWriter extends AleoNativeTokenReader {
676151
675989
  });
676152
675990
  const tokenProgramId = programs['hyp_native'];
676153
675991
  (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_6__/* .assert */ .v)(tokenProgramId, 'Expected native token program to be deployed but none was found in deployment mapping');
675992
+ const tokenAddress = (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_2__/* .toAleoAddress */ .j2)(tokenProgramId);
675993
+ // Native tokens use a fixed program name (no random suffix), so only one
675994
+ // native warp token can exist per network. If it's already initialized,
675995
+ // fail early with a clear message instead of letting init fail on-chain.
675996
+ const existingArtifact = await this.read(tokenAddress).catch(() => null);
675997
+ if (existingArtifact) {
675998
+ throw new Error(`Native warp token ${tokenProgramId} is already deployed at ${tokenAddress}. ` +
675999
+ `Native tokens cannot be redeployed. Use \`hyperlane warp apply\` to update the existing deployment.`);
676000
+ }
676154
676001
  // Initialize token
676155
676002
  const initTx = (0,_warp_tx_js__WEBPACK_IMPORTED_MODULE_5__/* .getCreateNativeTokenTx */ .zf)(tokenProgramId);
676156
676003
  const initReceipt = await this.signer
@@ -676159,7 +676006,6 @@ class AleoNativeTokenWriter extends AleoNativeTokenReader {
676159
676006
  throw withErrorContext(`Failed to initialize native warp token program ${tokenProgramId} (signer=${signerAddress})`, error);
676160
676007
  });
676161
676008
  allReceipts.push(initReceipt);
676162
- const tokenAddress = (0,_utils_helper_js__WEBPACK_IMPORTED_MODULE_2__/* .toAleoAddress */ .j2)(tokenProgramId);
676163
676009
  // Perform post-deployment updates (ISM setup and router enrollment)
676164
676010
  const postDeploymentTxs = (0,_warp_tx_js__WEBPACK_IMPORTED_MODULE_5__/* .getPostDeploymentUpdateTxs */ .UL)(tokenAddress, config);
676165
676011
  for (const tx of postDeploymentTxs) {
@@ -677362,6 +677208,160 @@ async function getOperatorSignature(domain, serviceManager, avsDirectory, operat
677362
677208
 
677363
677209
  /***/ }),
677364
677210
 
677211
+ /***/ 46761:
677212
+ /***/ ((__webpack_module__, __webpack_exports__, __nccwpck_require__) => {
677213
+
677214
+ __nccwpck_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
677215
+ /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
677216
+ /* harmony export */ u: () => (/* binding */ runWarpRouteBalances)
677217
+ /* harmony export */ });
677218
+ /* harmony import */ var _hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(9035);
677219
+ /* harmony import */ var _hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(4879);
677220
+ /* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(54321);
677221
+ /* harmony import */ var _utils_files_js__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(17468);
677222
+ /* harmony import */ var _utils_warp_js__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(85361);
677223
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_utils_warp_js__WEBPACK_IMPORTED_MODULE_1__, _hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_2__]);
677224
+ ([_utils_warp_js__WEBPACK_IMPORTED_MODULE_1__, _hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_2__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
677225
+
677226
+
677227
+
677228
+
677229
+ function formatBigIntBalance(raw, decimals) {
677230
+ const str = raw.toString().padStart(decimals + 1, '0');
677231
+ const intPart = str.slice(0, str.length - decimals);
677232
+ const fracFull = str.slice(str.length - decimals);
677233
+ const fracTrimmed = fracFull.replace(/0+$/, '');
677234
+ const intFormatted = new Intl.NumberFormat().format(BigInt(intPart));
677235
+ return fracTrimmed ? `${intFormatted}.${fracTrimmed}` : intFormatted;
677236
+ }
677237
+ async function runWarpRouteBalances({ context, warpRouteId, chains, out, address, raw, }) {
677238
+ const warpCoreConfig = await (0,_utils_warp_js__WEBPACK_IMPORTED_MODULE_1__/* .getWarpCoreConfigOrExit */ .ff)({
677239
+ context,
677240
+ warpRouteId,
677241
+ chains,
677242
+ });
677243
+ const registryAddresses = await context.registry.getAddresses();
677244
+ const mailboxMetadata = {};
677245
+ for (const token of warpCoreConfig.tokens) {
677246
+ const chainAddresses = registryAddresses[token.chainName];
677247
+ if (chainAddresses?.mailbox) {
677248
+ mailboxMetadata[token.chainName] = { mailbox: chainAddresses.mailbox };
677249
+ }
677250
+ }
677251
+ const multiProvider = context.multiProtocolProvider.extendChainMetadata(mailboxMetadata);
677252
+ const warpCore = _hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_2__/* .WarpCore */ .u.FromConfig(multiProvider, warpCoreConfig);
677253
+ const collateralizedSet = new Set([
677254
+ ..._hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_3__/* .TOKEN_COLLATERALIZED_STANDARDS */ .PP,
677255
+ ..._hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_3__/* .ERC4626_COLLATERAL_STANDARDS */ .eB,
677256
+ ]);
677257
+ const chainsSet = chains && chains.length > 0 ? new Set(chains) : undefined;
677258
+ const filteredTokens = chainsSet
677259
+ ? warpCore.tokens.filter((t) => chainsSet.has(t.chainName))
677260
+ : warpCore.tokens;
677261
+ const tokenEntries = await Promise.all(filteredTokens.map(async (token) => {
677262
+ const isCollateral = collateralizedSet.has(token.standard);
677263
+ try {
677264
+ let balanceRaw;
677265
+ if (address) {
677266
+ const adapter = token.getAdapter(multiProvider);
677267
+ balanceRaw = await adapter.getBalance(address);
677268
+ }
677269
+ else if (isCollateral) {
677270
+ balanceRaw = await warpCore.getTokenCollateral(token);
677271
+ }
677272
+ else {
677273
+ const adapter = token.getAdapter(multiProvider);
677274
+ balanceRaw = await adapter.getTotalSupply();
677275
+ }
677276
+ const balance = balanceRaw !== undefined
677277
+ ? raw
677278
+ ? balanceRaw.toString()
677279
+ : formatBigIntBalance(balanceRaw, token.decimals)
677280
+ : 'N/A';
677281
+ return {
677282
+ chain: token.chainName,
677283
+ row: {
677284
+ Symbol: token.symbol,
677285
+ Standard: token.standard,
677286
+ Address: token.addressOrDenom,
677287
+ Balance: balance,
677288
+ },
677289
+ rawBalance: balanceRaw,
677290
+ isCollateral,
677291
+ decimals: token.decimals,
677292
+ };
677293
+ }
677294
+ catch (e) {
677295
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__/* .warnYellow */ .dE)(`Could not fetch balance for ${token.symbol} on ${token.chainName}: ${e instanceof Error ? e.message : String(e)}`);
677296
+ return {
677297
+ chain: token.chainName,
677298
+ row: {
677299
+ Symbol: token.symbol,
677300
+ Standard: token.standard,
677301
+ Address: token.addressOrDenom,
677302
+ Balance: 'Error',
677303
+ },
677304
+ rawBalance: undefined,
677305
+ isCollateral,
677306
+ decimals: token.decimals,
677307
+ };
677308
+ }
677309
+ }));
677310
+ const tableData = {};
677311
+ for (const { chain, row } of tokenEntries) {
677312
+ let key = chain;
677313
+ let i = 2;
677314
+ while (key in tableData) {
677315
+ key = `${chain} (${i++})`;
677316
+ }
677317
+ tableData[key] = row;
677318
+ }
677319
+ if (address) {
677320
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__/* .logBlue */ .RK)(`\nWarp route balances for ${address}:`);
677321
+ }
677322
+ else {
677323
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__/* .logBlue */ .RK)('\nWarp route balances:');
677324
+ }
677325
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__/* .logTable */ .Jn)(tableData);
677326
+ if (!address) {
677327
+ const collateralEntries = tokenEntries.filter((e) => e.isCollateral);
677328
+ const syntheticEntries = tokenEntries.filter((e) => !e.isCollateral);
677329
+ if (collateralEntries.length > 0 && syntheticEntries.length > 0) {
677330
+ const hasErrors = tokenEntries.some((e) => e.rawBalance === undefined);
677331
+ if (hasErrors) {
677332
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__/* .warnYellow */ .dE)('\nStatus: INCONCLUSIVE — some balances unavailable, cannot compare collateral vs synthetic supply');
677333
+ }
677334
+ else {
677335
+ const commonDecimals = Math.max(...collateralEntries.map((e) => e.decimals), ...syntheticEntries.map((e) => e.decimals));
677336
+ const scale = (e) => 10n ** BigInt(commonDecimals - e.decimals);
677337
+ const totalCollateral = collateralEntries.reduce((sum, e) => sum + (e.rawBalance ?? 0n) * scale(e), 0n);
677338
+ const totalSynthetic = syntheticEntries.reduce((sum, e) => sum + (e.rawBalance ?? 0n) * scale(e), 0n);
677339
+ const fmt = (v) => raw ? v.toString() : formatBigIntBalance(v, commonDecimals);
677340
+ if (totalCollateral === totalSynthetic) {
677341
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__/* .logGreen */ .In)(`\nStatus: collateral matches synthetic supply (${fmt(totalCollateral)})`);
677342
+ }
677343
+ else {
677344
+ const diff = totalCollateral > totalSynthetic
677345
+ ? totalCollateral - totalSynthetic
677346
+ : totalSynthetic - totalCollateral;
677347
+ const sign = totalCollateral > totalSynthetic ? '+' : '-';
677348
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__/* .warnYellow */ .dE)(`\nStatus: MISMATCH — collateral ${fmt(totalCollateral)} vs synthetic ${fmt(totalSynthetic)} (diff: ${sign}${fmt(diff)})`);
677349
+ }
677350
+ }
677351
+ }
677352
+ }
677353
+ if (out) {
677354
+ const jsonData = tokenEntries.map(({ chain, row }) => ({ chain, ...row }));
677355
+ (0,_utils_files_js__WEBPACK_IMPORTED_MODULE_0__/* .writeYamlOrJson */ .o9)(out, jsonData);
677356
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__/* .logGreen */ .In)(`\nBalances written to ${out}`);
677357
+ }
677358
+ }
677359
+ //# sourceMappingURL=warp.js.map
677360
+ __webpack_async_result__();
677361
+ } catch(e) { __webpack_async_result__(e); } });
677362
+
677363
+ /***/ }),
677364
+
677365
677365
  /***/ 53994:
677366
677366
  /***/ ((__webpack_module__, __webpack_exports__, __nccwpck_require__) => {
677367
677367
 
@@ -679474,29 +679474,31 @@ __nccwpck_require__.a(__webpack_module__, async (__webpack_handle_async_dependen
679474
679474
  /* harmony import */ var util__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(39023);
679475
679475
  /* harmony import */ var yaml__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(10684);
679476
679476
  /* harmony import */ var _hyperlane_xyz_rebalancer__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(97772);
679477
- /* harmony import */ var _hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_21__ = __nccwpck_require__(47265);
679478
- /* harmony import */ var _hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_23__ = __nccwpck_require__(17023);
679479
- /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_17__ = __nccwpck_require__(21387);
679480
- /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_18__ = __nccwpck_require__(52193);
679481
- /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_20__ = __nccwpck_require__(16639);
679482
- /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_22__ = __nccwpck_require__(94523);
679477
+ /* harmony import */ var _hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_22__ = __nccwpck_require__(47265);
679478
+ /* harmony import */ var _hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_24__ = __nccwpck_require__(17023);
679479
+ /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_18__ = __nccwpck_require__(21387);
679480
+ /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_19__ = __nccwpck_require__(52193);
679481
+ /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_21__ = __nccwpck_require__(16639);
679482
+ /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_23__ = __nccwpck_require__(94523);
679483
679483
  /* harmony import */ var _check_warp_js__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(53994);
679484
679484
  /* harmony import */ var _config_warp_js__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(10392);
679485
679485
  /* harmony import */ var _deploy_warp_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(41687);
679486
- /* harmony import */ var _fees_warp_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(89717);
679487
- /* harmony import */ var _fork_fork_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(51908);
679488
- /* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_16__ = __nccwpck_require__(54321);
679489
- /* harmony import */ var _read_warp_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(59794);
679490
- /* harmony import */ var _send_transfer_js__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(67793);
679491
- /* harmony import */ var _submitters_types_js__WEBPACK_IMPORTED_MODULE_10__ = __nccwpck_require__(17555);
679492
- /* harmony import */ var _utils_files_js__WEBPACK_IMPORTED_MODULE_11__ = __nccwpck_require__(17468);
679493
- /* harmony import */ var _utils_warp_send_js__WEBPACK_IMPORTED_MODULE_19__ = __nccwpck_require__(96192);
679494
- /* harmony import */ var _utils_warp_js__WEBPACK_IMPORTED_MODULE_12__ = __nccwpck_require__(85361);
679495
- /* harmony import */ var _verify_warp_js__WEBPACK_IMPORTED_MODULE_13__ = __nccwpck_require__(56661);
679496
- /* harmony import */ var _options_js__WEBPACK_IMPORTED_MODULE_14__ = __nccwpck_require__(89438);
679497
- /* harmony import */ var _send_js__WEBPACK_IMPORTED_MODULE_15__ = __nccwpck_require__(56148);
679498
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_hyperlane_xyz_rebalancer__WEBPACK_IMPORTED_MODULE_2__, _check_warp_js__WEBPACK_IMPORTED_MODULE_3__, _config_warp_js__WEBPACK_IMPORTED_MODULE_4__, _deploy_warp_js__WEBPACK_IMPORTED_MODULE_5__, _fees_warp_js__WEBPACK_IMPORTED_MODULE_6__, _fork_fork_js__WEBPACK_IMPORTED_MODULE_7__, _read_warp_js__WEBPACK_IMPORTED_MODULE_8__, _send_transfer_js__WEBPACK_IMPORTED_MODULE_9__, _submitters_types_js__WEBPACK_IMPORTED_MODULE_10__, _utils_warp_js__WEBPACK_IMPORTED_MODULE_12__, _verify_warp_js__WEBPACK_IMPORTED_MODULE_13__, _options_js__WEBPACK_IMPORTED_MODULE_14__, _send_js__WEBPACK_IMPORTED_MODULE_15__]);
679499
- ([_hyperlane_xyz_rebalancer__WEBPACK_IMPORTED_MODULE_2__, _check_warp_js__WEBPACK_IMPORTED_MODULE_3__, _config_warp_js__WEBPACK_IMPORTED_MODULE_4__, _deploy_warp_js__WEBPACK_IMPORTED_MODULE_5__, _fees_warp_js__WEBPACK_IMPORTED_MODULE_6__, _fork_fork_js__WEBPACK_IMPORTED_MODULE_7__, _read_warp_js__WEBPACK_IMPORTED_MODULE_8__, _send_transfer_js__WEBPACK_IMPORTED_MODULE_9__, _submitters_types_js__WEBPACK_IMPORTED_MODULE_10__, _utils_warp_js__WEBPACK_IMPORTED_MODULE_12__, _verify_warp_js__WEBPACK_IMPORTED_MODULE_13__, _options_js__WEBPACK_IMPORTED_MODULE_14__, _send_js__WEBPACK_IMPORTED_MODULE_15__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
679486
+ /* harmony import */ var _balances_warp_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(46761);
679487
+ /* harmony import */ var _fees_warp_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(89717);
679488
+ /* harmony import */ var _fork_fork_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(51908);
679489
+ /* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_17__ = __nccwpck_require__(54321);
679490
+ /* harmony import */ var _read_warp_js__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(59794);
679491
+ /* harmony import */ var _send_transfer_js__WEBPACK_IMPORTED_MODULE_10__ = __nccwpck_require__(67793);
679492
+ /* harmony import */ var _submitters_types_js__WEBPACK_IMPORTED_MODULE_11__ = __nccwpck_require__(17555);
679493
+ /* harmony import */ var _utils_files_js__WEBPACK_IMPORTED_MODULE_12__ = __nccwpck_require__(17468);
679494
+ /* harmony import */ var _utils_warp_send_js__WEBPACK_IMPORTED_MODULE_20__ = __nccwpck_require__(96192);
679495
+ /* harmony import */ var _utils_warp_js__WEBPACK_IMPORTED_MODULE_13__ = __nccwpck_require__(85361);
679496
+ /* harmony import */ var _verify_warp_js__WEBPACK_IMPORTED_MODULE_14__ = __nccwpck_require__(56661);
679497
+ /* harmony import */ var _options_js__WEBPACK_IMPORTED_MODULE_15__ = __nccwpck_require__(89438);
679498
+ /* harmony import */ var _send_js__WEBPACK_IMPORTED_MODULE_16__ = __nccwpck_require__(56148);
679499
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_hyperlane_xyz_rebalancer__WEBPACK_IMPORTED_MODULE_2__, _check_warp_js__WEBPACK_IMPORTED_MODULE_3__, _config_warp_js__WEBPACK_IMPORTED_MODULE_4__, _deploy_warp_js__WEBPACK_IMPORTED_MODULE_5__, _balances_warp_js__WEBPACK_IMPORTED_MODULE_6__, _fees_warp_js__WEBPACK_IMPORTED_MODULE_7__, _fork_fork_js__WEBPACK_IMPORTED_MODULE_8__, _read_warp_js__WEBPACK_IMPORTED_MODULE_9__, _send_transfer_js__WEBPACK_IMPORTED_MODULE_10__, _submitters_types_js__WEBPACK_IMPORTED_MODULE_11__, _utils_warp_js__WEBPACK_IMPORTED_MODULE_13__, _verify_warp_js__WEBPACK_IMPORTED_MODULE_14__, _options_js__WEBPACK_IMPORTED_MODULE_15__, _send_js__WEBPACK_IMPORTED_MODULE_16__]);
679500
+ ([_hyperlane_xyz_rebalancer__WEBPACK_IMPORTED_MODULE_2__, _check_warp_js__WEBPACK_IMPORTED_MODULE_3__, _config_warp_js__WEBPACK_IMPORTED_MODULE_4__, _deploy_warp_js__WEBPACK_IMPORTED_MODULE_5__, _balances_warp_js__WEBPACK_IMPORTED_MODULE_6__, _fees_warp_js__WEBPACK_IMPORTED_MODULE_7__, _fork_fork_js__WEBPACK_IMPORTED_MODULE_8__, _read_warp_js__WEBPACK_IMPORTED_MODULE_9__, _send_transfer_js__WEBPACK_IMPORTED_MODULE_10__, _submitters_types_js__WEBPACK_IMPORTED_MODULE_11__, _utils_warp_js__WEBPACK_IMPORTED_MODULE_13__, _verify_warp_js__WEBPACK_IMPORTED_MODULE_14__, _options_js__WEBPACK_IMPORTED_MODULE_15__, _send_js__WEBPACK_IMPORTED_MODULE_16__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
679501
+
679500
679502
 
679501
679503
 
679502
679504
 
@@ -679525,6 +679527,7 @@ const warpCommand = {
679525
679527
  describe: 'Manage Hyperlane warp routes',
679526
679528
  builder: (yargs) => yargs
679527
679529
  .command(apply)
679530
+ .command(balances)
679528
679531
  .command(check)
679529
679532
  .command(combine)
679530
679533
  .command(deploy)
@@ -679537,10 +679540,10 @@ const warpCommand = {
679537
679540
  .command(verify)
679538
679541
  .version(false)
679539
679542
  .demandCommand(),
679540
- handler: () => (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .log */ .Rm)('Command required'),
679543
+ handler: () => (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .log */ .Rm)('Command required'),
679541
679544
  };
679542
679545
  const WARP_ROUTE_OPTIONS = {
679543
- 'warp-route-id': _options_js__WEBPACK_IMPORTED_MODULE_14__/* .warpRouteIdCommandOption */ .N$,
679546
+ 'warp-route-id': _options_js__WEBPACK_IMPORTED_MODULE_15__/* .warpRouteIdCommandOption */ .N$,
679544
679547
  };
679545
679548
  async function getWarpConfigsFromContextOrRegistry({ context, warpRouteId, }) {
679546
679549
  if (context.warpCoreConfig && context.warpDeployConfig) {
@@ -679552,7 +679555,7 @@ async function getWarpConfigsFromContextOrRegistry({ context, warpRouteId, }) {
679552
679555
  }
679553
679556
  // If cache is partial, refresh both configs together to avoid mixing stale+fresh routes.
679554
679557
  const requestedWarpRouteId = context.resolvedWarpRouteId ?? warpRouteId;
679555
- const fetchedConfigs = await (0,_utils_warp_js__WEBPACK_IMPORTED_MODULE_12__/* .getWarpConfigs */ .Yb)({
679558
+ const fetchedConfigs = await (0,_utils_warp_js__WEBPACK_IMPORTED_MODULE_13__/* .getWarpConfigs */ .Yb)({
679556
679559
  context,
679557
679560
  warpRouteId: requestedWarpRouteId,
679558
679561
  });
@@ -679567,17 +679570,47 @@ async function getWarpConfigsFromContextOrRegistry({ context, warpRouteId, }) {
679567
679570
  resolvedWarpRouteId,
679568
679571
  };
679569
679572
  }
679573
+ const balances = {
679574
+ command: 'balances',
679575
+ describe: 'Display token balances for each leg of a warp route',
679576
+ builder: {
679577
+ ...WARP_ROUTE_OPTIONS,
679578
+ chains: (0,_options_js__WEBPACK_IMPORTED_MODULE_15__/* .stringArrayOptionConfig */ .om)({
679579
+ description: 'Filter to specific chains',
679580
+ demandOption: false,
679581
+ }),
679582
+ out: (0,_options_js__WEBPACK_IMPORTED_MODULE_15__/* .outputFileCommandOption */ .Ym)(undefined, false, 'Output file path (JSON or YAML)'),
679583
+ address: (0,_options_js__WEBPACK_IMPORTED_MODULE_15__/* .addressCommandOption */ .Fs)("User address to check balances for. When provided, shows the user's token balance on each chain instead of collateral/supply."),
679584
+ raw: {
679585
+ type: 'boolean',
679586
+ description: 'Show balances in base units (without decimal formatting)',
679587
+ default: false,
679588
+ },
679589
+ },
679590
+ handler: async ({ context, warpRouteId, chains, out, address, raw }) => {
679591
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logCommandHeader */ .dp)('Hyperlane Warp Balances');
679592
+ await (0,_balances_warp_js__WEBPACK_IMPORTED_MODULE_6__/* .runWarpRouteBalances */ .u)({
679593
+ context,
679594
+ warpRouteId,
679595
+ chains,
679596
+ out,
679597
+ address,
679598
+ raw,
679599
+ });
679600
+ process.exit(0);
679601
+ },
679602
+ };
679570
679603
  const apply = {
679571
679604
  command: 'apply',
679572
679605
  describe: 'Update Warp Route contracts',
679573
679606
  builder: {
679574
679607
  ...WARP_ROUTE_OPTIONS,
679575
- strategy: { ..._options_js__WEBPACK_IMPORTED_MODULE_14__/* .strategyCommandOption */ .sB, demandOption: false },
679608
+ strategy: { ..._options_js__WEBPACK_IMPORTED_MODULE_15__/* .strategyCommandOption */ .sB, demandOption: false },
679576
679609
  'receipts-dir': {
679577
679610
  type: 'string',
679578
679611
  description: 'The directory to output transaction receipts.',
679579
679612
  default: './generated/transactions',
679580
- coerce: (dir) => (0,_utils_files_js__WEBPACK_IMPORTED_MODULE_11__/* .removeTrailingSlash */ .UC)(dir),
679613
+ coerce: (dir) => (0,_utils_files_js__WEBPACK_IMPORTED_MODULE_12__/* .removeTrailingSlash */ .UC)(dir),
679581
679614
  },
679582
679615
  relay: {
679583
679616
  type: 'boolean',
@@ -679586,9 +679619,9 @@ const apply = {
679586
679619
  },
679587
679620
  },
679588
679621
  handler: async ({ context, strategy: strategyUrl, receiptsDir, relay, warpRouteId, }) => {
679589
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logCommandHeader */ .dp)('Hyperlane Warp Apply');
679622
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logCommandHeader */ .dp)('Hyperlane Warp Apply');
679590
679623
  if (strategyUrl)
679591
- _submitters_types_js__WEBPACK_IMPORTED_MODULE_10__/* .ExtendedChainSubmissionStrategySchema */ .VH.parse((0,_utils_files_js__WEBPACK_IMPORTED_MODULE_11__/* .readYamlOrJson */ .xQ)(strategyUrl));
679624
+ _submitters_types_js__WEBPACK_IMPORTED_MODULE_11__/* .ExtendedChainSubmissionStrategySchema */ .VH.parse((0,_utils_files_js__WEBPACK_IMPORTED_MODULE_12__/* .readYamlOrJson */ .xQ)(strategyUrl));
679592
679625
  await (0,_deploy_warp_js__WEBPACK_IMPORTED_MODULE_5__/* .runWarpRouteApply */ .RT)({
679593
679626
  context,
679594
679627
  warpDeployConfig: context.warpDeployConfig,
@@ -679606,7 +679639,7 @@ const deploy = {
679606
679639
  describe: 'Deploy Warp Route contracts',
679607
679640
  builder: WARP_ROUTE_OPTIONS,
679608
679641
  handler: async ({ context, warpRouteId }) => {
679609
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logCommandHeader */ .dp)(`Hyperlane Warp Route Deployment`);
679642
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logCommandHeader */ .dp)(`Hyperlane Warp Route Deployment`);
679610
679643
  await (0,_deploy_warp_js__WEBPACK_IMPORTED_MODULE_5__/* .runWarpRouteDeploy */ .e9)({
679611
679644
  context,
679612
679645
  warpDeployConfig: context.warpDeployConfig,
@@ -679631,13 +679664,13 @@ const combine = {
679631
679664
  },
679632
679665
  },
679633
679666
  handler: async ({ context, routes, 'output-warp-route-id': outputId }) => {
679634
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logCommandHeader */ .dp)('Hyperlane Warp Combine');
679667
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logCommandHeader */ .dp)('Hyperlane Warp Combine');
679635
679668
  const routeIds = routes
679636
679669
  .split(',')
679637
679670
  .map((r) => r.trim())
679638
679671
  .filter((r) => r.length > 0);
679639
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_17__/* .assert */ .v)(routeIds.length >= 2, 'At least 2 route IDs are required to combine');
679640
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_17__/* .assert */ .v)(outputId.trim().length > 0, 'Output warp route ID must be non-empty');
679672
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_18__/* .assert */ .v)(routeIds.length >= 2, 'At least 2 route IDs are required to combine');
679673
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_18__/* .assert */ .v)(outputId.trim().length > 0, 'Output warp route ID must be non-empty');
679641
679674
  await (0,_deploy_warp_js__WEBPACK_IMPORTED_MODULE_5__/* .runWarpRouteCombine */ .Iw)({
679642
679675
  context,
679643
679676
  routeIds,
@@ -679655,10 +679688,10 @@ const init = {
679655
679688
  describe: 'Create an advanced ISM',
679656
679689
  default: false,
679657
679690
  },
679658
- out: (0,_options_js__WEBPACK_IMPORTED_MODULE_14__/* .outputFileCommandOption */ .Ym)(),
679691
+ out: (0,_options_js__WEBPACK_IMPORTED_MODULE_15__/* .outputFileCommandOption */ .Ym)(),
679659
679692
  },
679660
679693
  handler: async ({ context, advanced, out }) => {
679661
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logCommandHeader */ .dp)('Hyperlane Warp Configure');
679694
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logCommandHeader */ .dp)('Hyperlane Warp Configure');
679662
679695
  await (0,_config_warp_js__WEBPACK_IMPORTED_MODULE_4__/* .createWarpRouteDeployConfig */ .ft)({
679663
679696
  context,
679664
679697
  outPath: out,
@@ -679673,28 +679706,28 @@ const read = {
679673
679706
  builder: {
679674
679707
  ...WARP_ROUTE_OPTIONS,
679675
679708
  chain: {
679676
- ..._options_js__WEBPACK_IMPORTED_MODULE_14__/* .chainCommandOption */ .mF,
679709
+ ..._options_js__WEBPACK_IMPORTED_MODULE_15__/* .chainCommandOption */ .mF,
679677
679710
  demandOption: false,
679678
679711
  },
679679
- address: (0,_options_js__WEBPACK_IMPORTED_MODULE_14__/* .addressCommandOption */ .Fs)('Address of the router contract to read.', false),
679680
- out: (0,_options_js__WEBPACK_IMPORTED_MODULE_14__/* .outputFileCommandOption */ .Ym)(),
679712
+ address: (0,_options_js__WEBPACK_IMPORTED_MODULE_15__/* .addressCommandOption */ .Fs)('Address of the router contract to read.', false),
679713
+ out: (0,_options_js__WEBPACK_IMPORTED_MODULE_15__/* .outputFileCommandOption */ .Ym)(),
679681
679714
  },
679682
679715
  handler: async ({ context, chain, address, warpRouteId, out }) => {
679683
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logCommandHeader */ .dp)('Hyperlane Warp Reader');
679684
- const config = await (0,_read_warp_js__WEBPACK_IMPORTED_MODULE_8__/* .runWarpRouteRead */ .bb)({
679716
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logCommandHeader */ .dp)('Hyperlane Warp Reader');
679717
+ const config = await (0,_read_warp_js__WEBPACK_IMPORTED_MODULE_9__/* .runWarpRouteRead */ .bb)({
679685
679718
  context,
679686
679719
  chain,
679687
679720
  address,
679688
679721
  warpRouteId,
679689
679722
  });
679690
679723
  if (out) {
679691
- (0,_utils_files_js__WEBPACK_IMPORTED_MODULE_11__/* .writeYamlOrJson */ .o9)(out, config, 'yaml');
679692
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logGreen */ .In)(`✅ Warp route config written successfully to ${out}:\n`);
679724
+ (0,_utils_files_js__WEBPACK_IMPORTED_MODULE_12__/* .writeYamlOrJson */ .o9)(out, config, 'yaml');
679725
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logGreen */ .In)(`✅ Warp route config written successfully to ${out}:\n`);
679693
679726
  }
679694
679727
  else {
679695
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logGreen */ .In)(`✅ Warp route config read successfully:\n`);
679728
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logGreen */ .In)(`✅ Warp route config read successfully:\n`);
679696
679729
  }
679697
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .log */ .Rm)((0,_utils_files_js__WEBPACK_IMPORTED_MODULE_11__/* .indentYamlOrJson */ .R7)((0,yaml__WEBPACK_IMPORTED_MODULE_1__/* .stringify */ .As)(config, null, 2), 4));
679730
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .log */ .Rm)((0,_utils_files_js__WEBPACK_IMPORTED_MODULE_12__/* .indentYamlOrJson */ .R7)((0,yaml__WEBPACK_IMPORTED_MODULE_1__/* .stringify */ .As)(config, null, 2), 4));
679698
679731
  process.exit(0);
679699
679732
  },
679700
679733
  };
@@ -679710,8 +679743,8 @@ const getFees = {
679710
679743
  },
679711
679744
  },
679712
679745
  handler: async ({ context, warpRouteId, amount }) => {
679713
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logCommandHeader */ .dp)('Hyperlane Warp Route Fees');
679714
- await (0,_fees_warp_js__WEBPACK_IMPORTED_MODULE_6__/* .runWarpRouteFees */ .A)({
679746
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logCommandHeader */ .dp)('Hyperlane Warp Route Fees');
679747
+ await (0,_fees_warp_js__WEBPACK_IMPORTED_MODULE_7__/* .runWarpRouteFees */ .A)({
679715
679748
  context,
679716
679749
  warpRouteId,
679717
679750
  amount: amount,
@@ -679723,7 +679756,7 @@ const send = {
679723
679756
  command: 'send',
679724
679757
  describe: 'Send a test token transfer on a warp route',
679725
679758
  builder: {
679726
- ..._send_js__WEBPACK_IMPORTED_MODULE_15__/* .messageSendOptions */ .eC,
679759
+ ..._send_js__WEBPACK_IMPORTED_MODULE_16__/* .messageSendOptions */ .eC,
679727
679760
  ...WARP_ROUTE_OPTIONS,
679728
679761
  amount: {
679729
679762
  type: 'string',
@@ -679734,7 +679767,7 @@ const send = {
679734
679767
  type: 'string',
679735
679768
  description: 'Token recipient address. Required for non-EVM destinations. Defaults to destination signer for EVM destinations.',
679736
679769
  },
679737
- chains: (0,_options_js__WEBPACK_IMPORTED_MODULE_14__/* .stringArrayOptionConfig */ .om)({
679770
+ chains: (0,_options_js__WEBPACK_IMPORTED_MODULE_15__/* .stringArrayOptionConfig */ .om)({
679738
679771
  description: 'List of chains to send messages to',
679739
679772
  demandOption: false,
679740
679773
  conflicts: ['origin', 'destination'],
@@ -679784,7 +679817,7 @@ const send = {
679784
679817
  .filter((v) => Boolean(v))
679785
679818
  .filter((v, i, a) => a.indexOf(v) === i);
679786
679819
  const warpCoreConfig = context.warpCoreConfig ??
679787
- (await (0,_utils_warp_js__WEBPACK_IMPORTED_MODULE_12__/* .getWarpCoreConfigOrExit */ .ff)({
679820
+ (await (0,_utils_warp_js__WEBPACK_IMPORTED_MODULE_13__/* .getWarpCoreConfigOrExit */ .ff)({
679788
679821
  warpRouteId,
679789
679822
  context,
679790
679823
  chains: filterChains.length > 0 ? filterChains : undefined,
@@ -679796,8 +679829,8 @@ const send = {
679796
679829
  }
679797
679830
  const supportedChains = new Set(warpCoreConfig.tokens.map((t) => t.chainName));
679798
679831
  // Check if any of the chain selection through --chains or --origin & --destination are not in the warp core
679799
- const unsupportedChains = (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_18__/* .difference */ .iv)(new Set([...(chainsArg || []), origin, destination].filter(Boolean)), supportedChains);
679800
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_17__/* .assert */ .v)(unsupportedChains.size === 0, `Chain(s) ${[...unsupportedChains].join(', ')} are not part of the warp route.`);
679832
+ const unsupportedChains = (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_19__/* .difference */ .iv)(new Set([...(chainsArg || []), origin, destination].filter(Boolean)), supportedChains);
679833
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_18__/* .assert */ .v)(unsupportedChains.size === 0, `Chain(s) ${[...unsupportedChains].join(', ')} are not part of the warp route.`);
679801
679834
  // When origin & destination are explicitly provided, preserve duplicates
679802
679835
  // for same-chain transfers (e.g., origin=anvil2, destination=anvil2).
679803
679836
  // Only deduplicate when using --chains or auto-selecting from config.
@@ -679805,24 +679838,24 @@ const send = {
679805
679838
  chains = [origin, destination];
679806
679839
  }
679807
679840
  else {
679808
- const orderedDefaultChains = (0,_utils_warp_send_js__WEBPACK_IMPORTED_MODULE_19__/* .getOrderedWarpSendChains */ .M)(supportedChains, context.multiProvider);
679841
+ const orderedDefaultChains = (0,_utils_warp_send_js__WEBPACK_IMPORTED_MODULE_20__/* .getOrderedWarpSendChains */ .M)(supportedChains, context.multiProvider);
679809
679842
  chains =
679810
679843
  chains.length === 0
679811
679844
  ? orderedDefaultChains
679812
- : [...(0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_18__/* .intersection */ .E$)(new Set(chains), supportedChains)];
679845
+ : [...(0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_19__/* .intersection */ .E$)(new Set(chains), supportedChains)];
679813
679846
  }
679814
679847
  if (roundTrip) {
679815
679848
  // Round-trip requires all chains to be EVM-like since non-EVM chains
679816
679849
  // become intermediate origins in the reversed path.
679817
- const nonEvmChains = chains.filter((chain) => !(0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_20__/* .isEVMLike */ .Us)(context.multiProvider.getProtocol(chain)));
679818
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_17__/* .assert */ .v)(nonEvmChains.length === 0, `--round-trip is not supported with non-EVM chains (${nonEvmChains.join(', ')}). ` +
679850
+ const nonEvmChains = chains.filter((chain) => !(0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_21__/* .isEVMLike */ .Us)(context.multiProvider.getProtocol(chain)));
679851
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_18__/* .assert */ .v)(nonEvmChains.length === 0, `--round-trip is not supported with non-EVM chains (${nonEvmChains.join(', ')}). ` +
679819
679852
  `Non-EVM chains cannot be intermediate hop origins.`);
679820
679853
  // Appends the reverse of the array, excluding the 1st (e.g. [1,2,3] becomes [1,2,3,2,1])
679821
679854
  const reversed = [...chains].reverse().slice(1, chains.length + 1);
679822
679855
  chains = [...chains, ...reversed];
679823
679856
  }
679824
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logBlue */ .RK)(`🚀 Sending a message for chains: ${chains.join(' ➡️ ')}`);
679825
- await (0,_send_transfer_js__WEBPACK_IMPORTED_MODULE_9__/* .sendTestTransfer */ .P)({
679857
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logBlue */ .RK)(`🚀 Sending a message for chains: ${chains.join(' ➡️ ')}`);
679858
+ await (0,_send_transfer_js__WEBPACK_IMPORTED_MODULE_10__/* .sendTestTransfer */ .P)({
679826
679859
  context,
679827
679860
  warpCoreConfig,
679828
679861
  chains,
@@ -679840,7 +679873,7 @@ const send = {
679840
679873
  feeQuotingUrl,
679841
679874
  feeQuotingApiKey,
679842
679875
  });
679843
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logGreen */ .In)(`✅ Successfully sent messages for chains: ${chains.join(' ➡️ ')}`);
679876
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logGreen */ .In)(`✅ Successfully sent messages for chains: ${chains.join(' ➡️ ')}`);
679844
679877
  process.exit(0);
679845
679878
  },
679846
679879
  };
@@ -679864,18 +679897,18 @@ const check = {
679864
679897
  description: 'Override the origin owner address instead of reading from warp deploy config.',
679865
679898
  implies: 'origin',
679866
679899
  },
679867
- chains: (0,_options_js__WEBPACK_IMPORTED_MODULE_14__/* .stringArrayOptionConfig */ .om)({
679900
+ chains: (0,_options_js__WEBPACK_IMPORTED_MODULE_15__/* .stringArrayOptionConfig */ .om)({
679868
679901
  description: 'List of chains to check. Defaults to all chains except origin when using --ica.',
679869
679902
  implies: 'ica',
679870
679903
  }),
679871
679904
  },
679872
679905
  handler: async ({ context, warpRouteId, ica, origin, originOwner, chains, }) => {
679873
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logCommandHeader */ .dp)('Hyperlane Warp Check');
679906
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logCommandHeader */ .dp)('Hyperlane Warp Check');
679874
679907
  // CROSS route case: resolver set warpCoreConfig but not warpDeployConfig
679875
679908
  // (combined CROSS routes have no deploy config of their own)
679876
679909
  if (context.warpCoreConfig && !context.warpDeployConfig) {
679877
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_17__/* .assert */ .v)(!ica, 'Cannot perform ICA owner check for combined CROSS routes (no deploy config)');
679878
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_17__/* .assert */ .v)(context.resolvedWarpRouteId, 'resolvedWarpRouteId must be set for CROSS routes');
679910
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_18__/* .assert */ .v)(!ica, 'Cannot perform ICA owner check for combined CROSS routes (no deploy config)');
679911
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_18__/* .assert */ .v)(context.resolvedWarpRouteId, 'resolvedWarpRouteId must be set for CROSS routes');
679879
679912
  const result = await (0,_check_warp_js__WEBPACK_IMPORTED_MODULE_3__/* .checkCrossCollateralWarpRoute */ .l$)({
679880
679913
  context,
679881
679914
  warpCoreConfig: context.warpCoreConfig,
@@ -679891,7 +679924,7 @@ const check = {
679891
679924
  // If --ica flag is set, run ICA owner check instead of the regular config check
679892
679925
  // Note: ICA check uses full warpDeployConfig (not filtered) to support pre-deployed chains
679893
679926
  if (ica) {
679894
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_17__/* .assert */ .v)(origin, '--origin is required when using --ica');
679927
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_18__/* .assert */ .v)(origin, '--origin is required when using --ica');
679895
679928
  await (0,_check_warp_js__WEBPACK_IMPORTED_MODULE_3__/* .runWarpIcaOwnerCheck */ .WN)({
679896
679929
  context,
679897
679930
  warpDeployConfig,
@@ -679901,8 +679934,8 @@ const check = {
679901
679934
  });
679902
679935
  process.exit(0);
679903
679936
  }
679904
- ({ warpCoreConfig, warpDeployConfig } = (0,_utils_warp_js__WEBPACK_IMPORTED_MODULE_12__/* .filterWarpConfigsToMatchingChains */ .mg)(warpDeployConfig, warpCoreConfig));
679905
- const result = await (0,_hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_21__/* .checkWarpRouteDeployConfig */ .TU)({
679937
+ ({ warpCoreConfig, warpDeployConfig } = (0,_utils_warp_js__WEBPACK_IMPORTED_MODULE_13__/* .filterWarpConfigsToMatchingChains */ .mg)(warpDeployConfig, warpCoreConfig));
679938
+ const result = await (0,_hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_22__/* .checkWarpRouteDeployConfig */ .TU)({
679906
679939
  multiProvider: context.multiProvider,
679907
679940
  warpCoreConfig,
679908
679941
  warpDeployConfig,
@@ -679968,7 +680001,7 @@ const rebalancer = {
679968
680001
  },
679969
680002
  handler: async (args) => {
679970
680003
  const { context, config: configPath, checkFrequency, withMetrics, monitorOnly, manual, origin, destination, amount, } = args;
679971
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logCommandHeader */ .dp)('Hyperlane Warp Route Rebalancer');
680004
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logCommandHeader */ .dp)('Hyperlane Warp Route Rebalancer');
679972
680005
  try {
679973
680006
  // Load rebalancer configuration
679974
680007
  const rebalancerConfig = _hyperlane_xyz_rebalancer__WEBPACK_IMPORTED_MODULE_2__/* .RebalancerConfig */ .Wo.load(configPath);
@@ -679981,12 +680014,12 @@ const rebalancer = {
679981
680014
  withMetrics,
679982
680015
  monitorOnly,
679983
680016
  coingeckoApiKey: process.env.COINGECKO_API_KEY,
679984
- logger: _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_22__/* .rootLogger */ .Jk.child({ module: 'rebalancer' }),
680017
+ logger: _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_23__/* .rootLogger */ .Jk.child({ module: 'rebalancer' }),
679985
680018
  });
679986
680019
  // Execute based on mode
679987
680020
  if (manual) {
679988
680021
  if (!origin || !destination || !amount) {
679989
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .errorRed */ .aq)('Origin, destination, and amount are required for manual rebalance');
680022
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .errorRed */ .aq)('Origin, destination, and amount are required for manual rebalance');
679990
680023
  process.exit(1);
679991
680024
  }
679992
680025
  await service.executeManual({
@@ -679994,7 +680027,7 @@ const rebalancer = {
679994
680027
  destination,
679995
680028
  amount,
679996
680029
  });
679997
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logGreen */ .In)('✅ Manual rebalance completed successfully');
680030
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logGreen */ .In)('✅ Manual rebalance completed successfully');
679998
680031
  }
679999
680032
  else {
680000
680033
  // Start daemon mode
@@ -680002,7 +680035,7 @@ const rebalancer = {
680002
680035
  }
680003
680036
  }
680004
680037
  catch (e) {
680005
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .errorRed */ .aq)(`Rebalancer error: ${util__WEBPACK_IMPORTED_MODULE_0__.format(e)}`);
680038
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .errorRed */ .aq)(`Rebalancer error: ${util__WEBPACK_IMPORTED_MODULE_0__.format(e)}`);
680006
680039
  process.exit(1);
680007
680040
  }
680008
680041
  },
@@ -680012,25 +680045,25 @@ const verify = {
680012
680045
  describe: 'Verify deployed contracts on explorers',
680013
680046
  builder: WARP_ROUTE_OPTIONS,
680014
680047
  handler: async ({ context, warpRouteId }) => {
680015
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logCommandHeader */ .dp)('Hyperlane Warp Verify');
680048
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logCommandHeader */ .dp)('Hyperlane Warp Verify');
680016
680049
  const { warpCoreConfig } = await getWarpConfigsFromContextOrRegistry({
680017
680050
  context,
680018
680051
  warpRouteId,
680019
680052
  });
680020
- return (0,_verify_warp_js__WEBPACK_IMPORTED_MODULE_13__/* .runVerifyWarpRoute */ .c)({ context, warpCoreConfig });
680053
+ return (0,_verify_warp_js__WEBPACK_IMPORTED_MODULE_14__/* .runVerifyWarpRoute */ .c)({ context, warpCoreConfig });
680021
680054
  },
680022
680055
  };
680023
680056
  const fork = {
680024
680057
  command: 'fork',
680025
680058
  describe: 'Fork a Hyperlane chain on a compatible Anvil/Hardhat node',
680026
680059
  builder: {
680027
- ..._options_js__WEBPACK_IMPORTED_MODULE_14__/* .forkCommandOptions */ .im,
680060
+ ..._options_js__WEBPACK_IMPORTED_MODULE_15__/* .forkCommandOptions */ .im,
680028
680061
  ...WARP_ROUTE_OPTIONS,
680029
680062
  },
680030
680063
  handler: async ({ context, warpRouteId, port, kill, forkConfig: forkConfigPath, }) => {
680031
680064
  let forkConfig;
680032
680065
  if (forkConfigPath) {
680033
- forkConfig = _hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_23__/* .RawForkedChainConfigByChainSchema */ .uE.parse((0,_utils_files_js__WEBPACK_IMPORTED_MODULE_11__/* .readYamlOrJson */ .xQ)(forkConfigPath));
680066
+ forkConfig = _hyperlane_xyz_sdk__WEBPACK_IMPORTED_MODULE_24__/* .RawForkedChainConfigByChainSchema */ .uE.parse((0,_utils_files_js__WEBPACK_IMPORTED_MODULE_12__/* .readYamlOrJson */ .xQ)(forkConfigPath));
680034
680067
  }
680035
680068
  else {
680036
680069
  forkConfig = {};
@@ -680040,8 +680073,8 @@ const fork = {
680040
680073
  warpRouteId,
680041
680074
  });
680042
680075
  const chainsToFork = new Set(Object.keys(warpDeployConfig));
680043
- (0,_logger_js__WEBPACK_IMPORTED_MODULE_16__/* .logBlue */ .RK)(`Forking chains from warp deploy config: ${Array.from(chainsToFork).join(', ')}`);
680044
- await (0,_fork_fork_js__WEBPACK_IMPORTED_MODULE_7__/* .runForkCommand */ .x)({
680076
+ (0,_logger_js__WEBPACK_IMPORTED_MODULE_17__/* .logBlue */ .RK)(`Forking chains from warp deploy config: ${Array.from(chainsToFork).join(', ')}`);
680077
+ await (0,_fork_fork_js__WEBPACK_IMPORTED_MODULE_8__/* .runForkCommand */ .x)({
680045
680078
  context,
680046
680079
  chainsToFork,
680047
680080
  forkConfig,
@@ -685581,6 +685614,7 @@ const SUPPORTED_PROTOCOLS = new Set([
685581
685614
  _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_9__/* .ProtocolType */ .Hb.CosmosNative,
685582
685615
  _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_9__/* .ProtocolType */ .Hb.Starknet,
685583
685616
  _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_9__/* .ProtocolType */ .Hb.Radix,
685617
+ _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_9__/* .ProtocolType */ .Hb.Aleo,
685584
685618
  ]);
685585
685619
  const EXPLORER_GRAPHQL_URL = process.env.HYPERLANE_EXPLORER_GRAPHQL_URL ??
685586
685620
  process.env.EXPLORER_GRAPHQL_URL ??
@@ -685973,7 +686007,7 @@ async function executeDelivery({ context, origin, destination, warpCoreConfig, a
685973
686007
  if (!transferReceipt) {
685974
686008
  throw new Error('No transfer transaction receipt found');
685975
686009
  }
685976
- const extracted = core.extractMessageIds(origin, transferReceipt);
686010
+ const extracted = await core.extractMessageIds(origin, transferReceipt);
685977
686011
  const messageId = extracted[0]?.messageId;
685978
686012
  if (!messageId) {
685979
686013
  // Same-chain transfers don't dispatch an interchain message.
@@ -694193,7 +694227,7 @@ __webpack_async_result__();
694193
694227
  /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
694194
694228
  /* harmony export */ x: () => (/* binding */ VERSION)
694195
694229
  /* harmony export */ });
694196
- const VERSION = '34.0.0';
694230
+ const VERSION = '35.0.0';
694197
694231
  //# sourceMappingURL=version.js.map
694198
694232
 
694199
694233
  /***/ }),
@@ -745467,6 +745501,10 @@ const DEFAULT_BLOCKPI_VALIDATOR = {
745467
745501
  address: '0x6d113ae51bfea7b63a8828f97e9dce393b25c189',
745468
745502
  alias: 'BlockPI',
745469
745503
  };
745504
+ const DEFAULT_POPS_VALIDATOR = {
745505
+ address: '0xa6c998f0db2b56d7a63faf30a9b677c8b9b6faab',
745506
+ alias: 'P-OPS Team',
745507
+ };
745470
745508
  // TODO: consider migrating these to the registry too
745471
745509
  const defaultMultisigConfigs = {
745472
745510
  abstract: {
@@ -745850,21 +745888,14 @@ const defaultMultisigConfigs = {
745850
745888
  ],
745851
745889
  },
745852
745890
  celestia: {
745853
- threshold: 4,
745891
+ threshold: 3,
745854
745892
  validators: [
745855
745893
  {
745856
745894
  address: '0x6dbc192c06907784fb0af0c0c2d8809ea50ba675',
745857
745895
  alias: AW_VALIDATOR_ALIAS,
745858
745896
  },
745859
745897
  DEFAULT_ZKV_VALIDATOR,
745860
- {
745861
- address: '0x885a8c1ef7f7eea8955c8f116fc1fbe1113c4a78',
745862
- alias: 'P2P.ORG',
745863
- },
745864
- {
745865
- address: '0xa6c998f0db2b56d7a63faf30a9b677c8b9b6faab',
745866
- alias: 'P-OPS Team',
745867
- },
745898
+ DEFAULT_POPS_VALIDATOR,
745868
745899
  {
745869
745900
  address: '0x21e93a81920b73c0e98aed8e6b058dae409e4909',
745870
745901
  alias: 'Binary Builders',
@@ -746046,12 +746077,25 @@ const defaultMultisigConfigs = {
746046
746077
  ],
746047
746078
  },
746048
746079
  eden: {
746049
- threshold: 1,
746080
+ threshold: 3,
746050
746081
  validators: [
746051
746082
  {
746052
746083
  address: '0x1c61e6379443e2842d3e9db28e962b6c717fdab1',
746053
746084
  alias: AW_VALIDATOR_ALIAS,
746054
746085
  },
746086
+ DEFAULT_POPS_VALIDATOR,
746087
+ {
746088
+ address: '0xE95a08Ef009be3Fbc7FDfa4739AB2428910C285f',
746089
+ alias: 'Substance Labs',
746090
+ },
746091
+ {
746092
+ address: '0x359042Ade900d465e96C9c7A9BF975b061c1e8f7',
746093
+ alias: 'Cosmostation',
746094
+ },
746095
+ {
746096
+ address: '0xa3f19CDFa6B684b44da3cF1e2D19d5Cb916cA0EF',
746097
+ alias: 'Qubelabs',
746098
+ },
746055
746099
  ],
746056
746100
  },
746057
746101
  electroneum: {
@@ -746582,7 +746626,7 @@ const defaultMultisigConfigs = {
746582
746626
  ],
746583
746627
  },
746584
746628
  mantapacific: {
746585
- threshold: 4,
746629
+ threshold: 3,
746586
746630
  validators: [
746587
746631
  {
746588
746632
  address: '0x8e668c97ad76d0e28375275c41ece4972ab8a5bc',
@@ -746592,7 +746636,6 @@ const defaultMultisigConfigs = {
746592
746636
  address: '0x521a3e6bf8d24809fde1c1fd3494a859a16f132c',
746593
746637
  alias: 'Cosmostation',
746594
746638
  },
746595
- { address: '0x14025fe092f5f8a401dd9819704d9072196d2125', alias: 'P2P' },
746596
746639
  {
746597
746640
  address: '0x25b9a0961c51e74fd83295293bc029131bf1e05a',
746598
746641
  alias: 'Neutron',
@@ -746851,8 +746894,17 @@ const defaultMultisigConfigs = {
746851
746894
  DEFAULT_MITOSIS_VALIDATOR,
746852
746895
  ],
746853
746896
  },
746897
+ nesa: {
746898
+ threshold: 1,
746899
+ validators: [
746900
+ {
746901
+ address: '0x990f548e766b830f69642d36cdd47fb20a2aa405',
746902
+ alias: AW_VALIDATOR_ALIAS,
746903
+ },
746904
+ ],
746905
+ },
746854
746906
  neutron: {
746855
- threshold: 4,
746907
+ threshold: 3,
746856
746908
  validators: [
746857
746909
  {
746858
746910
  address: '0xa9b8c1f4998f781f958c63cfcd1708d02f004ff0',
@@ -746862,7 +746914,6 @@ const defaultMultisigConfigs = {
746862
746914
  address: '0xb65438a014fb05fbadcfe35bc6e25d372b6ba460',
746863
746915
  alias: 'Cosmostation',
746864
746916
  },
746865
- { address: '0x42fa752defe92459370a052b6387a87f7de9b80c', alias: 'P2P' },
746866
746917
  {
746867
746918
  address: '0xc79503a3e3011535a9c60f6d21f76f59823a38bd',
746868
746919
  alias: 'Neutron',
@@ -747826,7 +747877,7 @@ const SEALEVEL_PRIORITY_FEES = {
747826
747877
  /* harmony export */ g: () => (/* binding */ multiProtocolTestChainMetadata),
747827
747878
  /* harmony export */ hR: () => (/* binding */ testChainMetadata)
747828
747879
  /* harmony export */ });
747829
- /* unused harmony exports TestChainName, test1, test2, test3, test4, testXERC20, testVSXERC20, testXERC20Lockbox, testScale1, testScale2, testCollateralFiat, testCosmosChain, testSealevelChain, testStarknetChain, KNOWN_ETHEREUM_TIMELOCK_CONTRACT, ethereumTestChain, multiProtocolTestChains */
747880
+ /* unused harmony exports TestChainName, test1, test2, test3, test4, testXERC20, testVSXERC20, testXERC20Lockbox, testOwnerCollateral, testRebaseCollateral, testScale1, testScale2, testCollateralFiat, testCosmosChain, testSealevelChain, testStarknetChain, KNOWN_ETHEREUM_TIMELOCK_CONTRACT, ethereumTestChain, multiProtocolTestChains */
747830
747881
  /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(16639);
747831
747882
  /* harmony import */ var _metadata_chainMetadataTypes_js__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(1430);
747832
747883
 
@@ -747915,6 +747966,20 @@ const testXERC20Lockbox = {
747915
747966
  displayName: 'Test XERC20Lockbox',
747916
747967
  name: 'testxerc20lockbox',
747917
747968
  };
747969
+ const testOwnerCollateral = {
747970
+ ...test1,
747971
+ chainId: 9913380,
747972
+ domainId: 9913380,
747973
+ displayName: 'Test OwnerCollateral',
747974
+ name: 'testownercollateral',
747975
+ };
747976
+ const testRebaseCollateral = {
747977
+ ...test1,
747978
+ chainId: 9913381,
747979
+ domainId: 9913381,
747980
+ displayName: 'Test RebaseCollateral',
747981
+ name: 'testrebasecollateral',
747982
+ };
747918
747983
  const testScale1 = {
747919
747984
  ...test1,
747920
747985
  chainId: 9913377,
@@ -748049,6 +748114,8 @@ const multiProtocolTestChainMetadata = {
748049
748114
  testscale1: testScale1,
748050
748115
  testscale2: testScale2,
748051
748116
  testcollateralfiat: testCollateralFiat,
748117
+ testownercollateral: testOwnerCollateral,
748118
+ testrebasecollateral: testRebaseCollateral,
748052
748119
  };
748053
748120
  const multiProtocolTestChains = Object.keys(multiProtocolTestChainMetadata);
748054
748121
  //# sourceMappingURL=testChains.js.map
@@ -749937,10 +750004,10 @@ var logging = __nccwpck_require__(94523);
749937
750004
  var types = __nccwpck_require__(16639);
749938
750005
  // EXTERNAL MODULE: ../sdk/dist/app/MultiProtocolApp.js
749939
750006
  var MultiProtocolApp = __nccwpck_require__(48381);
749940
- // EXTERNAL MODULE: ../utils/dist/validation.js
749941
- var validation = __nccwpck_require__(21387);
749942
750007
  // EXTERNAL MODULE: ../utils/dist/async.js
749943
750008
  var dist_async = __nccwpck_require__(14918);
750009
+ // EXTERNAL MODULE: ../utils/dist/validation.js
750010
+ var validation = __nccwpck_require__(21387);
749944
750011
  // EXTERNAL MODULE: ../sdk/dist/providers/ProviderType.js
749945
750012
  var ProviderType = __nccwpck_require__(25047);
749946
750013
  ;// CONCATENATED MODULE: ../sdk/dist/core/adapters/AleoCoreAdapter.js
@@ -749957,9 +750024,41 @@ class AleoCoreAdapter extends MultiProtocolApp/* BaseAleoAdapter */.Ki {
749957
750024
  this.multiProvider = multiProvider;
749958
750025
  this.addresses = addresses;
749959
750026
  }
749960
- extractMessageIds(sourceTx) {
749961
- (0,validation/* assert */.v)(sourceTx.type === ProviderType/* ProviderType */.c.Aleo, `Unsupported provider type for AleoCoreAdapter ${sourceTx.type}`);
749962
- return [];
750027
+ async extractMessageIds(sourceTx) {
750028
+ if (sourceTx.type !== ProviderType/* ProviderType */.c.Aleo) {
750029
+ return [];
750030
+ }
750031
+ if (!this.addresses.mailbox) {
750032
+ this.logger.debug('No Aleo mailbox address configured; skipping message ID extraction');
750033
+ return [];
750034
+ }
750035
+ if (sourceTx.receipt.type !== 'execute') {
750036
+ this.logger.warn(`Aleo dispatch transaction was rejected (type=${sourceTx.receipt.type}); no message dispatched`);
750037
+ return [];
750038
+ }
750039
+ const provider = this.multiProvider.getAleoProvider(this.chainName);
750040
+ const txId = sourceTx.receipt.transactionHash;
750041
+ // Use dispatch_event_index[block_height] to find the exact nonce for this
750042
+ // transaction's block — same approach as the Rust relayer's block-level anchor.
750043
+ const dispatchNonce = await provider.getDispatchNonceForTx(this.addresses.mailbox, txId);
750044
+ if (dispatchNonce == null) {
750045
+ this.logger.warn(`No dispatch_event_index entry for tx ${txId}; no message dispatched`);
750046
+ return [];
750047
+ }
750048
+ const [messageId, destinationDomain] = await Promise.all([
750049
+ provider.getDispatchedMessageId(this.addresses.mailbox, dispatchNonce),
750050
+ provider.getDispatchedDestinationDomain(this.addresses.mailbox, dispatchNonce),
750051
+ ]);
750052
+ if (!messageId || destinationDomain == null) {
750053
+ this.logger.warn(`Could not fetch message ID or destination for nonce ${dispatchNonce}`);
750054
+ return [];
750055
+ }
750056
+ const destination = this.multiProvider.tryGetChainName(destinationDomain);
750057
+ if (!destination) {
750058
+ this.logger.warn(`Unknown destination domain ${destinationDomain}`);
750059
+ return [];
750060
+ }
750061
+ return [{ messageId, destination }];
749963
750062
  }
749964
750063
  async waitForMessageProcessed(messageId, destination, delayMs, maxAttempts) {
749965
750064
  const provider = this.multiProvider.getAleoProvider(destination);
@@ -750014,7 +750113,7 @@ class CosmNativeCoreAdapter extends MultiProtocolApp/* BaseCosmosAdapter */.L_ {
750014
750113
  this.multiProvider = multiProvider;
750015
750114
  this.addresses = addresses;
750016
750115
  }
750017
- extractMessageIds(sourceTx) {
750116
+ async extractMessageIds(sourceTx) {
750018
750117
  (0,validation/* assert */.v)(sourceTx.type === ProviderType/* ProviderType */.c.CosmJsNative, `Unsupported provider type for CosmNativeCoreAdapter ${sourceTx.type}`);
750019
750118
  const dispatchEvents = sourceTx.receipt.events.filter((e) => MESSAGE_DISPATCH_EVENT_TYPES.includes(e.type));
750020
750119
  return dispatchEvents.map((event) => {
@@ -750172,7 +750271,7 @@ class CosmWasmCoreAdapter extends MultiProtocolApp/* BaseCosmWasmAdapter */.J {
750172
750271
  });
750173
750272
  return response.delivered;
750174
750273
  }
750175
- extractMessageIds(sourceTx) {
750274
+ async extractMessageIds(sourceTx) {
750176
750275
  if (sourceTx.type !== ProviderType/* ProviderType */.c.CosmJsWasm) {
750177
750276
  throw new Error(`Unsupported provider type for CosmosCoreAdapter ${sourceTx.type}`);
750178
750277
  }
@@ -750229,7 +750328,7 @@ class EvmCoreAdapter extends MultiProtocolApp/* BaseEvmAdapter */.zl {
750229
750328
  }; // Core only uses mailbox so cast to keep adapter interface simple
750230
750329
  this.core = new HyperlaneCore/* HyperlaneCore */.K(contractsMap, multiProvider.toMultiProvider());
750231
750330
  }
750232
- extractMessageIds(sourceTx) {
750331
+ async extractMessageIds(sourceTx) {
750233
750332
  if (sourceTx.type !== ProviderType/* ProviderType */.c.EthersV5 &&
750234
750333
  sourceTx.type !== ProviderType/* ProviderType */.c.Tron) {
750235
750334
  throw new Error(`Unsupported provider type for EvmCoreAdapter ${sourceTx.type}`);
@@ -750266,7 +750365,7 @@ class RadixCoreAdapter extends MultiProtocolApp/* BaseRadixAdapter */.v5 {
750266
750365
  this.multiProvider = multiProvider;
750267
750366
  this.addresses = addresses;
750268
750367
  }
750269
- extractMessageIds(sourceTx) {
750368
+ async extractMessageIds(sourceTx) {
750270
750369
  (0,validation/* assert */.v)(sourceTx.type === ProviderType/* ProviderType */.c.Radix, `Unsupported provider type for RadixCoreAdapter ${sourceTx.type}`);
750271
750370
  const events = sourceTx.receipt.transaction.receipt?.events ?? [];
750272
750371
  if (events.length === 0) {
@@ -750333,7 +750432,7 @@ class StarknetCoreAdapter extends MultiProtocolApp/* BaseStarknetAdapter */.Rn {
750333
750432
  this.multiProvider = multiProvider;
750334
750433
  this.addresses = addresses;
750335
750434
  }
750336
- extractMessageIds(sourceTx) {
750435
+ async extractMessageIds(sourceTx) {
750337
750436
  if (sourceTx.type !== ProviderType/* ProviderType */.c.Starknet) {
750338
750437
  throw new Error(`Unsupported provider type for StarknetCoreAdapter ${sourceTx.type}`);
750339
750438
  }
@@ -750427,11 +750526,11 @@ class MultiProtocolCore extends MultiProtocolApp/* MultiProtocolApp */.ff {
750427
750526
  return AleoCoreAdapter;
750428
750527
  throw new Error(`No adapter for protocol ${protocol}`);
750429
750528
  }
750430
- extractMessageIds(origin, sourceTx) {
750529
+ async extractMessageIds(origin, sourceTx) {
750431
750530
  return this.adapter(origin).extractMessageIds(sourceTx);
750432
750531
  }
750433
750532
  async waitForMessagesProcessed(origin, destination, sourceTx, delayMs, maxAttempts) {
750434
- const messages = this.adapter(origin).extractMessageIds(sourceTx);
750533
+ const messages = await this.adapter(origin).extractMessageIds(sourceTx);
750435
750534
  await Promise.all(messages.map((msg) => this.adapter(destination).waitForMessageProcessed(msg.messageId, msg.destination, delayMs, maxAttempts)));
750436
750535
  return true;
750437
750536
  }
@@ -750588,7 +750687,7 @@ class SealevelCoreAdapter extends MultiProtocolApp/* BaseSealevelAdapter */.OR {
750588
750687
  this.multiProvider = multiProvider;
750589
750688
  this.addresses = addresses;
750590
750689
  }
750591
- extractMessageIds(sourceTx) {
750690
+ async extractMessageIds(sourceTx) {
750592
750691
  if (sourceTx.type !== ProviderType/* ProviderType */.c.SolanaWeb3) {
750593
750692
  throw new Error(`Unsupported provider type for SealevelCoreAdapter ${sourceTx.type}`);
750594
750693
  }
@@ -752853,6 +752952,8 @@ var objects = __nccwpck_require__(73938);
752853
752952
  var types = __nccwpck_require__(16639);
752854
752953
  // EXTERNAL MODULE: ../utils/dist/logging.js
752855
752954
  var logging = __nccwpck_require__(94523);
752955
+ // EXTERNAL MODULE: ../utils/dist/validation.js
752956
+ var validation = __nccwpck_require__(21387);
752856
752957
  // EXTERNAL MODULE: ../utils/dist/addresses.js
752857
752958
  var addresses = __nccwpck_require__(93142);
752858
752959
  // EXTERNAL MODULE: ../utils/dist/sets.js
@@ -752863,8 +752964,6 @@ var contracts = __nccwpck_require__(15570);
752863
752964
  var AbstractHyperlaneModule = __nccwpck_require__(53387);
752864
752965
  // EXTERNAL MODULE: ../sdk/dist/utils/ism.js
752865
752966
  var ism = __nccwpck_require__(764);
752866
- // EXTERNAL MODULE: ../utils/dist/validation.js
752867
- var validation = __nccwpck_require__(21387);
752868
752967
  // EXTERNAL MODULE: ../sdk/dist/deploy/HyperlaneDeployer.js
752869
752968
  var HyperlaneDeployer = __nccwpck_require__(6609);
752870
752969
  // EXTERNAL MODULE: ../sdk/dist/fee/EvmTokenFeeReader.js
@@ -753280,7 +753379,8 @@ class EvmTokenFeeModule extends AbstractHyperlaneModule/* HyperlaneModule */.x {
753280
753379
  if (targetConfig.type === fee_types/* TokenFeeType */.cA.OffchainQuotedLinearFee) {
753281
753380
  mutableFields.quoteSigners = true;
753282
753381
  }
753283
- if (targetConfig.type === fee_types/* TokenFeeType */.cA.RoutingFee) {
753382
+ if (targetConfig.type === fee_types/* TokenFeeType */.cA.RoutingFee ||
753383
+ targetConfig.type === fee_types/* TokenFeeType */.cA.CrossCollateralRoutingFee) {
753284
753384
  mutableFields.feeContracts = true;
753285
753385
  }
753286
753386
  return !(0,objects/* deepEquals */.c2)((0,objects/* objOmit */.Xi)(actualConfig, mutableFields), (0,objects/* objOmit */.Xi)(targetConfig, mutableFields));
@@ -753336,6 +753436,58 @@ class EvmTokenFeeModule extends AbstractHyperlaneModule/* HyperlaneModule */.x {
753336
753436
  ...this.createOwnershipUpdateTxs(normalizedActualConfig, normalizedTargetConfig),
753337
753437
  ];
753338
753438
  }
753439
+ // CrossCollateralRoutingFee: update sub-fee contracts (nested structure)
753440
+ if (normalizedTargetConfig.type === fee_types/* TokenFeeType */.cA.CrossCollateralRoutingFee &&
753441
+ normalizedActualConfig.type === fee_types/* TokenFeeType */.cA.CrossCollateralRoutingFee &&
753442
+ actualConfig.type === fee_types/* TokenFeeType */.cA.CrossCollateralRoutingFee) {
753443
+ const targetFeeContracts = normalizedTargetConfig.feeContracts ?? {};
753444
+ // Carry actual addresses into target entries, but limit to target keys only so
753445
+ // orphan entries from actualConfig don't get re-injected into the update loop.
753446
+ const merged = (0,objects/* objMerge */._J)(actualConfig, normalizedTargetConfig, 10, true);
753447
+ if (merged.feeContracts) {
753448
+ for (const chainName of Object.keys(merged.feeContracts)) {
753449
+ if (!(chainName in targetFeeContracts)) {
753450
+ delete merged.feeContracts[chainName];
753451
+ }
753452
+ else {
753453
+ for (const routerBytes32 of Object.keys(merged.feeContracts[chainName])) {
753454
+ if (!(routerBytes32 in targetFeeContracts[chainName])) {
753455
+ delete merged.feeContracts[chainName][routerBytes32];
753456
+ }
753457
+ }
753458
+ }
753459
+ }
753460
+ }
753461
+ // Emit clearing transactions for entries removed from target.
753462
+ const removalDestinations = [];
753463
+ const removalRouterKeys = [];
753464
+ const zeroAddresses = [];
753465
+ for (const [chainName, routerConfigs] of Object.entries(actualConfig.feeContracts ?? {})) {
753466
+ const targetRouterConfigs = targetFeeContracts[chainName] ?? {};
753467
+ for (const routerBytes32 of Object.keys(routerConfigs)) {
753468
+ if (!(routerBytes32 in targetRouterConfigs)) {
753469
+ removalDestinations.push(this.multiProvider.getDomainId(chainName));
753470
+ removalRouterKeys.push(routerBytes32);
753471
+ zeroAddresses.push(lib.constants.AddressZero);
753472
+ }
753473
+ }
753474
+ }
753475
+ const removalTxs = removalDestinations.length > 0
753476
+ ? [
753477
+ {
753478
+ annotation: 'Clearing removed CrossCollateralRoutingFee sub-contract pointers',
753479
+ chainId: this.chainId,
753480
+ to: this.args.addresses.deployedFee,
753481
+ data: dist/* CrossCollateralRoutingFee__factory */.gv3.createInterface().encodeFunctionData('setCrossCollateralRouterFeeContracts', [removalDestinations, removalRouterKeys, zeroAddresses]),
753482
+ },
753483
+ ]
753484
+ : [];
753485
+ return [
753486
+ ...(await this.updateCrossCollateralRoutingFee(merged)),
753487
+ ...removalTxs,
753488
+ ...this.createOwnershipUpdateTxs(normalizedActualConfig, normalizedTargetConfig),
753489
+ ];
753490
+ }
753339
753491
  // Routing fee: update sub-fee contracts
753340
753492
  if (normalizedTargetConfig.type === fee_types/* TokenFeeType */.cA.RoutingFee &&
753341
753493
  normalizedActualConfig.type === fee_types/* TokenFeeType */.cA.RoutingFee) {
@@ -753346,6 +753498,114 @@ class EvmTokenFeeModule extends AbstractHyperlaneModule/* HyperlaneModule */.x {
753346
753498
  }
753347
753499
  return this.createOwnershipUpdateTxs(normalizedActualConfig, normalizedTargetConfig);
753348
753500
  }
753501
+ async updateCrossCollateralRoutingFee(targetConfig) {
753502
+ const updateTransactions = [];
753503
+ if (!targetConfig.feeContracts)
753504
+ return [];
753505
+ const currentRoutingAddress = this.args.addresses.deployedFee;
753506
+ // Validate all destination chains and collect domain IDs upfront so that an unknown
753507
+ // chain name fails before any sub-fee deployments are attempted.
753508
+ const domainIdByChain = new Map();
753509
+ for (const chainName of Object.keys(targetConfig.feeContracts)) {
753510
+ domainIdByChain.set(chainName, this.multiProvider.getDomainId(chainName));
753511
+ }
753512
+ // Deduplicate update work for shared addresses (old address → deployed address after update).
753513
+ // Multiple (chainName, routerBytes32) pairs may point to the same physical contract; we only
753514
+ // run the update once per (address, config) pair. If two entries share an address but have
753515
+ // divergent target configs (split case), each gets its own deployment.
753516
+ const updatedByAddress = new Map();
753517
+ // Per-entry deployed address, keyed by "chainName:routerBytes32".
753518
+ const entryDeployedAddr = new Map();
753519
+ for (const [chainName, routerConfigs] of Object.entries(targetConfig.feeContracts)) {
753520
+ for (const [routerBytes32, subFeeConfig] of Object.entries(routerConfigs)) {
753521
+ (0,validation/* assert */.v)(/^0x[0-9a-fA-F]{64}$/.test(routerBytes32), `routerBytes32 key "${routerBytes32}" for chain ${chainName} is not a valid 32-byte hex string`);
753522
+ const address = subFeeConfig.address;
753523
+ const entryKey = `${chainName}:${routerBytes32}`;
753524
+ if (!address) {
753525
+ // No existing sub-fee contract — deploy a new one
753526
+ this.logger.info(`No existing sub-fee contract for ${chainName}/${routerBytes32}, deploying new one`);
753527
+ const subFeeModule = await EvmTokenFeeModule.create({
753528
+ multiProvider: this.multiProvider,
753529
+ chain: this.chainName,
753530
+ config: subFeeConfig,
753531
+ contractVerifier: this.contractVerifier,
753532
+ });
753533
+ const deployedSubFee = subFeeModule.serialize().deployedFee;
753534
+ this.logger.debug(`New cross-collateral sub-fee contract deployed at ${deployedSubFee} for ${chainName}/${routerBytes32}`);
753535
+ entryDeployedAddr.set(entryKey, deployedSubFee);
753536
+ }
753537
+ else {
753538
+ const addrKey = address.toLowerCase();
753539
+ const cached = updatedByAddress.get(addrKey);
753540
+ const configMatches = cached && (0,objects/* deepEquals */.c2)(cached.config, subFeeConfig);
753541
+ if (!cached || !configMatches) {
753542
+ if (cached && !configMatches) {
753543
+ // Same physical address but divergent target config — this is a route split.
753544
+ // Deploy a fresh sub-fee contract rather than reusing the other entry's result.
753545
+ this.logger.info(`Cross-collateral sub-fee config diverged for ${chainName}/${routerBytes32} at ${address}, deploying new contract`);
753546
+ const subFeeModule = await EvmTokenFeeModule.create({
753547
+ multiProvider: this.multiProvider,
753548
+ chain: this.chainName,
753549
+ config: subFeeConfig,
753550
+ contractVerifier: this.contractVerifier,
753551
+ });
753552
+ const deployedSubFee = subFeeModule.serialize().deployedFee;
753553
+ this.logger.debug(`New cross-collateral sub-fee contract deployed at ${deployedSubFee} for ${chainName}/${routerBytes32}`);
753554
+ entryDeployedAddr.set(entryKey, deployedSubFee);
753555
+ continue;
753556
+ }
753557
+ // First time we see this address — run the update
753558
+ const subFeeModule = new EvmTokenFeeModule(this.multiProvider, {
753559
+ addresses: { deployedFee: address },
753560
+ chain: this.chainName,
753561
+ config: subFeeConfig,
753562
+ }, this.contractVerifier);
753563
+ const subFeeUpdateTransactions = await subFeeModule.update(subFeeConfig, { address });
753564
+ updateTransactions.push(...subFeeUpdateTransactions);
753565
+ const deployedSubFeeAddr = subFeeModule.serialize().deployedFee;
753566
+ if (!(0,addresses/* eqAddress */.fv)(deployedSubFeeAddr, address)) {
753567
+ this.logger.debug(`Cross-collateral sub-fee redeployed: ${address} → ${deployedSubFeeAddr} for ${chainName}/${routerBytes32}`);
753568
+ }
753569
+ updatedByAddress.set(addrKey, {
753570
+ config: subFeeConfig,
753571
+ deployedAddr: deployedSubFeeAddr,
753572
+ });
753573
+ }
753574
+ const entry = updatedByAddress.get(addrKey);
753575
+ (0,validation/* assert */.v)(entry !== undefined, `Missing deployed fee for ${addrKey}`);
753576
+ entryDeployedAddr.set(entryKey, entry.deployedAddr);
753577
+ }
753578
+ }
753579
+ }
753580
+ // Build setCrossCollateralRouterFeeContracts args for entries whose pointer changed
753581
+ const destinations = [];
753582
+ const routerKeys = [];
753583
+ const newAddresses = [];
753584
+ for (const [chainName, routerConfigs] of Object.entries(targetConfig.feeContracts)) {
753585
+ const domainId = domainIdByChain.get(chainName);
753586
+ (0,validation/* assert */.v)(domainId !== undefined, `Domain ID not found for ${chainName}`);
753587
+ for (const [routerBytes32, subFeeConfig] of Object.entries(routerConfigs)) {
753588
+ const entryKey = `${chainName}:${routerBytes32}`;
753589
+ const deployedSubFee = entryDeployedAddr.get(entryKey);
753590
+ (0,validation/* assert */.v)(deployedSubFee !== undefined, `Missing deployed fee for entry ${entryKey}`);
753591
+ const oldAddr = subFeeConfig.address;
753592
+ if (!oldAddr || !(0,addresses/* eqAddress */.fv)(deployedSubFee, oldAddr)) {
753593
+ destinations.push(domainId);
753594
+ routerKeys.push(routerBytes32);
753595
+ newAddresses.push(deployedSubFee);
753596
+ }
753597
+ }
753598
+ }
753599
+ if (destinations.length > 0) {
753600
+ updateTransactions.push({
753601
+ annotation: 'Updating CrossCollateralRoutingFee sub-contract pointers',
753602
+ chainId: this.chainId,
753603
+ to: currentRoutingAddress,
753604
+ data: dist/* CrossCollateralRoutingFee__factory */.gv3.createInterface().encodeFunctionData('setCrossCollateralRouterFeeContracts', [destinations, routerKeys, newAddresses]),
753605
+ });
753606
+ }
753607
+ return updateTransactions;
753608
+ }
753349
753609
  async updateRoutingFee(targetConfig) {
753350
753610
  const updateTransactions = [];
753351
753611
  if (!targetConfig.feeContracts)
@@ -756583,22 +756843,50 @@ class EvmHookReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1
756583
756843
  switch (config.type) {
756584
756844
  case _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.FALLBACK_ROUTING:
756585
756845
  case _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.ROUTING:
756586
- config.domains = await (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__/* .promiseObjAll */ .a1)((0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__/* .objMap */ .Yp)(config.domains, async (_, hook) => this.deriveHookConfig(hook)));
756587
- if (config.type === _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.FALLBACK_ROUTING)
756588
- config.fallback = await this.deriveHookConfig(config.fallback);
756846
+ config.domains = await (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__/* .promiseObjAll */ .a1)((0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_5__/* .objMap */ .Yp)(config.domains, async (_, hook) => {
756847
+ const derived = await this.deriveHookConfig(hook);
756848
+ return this.preserveUnredeployable(hook, derived);
756849
+ }));
756850
+ if (config.type === _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.FALLBACK_ROUTING) {
756851
+ const derived = await this.deriveHookConfig(config.fallback);
756852
+ config.fallback = this.preserveUnredeployable(config.fallback, derived);
756853
+ }
756589
756854
  break;
756855
+ case _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.CCTP:
756856
+ return config;
756590
756857
  case _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.AGGREGATION:
756591
- config.hooks = await Promise.all(config.hooks.map(async (hook) => this.deriveHookConfig(hook)));
756858
+ config.hooks = await Promise.all(config.hooks.map(async (hook) => {
756859
+ const derived = await this.deriveHookConfig(hook);
756860
+ return this.preserveUnredeployable(hook, derived);
756861
+ }));
756592
756862
  break;
756593
- case _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.AMOUNT_ROUTING:
756594
- [config.lowerHook, config.upperHook] = await Promise.all([
756595
- this.deriveHookConfig(config.lowerHook),
756596
- this.deriveHookConfig(config.upperHook),
756863
+ case _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.AMOUNT_ROUTING: {
756864
+ const lowerOrig = config.lowerHook;
756865
+ const upperOrig = config.upperHook;
756866
+ const [lowerDerived, upperDerived] = await Promise.all([
756867
+ this.deriveHookConfig(lowerOrig),
756868
+ this.deriveHookConfig(upperOrig),
756597
756869
  ]);
756870
+ config.lowerHook = this.preserveUnredeployable(lowerOrig, lowerDerived);
756871
+ config.upperHook = this.preserveUnredeployable(upperOrig, upperDerived);
756598
756872
  break;
756873
+ }
756599
756874
  }
756600
756875
  return config;
756601
756876
  }
756877
+ // Returns original HookConfig for non-redeployable types (CCTP, PREDICATE) so that
756878
+ // normalizeConfig — which strips 'address' from all objects — does not discard
756879
+ // the address. Returns the address as a bare string so it survives normalizeConfig
756880
+ // and deploy() reaches the string branch intact, regardless of whether the original
756881
+ // was already a string or an object with an address field.
756882
+ preserveUnredeployable(original, derived) {
756883
+ if (derived.type !== _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.CCTP && derived.type !== _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.PREDICATE) {
756884
+ return derived;
756885
+ }
756886
+ if (typeof original === 'string')
756887
+ return original;
756888
+ return derived.address;
756889
+ }
756602
756890
  async deriveMailboxDefaultHookConfig(address) {
756603
756891
  const hook = _hyperlane_xyz_core__WEBPACK_IMPORTED_MODULE_0__/* .DefaultHook__factory */ .hR3.connect(address, this.provider);
756604
756892
  this.assertHookType(await hook.hookType(), _types_js__WEBPACK_IMPORTED_MODULE_4__/* .OnchainHookType */ .c0.MAILBOX_DEFAULT_HOOK);
@@ -756677,7 +756965,10 @@ class EvmHookReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1
756677
756965
  hook.hooks(ethers__WEBPACK_IMPORTED_MODULE_6__.ethers.constants.AddressZero),
756678
756966
  ]);
756679
756967
  this.assertHookType(hookType, _types_js__WEBPACK_IMPORTED_MODULE_4__/* .OnchainHookType */ .c0.AGGREGATION);
756680
- const hookConfigs = await (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_7__/* .concurrentMap */ .q1)(this.concurrency, hooks, (hook) => this.deriveHookConfig(hook));
756968
+ const hookConfigs = await (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_7__/* .concurrentMap */ .q1)(this.concurrency, hooks, async (hookAddress) => {
756969
+ const derived = await this.deriveHookConfigFromAddress(hookAddress);
756970
+ return this.preserveUnredeployable(hookAddress, derived);
756971
+ });
756681
756972
  const config = {
756682
756973
  address,
756683
756974
  type: _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.AGGREGATION,
@@ -756806,7 +757097,8 @@ class EvmHookReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1
756806
757097
  hook.childHook(),
756807
757098
  ]);
756808
757099
  const destinationChainName = this.multiProvider.getChainName(destinationDomain);
756809
- const childHookConfig = await this.deriveHookConfig(childHookAddress);
757100
+ const derivedChild = await this.deriveHookConfigFromAddress(childHookAddress);
757101
+ const childHookConfig = this.preserveUnredeployable(childHookAddress, derivedChild);
756810
757102
  const config = {
756811
757103
  address,
756812
757104
  type: _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.ARB_L2_TO_L1,
@@ -756845,7 +757137,8 @@ class EvmHookReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1
756845
757137
  this.fetchDomainHooks(hook),
756846
757138
  ]);
756847
757139
  this.assertHookType(hookType, _types_js__WEBPACK_IMPORTED_MODULE_4__/* .OnchainHookType */ .c0.FALLBACK_ROUTING);
756848
- const fallbackHookConfig = await this.deriveHookConfig(fallbackHookAddress);
757140
+ const derivedFallback = await this.deriveHookConfigFromAddress(fallbackHookAddress);
757141
+ const fallbackHookConfig = this.preserveUnredeployable(fallbackHookAddress, derivedFallback);
756849
757142
  const config = {
756850
757143
  owner,
756851
757144
  address,
@@ -756863,7 +757156,8 @@ class EvmHookReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1
756863
757156
  try {
756864
757157
  const domainHook = await hook.hooks(domainId);
756865
757158
  if (domainHook !== ethers__WEBPACK_IMPORTED_MODULE_6__.ethers.constants.AddressZero) {
756866
- domainHooks[chainName] = await this.deriveHookConfig(domainHook);
757159
+ const derived = await this.deriveHookConfigFromAddress(domainHook);
757160
+ domainHooks[chainName] = this.preserveUnredeployable(domainHook, derived);
756867
757161
  }
756868
757162
  }
756869
757163
  catch {
@@ -756901,10 +757195,12 @@ class EvmHookReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1
756901
757195
  ]);
756902
757196
  this.assertHookType(hookType, _types_js__WEBPACK_IMPORTED_MODULE_4__/* .OnchainHookType */ .c0.AMOUNT_ROUTING);
756903
757197
  // Parallelize hook config derivation
756904
- const [lowerHookConfig, upperHookConfig] = await Promise.all([
756905
- this.deriveHookConfig(lowerHookAddress),
756906
- this.deriveHookConfig(upperHookAddress),
757198
+ const [lowerDerived, upperDerived] = await Promise.all([
757199
+ this.deriveHookConfigFromAddress(lowerHookAddress),
757200
+ this.deriveHookConfigFromAddress(upperHookAddress),
756907
757201
  ]);
757202
+ const lowerHookConfig = this.preserveUnredeployable(lowerHookAddress, lowerDerived);
757203
+ const upperHookConfig = this.preserveUnredeployable(upperHookAddress, upperDerived);
756908
757204
  const config = {
756909
757205
  address,
756910
757206
  type: _types_js__WEBPACK_IMPORTED_MODULE_4__/* .HookType */ .WD.AMOUNT_ROUTING,
@@ -757705,16 +758001,16 @@ class EvmIsmModule extends _core_AbstractHyperlaneModule_js__WEBPACK_IMPORTED_MO
757705
758001
  /* harmony export */ });
757706
758002
  /* harmony import */ var ethers__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(61934);
757707
758003
  /* harmony import */ var _hyperlane_xyz_core__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(50653);
757708
- /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(94523);
758004
+ /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(94523);
757709
758005
  /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(73938);
757710
758006
  /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(14918);
757711
758007
  /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_10__ = __nccwpck_require__(21387);
757712
758008
  /* harmony import */ var _ccip_utils_js__WEBPACK_IMPORTED_MODULE_11__ = __nccwpck_require__(93035);
757713
- /* harmony import */ var _consts_concurrency_js__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(92573);
757714
- /* harmony import */ var _metadata_chainMetadataTypes_js__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(1430);
757715
- /* harmony import */ var _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(49680);
758009
+ /* harmony import */ var _consts_concurrency_js__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(92573);
758010
+ /* harmony import */ var _metadata_chainMetadataTypes_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(1430);
758011
+ /* harmony import */ var _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(49680);
757716
758012
  /* harmony import */ var _utils_contract_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(76709);
757717
- /* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(69352);
758013
+ /* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(69352);
757718
758014
 
757719
758015
 
757720
758016
 
@@ -757725,14 +758021,19 @@ class EvmIsmModule extends _core_AbstractHyperlaneModule_js__WEBPACK_IMPORTED_MO
757725
758021
 
757726
758022
 
757727
758023
  const INCREMENTAL_REVERT_STRING = 'IncrementalDomainRoutingIsm: removal not supported';
757728
- class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1__/* .HyperlaneReader */ .S {
758024
+ // ISM types that cannot be deployed by HyperlaneIsmFactory — preserve as address strings.
758025
+ const NON_REDEPLOYABLE_ISM_TYPES = new Set([
758026
+ _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.OFFCHAIN_LOOKUP,
758027
+ _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.INTERCHAIN_ACCOUNT_ROUTING,
758028
+ ]);
758029
+ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_2__/* .HyperlaneReader */ .S {
757729
758030
  multiProvider;
757730
758031
  chain;
757731
758032
  concurrency;
757732
758033
  messageContext;
757733
- logger = _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_2__/* .rootLogger */ .Jk.child({ module: 'EvmIsmReader' });
758034
+ logger = _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_3__/* .rootLogger */ .Jk.child({ module: 'EvmIsmReader' });
757734
758035
  isZkSyncChain;
757735
- constructor(multiProvider, chain, concurrency = multiProvider.tryGetRpcConcurrency(chain) ?? _consts_concurrency_js__WEBPACK_IMPORTED_MODULE_3__/* .DEFAULT_CONTRACT_READ_CONCURRENCY */ .M, messageContext) {
758036
+ constructor(multiProvider, chain, concurrency = multiProvider.tryGetRpcConcurrency(chain) ?? _consts_concurrency_js__WEBPACK_IMPORTED_MODULE_4__/* .DEFAULT_CONTRACT_READ_CONCURRENCY */ .M, messageContext) {
757736
758037
  super(multiProvider, chain);
757737
758038
  this.multiProvider = multiProvider;
757738
758039
  this.chain = chain;
@@ -757740,7 +758041,7 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
757740
758041
  this.messageContext = messageContext;
757741
758042
  // So we can distinguish between Storage/Static ISMs
757742
758043
  const chainTechnicalStack = this.multiProvider.getChainMetadata(this.chain).technicalStack;
757743
- this.isZkSyncChain = chainTechnicalStack === _metadata_chainMetadataTypes_js__WEBPACK_IMPORTED_MODULE_4__/* .ChainTechnicalStack */ .DU.ZkSync;
758044
+ this.isZkSyncChain = chainTechnicalStack === _metadata_chainMetadataTypes_js__WEBPACK_IMPORTED_MODULE_5__/* .ChainTechnicalStack */ .DU.ZkSync;
757744
758045
  }
757745
758046
  async deriveIsmConfigFromAddress(address) {
757746
758047
  let moduleType = undefined;
@@ -757753,28 +758054,28 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
757753
758054
  this.setSmartProviderLogLevel('silent');
757754
758055
  moduleType = await ism.moduleType();
757755
758056
  switch (moduleType) {
757756
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.UNUSED:
758057
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.UNUSED:
757757
758058
  throw new Error('UNUSED does not have a corresponding IsmType');
757758
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.ROUTING:
758059
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.ROUTING:
757759
758060
  // IsmType is either ROUTING or FALLBACK_ROUTING, but that's determined inside deriveRoutingConfig
757760
758061
  derivedIsmConfig = await this.deriveRoutingConfig(address);
757761
758062
  break;
757762
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.AGGREGATION:
758063
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.AGGREGATION:
757763
758064
  derivedIsmConfig = await this.deriveAggregationConfig(address);
757764
758065
  break;
757765
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.LEGACY_MULTISIG:
758066
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.LEGACY_MULTISIG:
757766
758067
  throw new Error('LEGACY_MULTISIG is deprecated and not supported');
757767
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.MERKLE_ROOT_MULTISIG:
757768
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.MESSAGE_ID_MULTISIG:
758068
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.MERKLE_ROOT_MULTISIG:
758069
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.MESSAGE_ID_MULTISIG:
757769
758070
  derivedIsmConfig = await this.deriveMultisigConfig(address);
757770
758071
  break;
757771
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.NULL:
758072
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.NULL:
757772
758073
  derivedIsmConfig = await this.deriveNullConfig(address);
757773
758074
  break;
757774
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.CCIP_READ:
758075
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.CCIP_READ:
757775
758076
  derivedIsmConfig = await this.deriveOffchainLookupConfig(address);
757776
758077
  break;
757777
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.ARB_L2_TO_L1:
758078
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.ARB_L2_TO_L1:
757778
758079
  return this.deriveArbL2ToL1Config(address);
757779
758080
  default:
757780
758081
  throw new Error(`Unknown ISM ModuleType: ${moduleType}`);
@@ -757786,17 +758087,17 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
757786
758087
  throw new Error(errorMessage);
757787
758088
  }
757788
758089
  finally {
757789
- this.setSmartProviderLogLevel((0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_2__/* .getLogLevel */ .XM)()); // returns to original level defined by rootLogger
758090
+ this.setSmartProviderLogLevel((0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_3__/* .getLogLevel */ .XM)()); // returns to original level defined by rootLogger
757790
758091
  }
757791
758092
  return derivedIsmConfig;
757792
758093
  }
757793
758094
  async deriveOffchainLookupConfig(address) {
757794
758095
  const ism = _hyperlane_xyz_core__WEBPACK_IMPORTED_MODULE_0__/* .AbstractCcipReadIsm__factory */ .RWQ.connect(address, this.provider);
757795
- this.assertModuleType(await ism.moduleType(), _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.CCIP_READ);
758096
+ this.assertModuleType(await ism.moduleType(), _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.CCIP_READ);
757796
758097
  const [urls, owner] = await Promise.all([ism.urls(), ism.owner()]);
757797
758098
  return {
757798
758099
  address,
757799
- type: _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.OFFCHAIN_LOOKUP,
758100
+ type: _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.OFFCHAIN_LOOKUP,
757800
758101
  urls,
757801
758102
  owner,
757802
758103
  };
@@ -757808,26 +758109,48 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
757808
758109
  return this.deriveIsmConfigFromAddress(config);
757809
758110
  // Extend the inner isms
757810
758111
  switch (config.type) {
757811
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.FALLBACK_ROUTING:
757812
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.ROUTING:
757813
- config.domains = await (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_6__/* .promiseObjAll */ .a1)((0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_6__/* .objMap */ .Yp)(config.domains, async (_, ism) => this.deriveIsmConfig(ism)));
758112
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.FALLBACK_ROUTING:
758113
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.ROUTING:
758114
+ config.domains = await (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_6__/* .promiseObjAll */ .a1)((0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_6__/* .objMap */ .Yp)(config.domains, async (_, ism) => {
758115
+ const derived = await this.deriveIsmConfig(ism);
758116
+ return this.preserveUnredeployableIsm(ism, derived);
758117
+ }));
757814
758118
  break;
757815
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.AGGREGATION:
757816
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.STORAGE_AGGREGATION:
757817
- config.modules = await Promise.all(config.modules.map(async (ism) => this.deriveIsmConfig(ism)));
758119
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.AGGREGATION:
758120
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.STORAGE_AGGREGATION:
758121
+ config.modules = await Promise.all(config.modules.map(async (ism) => {
758122
+ const derived = await this.deriveIsmConfig(ism);
758123
+ return this.preserveUnredeployableIsm(ism, derived);
758124
+ }));
757818
758125
  break;
757819
- case _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.AMOUNT_ROUTING:
757820
- [config.lowerIsm, config.upperIsm] = await Promise.all([
757821
- this.deriveIsmConfig(config.lowerIsm),
757822
- this.deriveIsmConfig(config.upperIsm),
758126
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.AMOUNT_ROUTING: {
758127
+ const lowerOrig = config.lowerIsm;
758128
+ const upperOrig = config.upperIsm;
758129
+ const [lowerDerived, upperDerived] = await Promise.all([
758130
+ this.deriveIsmConfig(lowerOrig),
758131
+ this.deriveIsmConfig(upperOrig),
757823
758132
  ]);
758133
+ config.lowerIsm = this.preserveUnredeployableIsm(lowerOrig, lowerDerived);
758134
+ config.upperIsm = this.preserveUnredeployableIsm(upperOrig, upperDerived);
757824
758135
  break;
758136
+ }
757825
758137
  }
757826
758138
  return config;
757827
758139
  }
758140
+ // Returns the original IsmConfig for non-redeployable ISM types (e.g. OFFCHAIN_LOOKUP,
758141
+ // INTERCHAIN_ACCOUNT_ROUTING) so normalizeConfig and deploy() handle them correctly.
758142
+ // The original is typically a string address that survives normalizeConfig intact and
758143
+ // reaches deploy()'s string branch; an object config is also preserved via derived.address.
758144
+ preserveUnredeployableIsm(original, derived) {
758145
+ if (!NON_REDEPLOYABLE_ISM_TYPES.has(derived.type))
758146
+ return derived;
758147
+ if (typeof original === 'string')
758148
+ return original;
758149
+ return derived.address;
758150
+ }
757828
758151
  async deriveRoutingConfig(address) {
757829
758152
  const abstractRoutingIsm = _hyperlane_xyz_core__WEBPACK_IMPORTED_MODULE_0__/* .AbstractRoutingIsm__factory */ .cYN.connect(address, this.provider);
757830
- this.assertModuleType(await abstractRoutingIsm.moduleType(), _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.ROUTING);
758153
+ this.assertModuleType(await abstractRoutingIsm.moduleType(), _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.ROUTING);
757831
758154
  // OPTIMIZATION: When we have messageContext, we only need to derive
757832
758155
  // the specific ISM that will verify this message, not the full routing table.
757833
758156
  // Just call route(message) and derive that single ISM directly.
@@ -757848,7 +758171,7 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
757848
758171
  if (!owner) {
757849
758172
  if (isIca) {
757850
758173
  return {
757851
- type: _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.INTERCHAIN_ACCOUNT_ROUTING,
758174
+ type: _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.INTERCHAIN_ACCOUNT_ROUTING,
757852
758175
  isms: {},
757853
758176
  address,
757854
758177
  owner: ethers__WEBPACK_IMPORTED_MODULE_7__.ethers.constants.AddressZero,
@@ -757862,7 +758185,7 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
757862
758185
  if (isIca) {
757863
758186
  const icaRouter = _hyperlane_xyz_core__WEBPACK_IMPORTED_MODULE_0__/* .InterchainAccountRouter__factory */ .ojJ.connect(address, this.provider);
757864
758187
  return {
757865
- type: _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.INTERCHAIN_ACCOUNT_ROUTING,
758188
+ type: _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.INTERCHAIN_ACCOUNT_ROUTING,
757866
758189
  isms: await this.deriveRemoteIsmConfigs(domainIds, abstractRoutingIsm, icaRouter.isms,
757867
758190
  // The isms here are deployed on remote chains and can't be derived
757868
758191
  false),
@@ -757872,18 +758195,18 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
757872
758195
  }
757873
758196
  const domains = await this.deriveRemoteIsmConfigs(domainIds, abstractRoutingIsm, defaultFallbackIsmInstance.module, true);
757874
758197
  // Fallback routing ISM extends from MailboxClient, default routing
757875
- let ismType = _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.FALLBACK_ROUTING;
758198
+ let ismType = _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.FALLBACK_ROUTING;
757876
758199
  try {
757877
758200
  await defaultFallbackIsmInstance.mailbox();
757878
758201
  }
757879
758202
  catch {
757880
- ismType = _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.ROUTING;
758203
+ ismType = _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.ROUTING;
757881
758204
  this.logger.debug('Error accessing mailbox property, implying this is not a fallback routing ISM.', address);
757882
758205
  }
757883
758206
  // Check if it's an incremental routing ISM by looking for the unique error message in bytecode
757884
- if (ismType === _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.ROUTING) {
758207
+ if (ismType === _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.ROUTING) {
757885
758208
  if (await (0,_utils_contract_js__WEBPACK_IMPORTED_MODULE_8__/* .contractHasString */ .u)(this.provider, address, INCREMENTAL_REVERT_STRING)) {
757886
- ismType = _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.INCREMENTAL_ROUTING;
758209
+ ismType = _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.INCREMENTAL_ROUTING;
757887
758210
  this.logger.debug({ address }, 'Detected incremental routing ISM');
757888
758211
  }
757889
758212
  }
@@ -757925,12 +758248,14 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
757925
758248
  const moduleAddress = this.messageContext
757926
758249
  ? await contractInstance.route(this.messageContext.message)
757927
758250
  : await addressDeriveFunc(domainId);
757928
- return [
757929
- chainName,
757930
- deriveConfig
757931
- ? await this.deriveIsmConfig(moduleAddress)
757932
- : moduleAddress,
757933
- ];
758251
+ if (deriveConfig) {
758252
+ const derived = await this.deriveIsmConfigFromAddress(moduleAddress);
758253
+ return [
758254
+ chainName,
758255
+ this.preserveUnredeployableIsm(moduleAddress, derived),
758256
+ ];
758257
+ }
758258
+ return [chainName, moduleAddress];
757934
758259
  });
757935
758260
  return Object.fromEntries(res.filter((curr) => curr));
757936
758261
  }
@@ -757951,29 +758276,36 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
757951
758276
  this.logger.debug('Error accessing AmountRoutingIsm properties, treating as legacy InterchainAccountIsm.', address);
757952
758277
  // return a basic ICA routing config for legacy contracts
757953
758278
  return {
757954
- type: _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.INTERCHAIN_ACCOUNT_ROUTING,
758279
+ type: _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.INTERCHAIN_ACCOUNT_ROUTING,
757955
758280
  isms: {},
757956
758281
  address,
757957
758282
  owner: ethers__WEBPACK_IMPORTED_MODULE_7__.ethers.constants.AddressZero,
757958
758283
  };
757959
758284
  }
758285
+ const [lowerDerived, upperDerived] = await Promise.all([
758286
+ this.deriveIsmConfigFromAddress(lowerIsm),
758287
+ this.deriveIsmConfigFromAddress(upperIsm),
758288
+ ]);
757960
758289
  return {
757961
- type: _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.AMOUNT_ROUTING,
758290
+ type: _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.AMOUNT_ROUTING,
757962
758291
  address,
757963
- lowerIsm: await this.deriveIsmConfig(lowerIsm),
757964
- upperIsm: await this.deriveIsmConfig(upperIsm),
758292
+ lowerIsm: this.preserveUnredeployableIsm(lowerIsm, lowerDerived),
758293
+ upperIsm: this.preserveUnredeployableIsm(upperIsm, upperDerived),
757965
758294
  threshold: threshold.toNumber(),
757966
758295
  };
757967
758296
  }
757968
758297
  async deriveAggregationConfig(address) {
757969
758298
  const ism = _hyperlane_xyz_core__WEBPACK_IMPORTED_MODULE_0__/* .StaticAggregationIsm__factory */ .UMv.connect(address, this.provider);
757970
- this.assertModuleType(await ism.moduleType(), _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.AGGREGATION);
758299
+ this.assertModuleType(await ism.moduleType(), _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.AGGREGATION);
757971
758300
  const [modules, threshold] = await ism.modulesAndThreshold(ethers__WEBPACK_IMPORTED_MODULE_7__.ethers.constants.AddressZero);
757972
- const ismConfigs = await (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_9__/* .concurrentMap */ .q1)(this.concurrency, modules, async (module) => this.deriveIsmConfig(module));
758301
+ const ismConfigs = await (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_9__/* .concurrentMap */ .q1)(this.concurrency, modules, async (module) => {
758302
+ const derived = await this.deriveIsmConfigFromAddress(module);
758303
+ return this.preserveUnredeployableIsm(module, derived);
758304
+ });
757973
758305
  // If it's a zkSync chain, it must be a StorageAggregationIsm
757974
758306
  const ismType = this.isZkSyncChain
757975
- ? _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.STORAGE_AGGREGATION
757976
- : _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.AGGREGATION;
758307
+ ? _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.STORAGE_AGGREGATION
758308
+ : _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.AGGREGATION;
757977
758309
  return {
757978
758310
  address,
757979
758311
  type: ismType,
@@ -757984,17 +758316,17 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
757984
758316
  async deriveMultisigConfig(address) {
757985
758317
  const ism = _hyperlane_xyz_core__WEBPACK_IMPORTED_MODULE_0__/* .IMultisigIsm__factory */ .jku.connect(address, this.provider);
757986
758318
  const moduleType = await ism.moduleType();
757987
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_10__/* .assert */ .v)(moduleType === _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.MERKLE_ROOT_MULTISIG ||
757988
- moduleType === _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.MESSAGE_ID_MULTISIG, `expected module type to be ${_types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.MERKLE_ROOT_MULTISIG} or ${_types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.MESSAGE_ID_MULTISIG}, got ${moduleType}`);
757989
- let ismType = moduleType === _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.MERKLE_ROOT_MULTISIG
757990
- ? _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.MERKLE_ROOT_MULTISIG
757991
- : _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.MESSAGE_ID_MULTISIG;
758319
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_10__/* .assert */ .v)(moduleType === _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.MERKLE_ROOT_MULTISIG ||
758320
+ moduleType === _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.MESSAGE_ID_MULTISIG, `expected module type to be ${_types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.MERKLE_ROOT_MULTISIG} or ${_types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.MESSAGE_ID_MULTISIG}, got ${moduleType}`);
758321
+ let ismType = moduleType === _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.MERKLE_ROOT_MULTISIG
758322
+ ? _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.MERKLE_ROOT_MULTISIG
758323
+ : _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.MESSAGE_ID_MULTISIG;
757992
758324
  // If it's a zkSync chain, it must be a StorageMultisigIsm
757993
758325
  if (this.isZkSyncChain) {
757994
758326
  ismType =
757995
- moduleType === _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.MERKLE_ROOT_MULTISIG
757996
- ? _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.STORAGE_MERKLE_ROOT_MULTISIG
757997
- : _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.STORAGE_MESSAGE_ID_MULTISIG;
758327
+ moduleType === _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.MERKLE_ROOT_MULTISIG
758328
+ ? _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.STORAGE_MERKLE_ROOT_MULTISIG
758329
+ : _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.STORAGE_MESSAGE_ID_MULTISIG;
757998
758330
  }
757999
758331
  const [validators, threshold] = await ism.validatorsAndThreshold(ethers__WEBPACK_IMPORTED_MODULE_7__.ethers.constants.AddressZero);
758000
758332
  return {
@@ -758006,7 +758338,7 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
758006
758338
  }
758007
758339
  async deriveNullConfig(address) {
758008
758340
  const ism = _hyperlane_xyz_core__WEBPACK_IMPORTED_MODULE_0__/* .IInterchainSecurityModule__factory */ .Die.connect(address, this.provider);
758009
- this.assertModuleType(await ism.moduleType(), _types_js__WEBPACK_IMPORTED_MODULE_5__/* .ModuleType */ .nR.NULL);
758341
+ this.assertModuleType(await ism.moduleType(), _types_js__WEBPACK_IMPORTED_MODULE_1__/* .ModuleType */ .nR.NULL);
758010
758342
  // if it has trustedRelayer() property --> TRUSTED_RELAYER
758011
758343
  const trustedRelayerIsm = _hyperlane_xyz_core__WEBPACK_IMPORTED_MODULE_0__/* .TrustedRelayerIsm__factory */ .tdx.connect(address, this.provider);
758012
758344
  try {
@@ -758014,7 +758346,7 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
758014
758346
  return {
758015
758347
  address,
758016
758348
  relayer,
758017
- type: _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.TRUSTED_RELAYER,
758349
+ type: _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.TRUSTED_RELAYER,
758018
758350
  };
758019
758351
  }
758020
758352
  catch {
@@ -758028,7 +758360,7 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
758028
758360
  return {
758029
758361
  address,
758030
758362
  owner,
758031
- type: _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.PAUSABLE,
758363
+ type: _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.PAUSABLE,
758032
758364
  paused,
758033
758365
  };
758034
758366
  }
@@ -758045,7 +758377,7 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
758045
758377
  }
758046
758378
  return {
758047
758379
  address,
758048
- type: _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.CCIP,
758380
+ type: _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.CCIP,
758049
758381
  originChain,
758050
758382
  };
758051
758383
  }
@@ -758058,7 +758390,7 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
758058
758390
  await opStackIsm.VERIFIED_MASK_INDEX();
758059
758391
  return {
758060
758392
  address,
758061
- type: _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.OP_STACK,
758393
+ type: _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.OP_STACK,
758062
758394
  origin: address,
758063
758395
  nativeBridge: '', // no way to extract native bridge from the ism
758064
758396
  };
@@ -758077,7 +758409,7 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
758077
758409
  const owner = await rateLimitedIsm.owner();
758078
758410
  return {
758079
758411
  address,
758080
- type: _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.RATE_LIMITED,
758412
+ type: _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.RATE_LIMITED,
758081
758413
  recipient,
758082
758414
  maxCapacity,
758083
758415
  owner,
@@ -758089,7 +758421,7 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
758089
758421
  // no specific properties, must be Test ISM
758090
758422
  return {
758091
758423
  address,
758092
- type: _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.TEST_ISM,
758424
+ type: _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.TEST_ISM,
758093
758425
  };
758094
758426
  }
758095
758427
  async deriveArbL2ToL1Config(address) {
@@ -758099,7 +758431,7 @@ class EvmIsmReader extends _utils_HyperlaneReader_js__WEBPACK_IMPORTED_MODULE_1_
758099
758431
  const bridge = await outboxContract.bridge();
758100
758432
  return {
758101
758433
  address,
758102
- type: _types_js__WEBPACK_IMPORTED_MODULE_5__/* .IsmType */ .GO.ARB_L2_TO_L1,
758434
+ type: _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.ARB_L2_TO_L1,
758103
758435
  bridge,
758104
758436
  };
758105
758437
  }
@@ -758293,6 +758625,9 @@ class HyperlaneIsmFactory extends _app_HyperlaneApp_js__WEBPACK_IMPORTED_MODULE_
758293
758625
  case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.CCIP:
758294
758626
  contract = await this.deployCCIPIsm(destination, config);
758295
758627
  break;
758628
+ case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.OFFCHAIN_LOOKUP:
758629
+ throw new Error(`OFFCHAIN_LOOKUP ISM cannot be deployed — it must already be deployed. ` +
758630
+ `Pass its contract address as a string instead of a config object.`);
758296
758631
  case _types_js__WEBPACK_IMPORTED_MODULE_1__/* .IsmType */ .GO.INTERCHAIN_ACCOUNT_ROUTING:
758297
758632
  throw new Error('Interchain Account ISM is not supported in this context');
758298
758633
  default:
@@ -765041,6 +765376,8 @@ class EvmIcaTxSubmitter {
765041
765376
  chain: config.chain,
765042
765377
  destinationChain: config.destinationChain,
765043
765378
  originInterchainAccountRouter: interchainAccountRouterAddress,
765379
+ destinationInterchainAccountRouter: config.destinationInterchainAccountRouter,
765380
+ interchainSecurityModule: config.interchainSecurityModule,
765044
765381
  }, internalSubmitter, multiProvider, interchainAccountApp);
765045
765382
  }
765046
765383
  async submit(...txs) {
@@ -765068,18 +765405,28 @@ class EvmIcaTxSubmitter {
765068
765405
  return { data, to, value: value?.toString() };
765069
765406
  });
765070
765407
  const refundAddress = (0,addresses/* bytes32ToAddress */.ov)(this.config.owner);
765071
- const hookMetadata = (0,messages/* formatStandardHookMetadata */.NE)({ refundAddress });
765408
+ const icaConfig = {
765409
+ origin: this.config.chain,
765410
+ owner: this.config.owner,
765411
+ ismOverride: this.config.interchainSecurityModule,
765412
+ routerOverride: this.config.destinationInterchainAccountRouter,
765413
+ localRouter: this.config.originInterchainAccountRouter,
765414
+ };
765415
+ const gasLimit = await this.interchainAccountApp.estimateIcaHandleGas({
765416
+ origin: this.config.chain,
765417
+ destination: this.config.destinationChain,
765418
+ innerCalls,
765419
+ config: icaConfig,
765420
+ });
765421
+ const hookMetadata = (0,messages/* formatStandardHookMetadata */.NE)({
765422
+ refundAddress,
765423
+ gasLimit: gasLimit.toBigInt(),
765424
+ });
765072
765425
  const icaTx = await this.interchainAccountApp.getCallRemote({
765073
765426
  chain: this.config.chain,
765074
765427
  destination: this.config.destinationChain,
765075
765428
  innerCalls,
765076
- config: {
765077
- origin: this.config.chain,
765078
- owner: this.config.owner,
765079
- ismOverride: this.config.interchainSecurityModule,
765080
- routerOverride: this.config.destinationInterchainAccountRouter,
765081
- localRouter: this.config.originInterchainAccountRouter,
765082
- },
765429
+ config: icaConfig,
765083
765430
  hookMetadata,
765084
765431
  });
765085
765432
  return this.submitter.submit({
@@ -799885,34 +800232,70 @@ var index_default = SafeApiKit_default;
799885
800232
 
799886
800233
  const SAFE_API_RETRIES = 10;
799887
800234
  const SAFE_API_BASE_RETRY_MS = 1000;
800235
+ function isSafeApiKitConstructor(value) {
800236
+ return typeof value === 'function';
800237
+ }
799888
800238
  function safeApiKeyRequired(txServiceUrl) {
799889
800239
  return /safe\.global|5afe\.dev/.test(txServiceUrl);
799890
800240
  }
800241
+ function normalizeSafeTxServiceUrl(txServiceUrl) {
800242
+ const trimmedUrl = txServiceUrl.replace(/\/+$/, '');
800243
+ if (trimmedUrl.endsWith('/api'))
800244
+ return trimmedUrl;
800245
+ return `${trimmedUrl}/api`;
800246
+ }
800247
+ function isSafeGlobalTxServiceUrl(txServiceUrl) {
800248
+ try {
800249
+ const url = new URL(normalizeSafeTxServiceUrl(txServiceUrl));
800250
+ return (['api.safe.global', 'api.5afe.dev'].includes(url.hostname) &&
800251
+ /^\/tx-service\/[^/]+\/api$/.test(url.pathname));
800252
+ }
800253
+ catch {
800254
+ return false;
800255
+ }
800256
+ }
800257
+ function getSafeApiKitConfig(chainId, txServiceUrl, gnosisSafeApiKey) {
800258
+ const normalizedTxServiceUrl = normalizeSafeTxServiceUrl(txServiceUrl);
800259
+ const apiKey = safeApiKeyRequired(normalizedTxServiceUrl)
800260
+ ? gnosisSafeApiKey
800261
+ : undefined;
800262
+ const baseConfig = {
800263
+ chainId: BigInt(chainId),
800264
+ apiKey,
800265
+ };
800266
+ // Safe's hosted gateway authenticates API-key traffic correctly when API Kit
800267
+ // derives the service URL from chainId. Supplying txServiceUrl can hit lower
800268
+ // unauthenticated rate limits on some endpoints.
800269
+ if (apiKey && isSafeGlobalTxServiceUrl(normalizedTxServiceUrl)) {
800270
+ return baseConfig;
800271
+ }
800272
+ return {
800273
+ ...baseConfig,
800274
+ txServiceUrl: normalizedTxServiceUrl,
800275
+ };
800276
+ }
799891
800277
  function getSafeService(chain, multiProvider) {
799892
800278
  const { gnosisSafeTransactionServiceUrl, gnosisSafeApiKey } = multiProvider.getChainMetadata(chain);
799893
- let txServiceUrl = gnosisSafeTransactionServiceUrl;
799894
- if (!txServiceUrl) {
799895
- throw new Error(`must provide tx service url for ${chain}`);
799896
- }
799897
- // Ensure txServiceUrl ends with /api
799898
- if (!txServiceUrl.endsWith('/api') &&
799899
- !txServiceUrl.endsWith('/api/') &&
799900
- !txServiceUrl.endsWith('api')) {
799901
- // Remove trailing slash if present to avoid double slashes
799902
- txServiceUrl = txServiceUrl.replace(/\/+$/, '');
799903
- txServiceUrl = `${txServiceUrl}/api`;
799904
- }
800279
+ (0,validation/* assert */.v)(gnosisSafeTransactionServiceUrl, `must provide tx service url for ${chain}`);
799905
800280
  const chainId = multiProvider.getEvmChainId(chain);
799906
- if (!chainId) {
799907
- throw new Error(`Chain is not an EVM chain: ${chain}`);
800281
+ (0,validation/* assert */.v)(chainId, `Chain is not an EVM chain: ${chain}`);
800282
+ const config = getSafeApiKitConfig(chainId, gnosisSafeTransactionServiceUrl, gnosisSafeApiKey);
800283
+ (0,validation/* assert */.v)(isSafeApiKitConstructor(index_default), '@safe-global/api-kit default export is not a constructor');
800284
+ try {
800285
+ return new index_default(config);
800286
+ }
800287
+ catch (error) {
800288
+ if (error instanceof TypeError &&
800289
+ error.message.includes('There is no transaction service available for chainId') &&
800290
+ !config.txServiceUrl &&
800291
+ isSafeGlobalTxServiceUrl(gnosisSafeTransactionServiceUrl)) {
800292
+ return new index_default({
800293
+ ...config,
800294
+ txServiceUrl: normalizeSafeTxServiceUrl(gnosisSafeTransactionServiceUrl),
800295
+ });
800296
+ }
800297
+ throw error;
799908
800298
  }
799909
- // @ts-ignore
799910
- return new index_default({
799911
- chainId: BigInt(chainId),
799912
- txServiceUrl,
799913
- // Only provide apiKey if the url contains safe.global or 5afe.dev
799914
- apiKey: safeApiKeyRequired(txServiceUrl) ? gnosisSafeApiKey : undefined,
799915
- });
799916
800299
  }
799917
800300
  // This is the version of the Safe contracts that the SDK is compatible with.
799918
800301
  // Copied the MVP fields from https://github.com/safe-global/safe-core-sdk/blob/4d1c0e14630f951c2498e1d4dd521403af91d6e1/packages/protocol-kit/src/contracts/config.ts#L19
@@ -800013,7 +800396,13 @@ async function canProposeSafeTransactions(proposer, chain, multiProvider, safeAd
800013
800396
  try {
800014
800397
  safeService = getSafeService(chain, multiProvider);
800015
800398
  }
800016
- catch {
800399
+ catch (e) {
800400
+ logging/* rootLogger */.Jk.error('Failed to get Safe service for chain', {
800401
+ chain,
800402
+ chainName: multiProvider.tryGetChainName(chain),
800403
+ knownChains: multiProvider.getKnownChainNames(),
800404
+ error: e,
800405
+ });
800017
800406
  return false;
800018
800407
  }
800019
800408
  const safe = await getSafe(chain, multiProvider, safeAddress);
@@ -801730,7 +802119,7 @@ __nccwpck_require__.a(__webpack_module__, async (__webpack_handle_async_dependen
801730
802119
  /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
801731
802120
  /* harmony export */ N: () => (/* binding */ EvmWarpModule)
801732
802121
  /* harmony export */ });
801733
- /* harmony import */ var compare_versions__WEBPACK_IMPORTED_MODULE_29__ = __nccwpck_require__(95416);
802122
+ /* harmony import */ var compare_versions__WEBPACK_IMPORTED_MODULE_31__ = __nccwpck_require__(95416);
801734
802123
  /* harmony import */ var ethers__WEBPACK_IMPORTED_MODULE_21__ = __nccwpck_require__(61934);
801735
802124
  /* harmony import */ var starknet__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(98954);
801736
802125
  /* harmony import */ var _hyperlane_xyz_core__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(50653);
@@ -801742,26 +802131,28 @@ __nccwpck_require__.a(__webpack_module__, async (__webpack_handle_async_dependen
801742
802131
  /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_16__ = __nccwpck_require__(52193);
801743
802132
  /* harmony import */ var _hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_18__ = __nccwpck_require__(73689);
801744
802133
  /* harmony import */ var _block_explorer_etherscan_js__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(26492);
801745
- /* harmony import */ var _contracts_contracts_js__WEBPACK_IMPORTED_MODULE_26__ = __nccwpck_require__(15570);
802134
+ /* harmony import */ var _contracts_contracts_js__WEBPACK_IMPORTED_MODULE_28__ = __nccwpck_require__(15570);
801746
802135
  /* harmony import */ var _core_AbstractHyperlaneModule_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(53387);
801747
802136
  /* harmony import */ var _deploy_proxy_js__WEBPACK_IMPORTED_MODULE_14__ = __nccwpck_require__(83697);
801748
802137
  /* harmony import */ var _deploy_verify_ContractVerifier_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(76939);
801749
802138
  /* harmony import */ var _fee_EvmTokenFeeModule_js__WEBPACK_IMPORTED_MODULE_25__ = __nccwpck_require__(43313);
802139
+ /* harmony import */ var _fee_crossCollateralUtils_js__WEBPACK_IMPORTED_MODULE_27__ = __nccwpck_require__(66630);
802140
+ /* harmony import */ var _fee_types_js__WEBPACK_IMPORTED_MODULE_26__ = __nccwpck_require__(52555);
801750
802141
  /* harmony import */ var _hook_updates_js__WEBPACK_IMPORTED_MODULE_20__ = __nccwpck_require__(69203);
801751
802142
  /* harmony import */ var _hook_utils_js__WEBPACK_IMPORTED_MODULE_19__ = __nccwpck_require__(13912);
801752
802143
  /* harmony import */ var _hook_types_js__WEBPACK_IMPORTED_MODULE_22__ = __nccwpck_require__(52116);
801753
- /* harmony import */ var _ism_EvmIsmModule_js__WEBPACK_IMPORTED_MODULE_27__ = __nccwpck_require__(3612);
802144
+ /* harmony import */ var _ism_EvmIsmModule_js__WEBPACK_IMPORTED_MODULE_29__ = __nccwpck_require__(3612);
801754
802145
  /* harmony import */ var _predicate_PredicateDeployer_js__WEBPACK_IMPORTED_MODULE_23__ = __nccwpck_require__(550);
801755
802146
  /* harmony import */ var _router_types_js__WEBPACK_IMPORTED_MODULE_17__ = __nccwpck_require__(38230);
801756
- /* harmony import */ var _utils_decimals_js__WEBPACK_IMPORTED_MODULE_30__ = __nccwpck_require__(27043);
802147
+ /* harmony import */ var _utils_decimals_js__WEBPACK_IMPORTED_MODULE_32__ = __nccwpck_require__(27043);
801757
802148
  /* harmony import */ var _ism_types_js__WEBPACK_IMPORTED_MODULE_10__ = __nccwpck_require__(69352);
801758
802149
  /* harmony import */ var _utils_ism_js__WEBPACK_IMPORTED_MODULE_11__ = __nccwpck_require__(764);
801759
802150
  /* harmony import */ var _EvmWarpRouteReader_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(40945);
801760
802151
  /* harmony import */ var _EvmXERC20Module_js__WEBPACK_IMPORTED_MODULE_13__ = __nccwpck_require__(5715);
801761
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_28__ = __nccwpck_require__(4169);
802152
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_30__ = __nccwpck_require__(4169);
801762
802153
  /* harmony import */ var _configUtils_js__WEBPACK_IMPORTED_MODULE_24__ = __nccwpck_require__(63776);
801763
- /* harmony import */ var _contracts_js__WEBPACK_IMPORTED_MODULE_32__ = __nccwpck_require__(81504);
801764
- /* harmony import */ var _deploy_js__WEBPACK_IMPORTED_MODULE_31__ = __nccwpck_require__(19186);
802154
+ /* harmony import */ var _contracts_js__WEBPACK_IMPORTED_MODULE_34__ = __nccwpck_require__(81504);
802155
+ /* harmony import */ var _deploy_js__WEBPACK_IMPORTED_MODULE_33__ = __nccwpck_require__(19186);
801765
802156
  /* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_12__ = __nccwpck_require__(38466);
801766
802157
  var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_EvmXERC20Module_js__WEBPACK_IMPORTED_MODULE_13__]);
801767
802158
  _EvmXERC20Module_js__WEBPACK_IMPORTED_MODULE_13__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
@@ -801791,6 +802182,8 @@ _EvmXERC20Module_js__WEBPACK_IMPORTED_MODULE_13__ = (__webpack_async_dependencie
801791
802182
 
801792
802183
 
801793
802184
 
802185
+
802186
+
801794
802187
 
801795
802188
 
801796
802189
 
@@ -802623,6 +803016,16 @@ class EvmWarpModule extends _core_AbstractHyperlaneModule_js__WEBPACK_IMPORTED_M
802623
803016
  */
802624
803017
  async createTokenFeeUpdateTxs(actualConfig, expectedConfig, tokenReaderParams) {
802625
803018
  if (!expectedConfig.tokenFee) {
803019
+ if (actualConfig.tokenFee) {
803020
+ return [
803021
+ {
803022
+ annotation: 'Removing fee recipient...',
803023
+ chainId: this.chainId,
803024
+ to: this.args.addresses.deployedTokenRoute,
803025
+ data: _hyperlane_xyz_core__WEBPACK_IMPORTED_MODULE_1__/* .TokenRouter__factory */ .NgW.createInterface().encodeFunctionData('setFeeRecipient(address)', [ethers__WEBPACK_IMPORTED_MODULE_21__.constants.AddressZero]),
803026
+ },
803027
+ ];
803028
+ }
802626
803029
  return [];
802627
803030
  }
802628
803031
  const routerAddress = this.args.addresses.deployedTokenRoute;
@@ -802670,7 +803073,21 @@ class EvmWarpModule extends _core_AbstractHyperlaneModule_js__WEBPACK_IMPORTED_M
802670
803073
  deployedFee: currentTokenFee.address,
802671
803074
  },
802672
803075
  }, this.contractVerifier);
802673
- const updateTransactions = await tokenFeeModule.update(resolvedTokenFee, tokenReaderParams);
803076
+ // For CCR fee updates, forward the on-chain enrolled router keys as hints so the
803077
+ // reader can observe orphan feeContracts entries not present in the target config.
803078
+ // Without these hints, the removal loop in EvmTokenFeeModule.update() never sees
803079
+ // stale (dest, router) entries and the on-chain pointer stays wired.
803080
+ let effectiveTokenReaderParams = tokenReaderParams;
803081
+ if ((0,_types_js__WEBPACK_IMPORTED_MODULE_12__/* .isCrossCollateralTokenConfig */ .v3)(actualConfig) &&
803082
+ actualConfig.crossCollateralRouters &&
803083
+ resolvedTokenFee.type === _fee_types_js__WEBPACK_IMPORTED_MODULE_26__/* .TokenFeeType */ .cA.CrossCollateralRoutingFee) {
803084
+ const onchainRoutersByDomain = (0,_router_types_js__WEBPACK_IMPORTED_MODULE_17__/* .resolveRouterMapConfig */ .c0)(this.multiProvider, actualConfig.crossCollateralRouters);
803085
+ effectiveTokenReaderParams = {
803086
+ ...tokenReaderParams,
803087
+ crossCollateralRouters: (0,_fee_crossCollateralUtils_js__WEBPACK_IMPORTED_MODULE_27__/* .mergeCrossCollateralRouters */ .wC)(tokenReaderParams?.crossCollateralRouters, onchainRoutersByDomain),
803088
+ };
803089
+ }
803090
+ const updateTransactions = await tokenFeeModule.update(resolvedTokenFee, effectiveTokenReaderParams);
802674
803091
  const { deployedFee } = tokenFeeModule.serialize();
802675
803092
  // Only call setFeeRecipient if the fee recipient address has changed
802676
803093
  if (!(0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_4__/* .eqAddress */ .fv)(currentTokenFee.address, deployedFee)) {
@@ -802691,7 +803108,7 @@ class EvmWarpModule extends _core_AbstractHyperlaneModule_js__WEBPACK_IMPORTED_M
802691
803108
  * @returns Ethereum transaction that need to be executed to update the owner.
802692
803109
  */
802693
803110
  createOwnershipUpdateTxs(actualConfig, expectedConfig) {
802694
- return (0,_contracts_contracts_js__WEBPACK_IMPORTED_MODULE_26__/* .transferOwnershipTransactions */ .Yg)(this.multiProvider.getEvmChainId(this.args.chain), this.args.addresses.deployedTokenRoute, actualConfig, expectedConfig, `${expectedConfig.type} Warp Route`);
803111
+ return (0,_contracts_contracts_js__WEBPACK_IMPORTED_MODULE_28__/* .transferOwnershipTransactions */ .Yg)(this.multiProvider.getEvmChainId(this.args.chain), this.args.addresses.deployedTokenRoute, actualConfig, expectedConfig, `${expectedConfig.type} Warp Route`);
802695
803112
  }
802696
803113
  /**
802697
803114
  * Updates or deploys the ISM using the provided configuration.
@@ -802727,7 +803144,7 @@ class EvmWarpModule extends _core_AbstractHyperlaneModule_js__WEBPACK_IMPORTED_M
802727
803144
  (typeof onChainOwner === 'string' ? onChainOwner : undefined);
802728
803145
  expectedIsm = (0,_utils_ism_js__WEBPACK_IMPORTED_MODULE_11__/* .setRateLimitedIsmRecipient */ .re)(expectedIsm, this.args.addresses.deployedTokenRoute, defaultOwner);
802729
803146
  }
802730
- const ismModule = new _ism_EvmIsmModule_js__WEBPACK_IMPORTED_MODULE_27__/* .EvmIsmModule */ .a(this.multiProvider, {
803147
+ const ismModule = new _ism_EvmIsmModule_js__WEBPACK_IMPORTED_MODULE_29__/* .EvmIsmModule */ .a(this.multiProvider, {
802731
803148
  chain: this.args.chain,
802732
803149
  config: actualConfig.interchainSecurityModule,
802733
803150
  addresses: {
@@ -802750,7 +803167,7 @@ class EvmWarpModule extends _core_AbstractHyperlaneModule_js__WEBPACK_IMPORTED_M
802750
803167
  */
802751
803168
  async upgradeWarpRouteImplementationTx(actualConfig, expectedConfig) {
802752
803169
  const updateTransactions = [];
802753
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_15__/* .assert */ .v)(expectedConfig.type !== _config_js__WEBPACK_IMPORTED_MODULE_28__/* .TokenType */ .ks.unknown, 'Cannot upgrade warp route with unknown token type');
803170
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_15__/* .assert */ .v)(expectedConfig.type !== _config_js__WEBPACK_IMPORTED_MODULE_30__/* .TokenType */ .ks.unknown, 'Cannot upgrade warp route with unknown token type');
802754
803171
  // This should be impossible since we try catch the call to `PACKAGE_VERSION`
802755
803172
  // in `EvmWarpRouteReader.fetchPackageVersion`
802756
803173
  (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_15__/* .assert */ .v)(actualConfig.contractVersion, 'Actual contract version is undefined');
@@ -802758,7 +803175,7 @@ class EvmWarpModule extends _core_AbstractHyperlaneModule_js__WEBPACK_IMPORTED_M
802758
803175
  if (!expectedConfig.contractVersion) {
802759
803176
  return [];
802760
803177
  }
802761
- const comparisonValue = (0,compare_versions__WEBPACK_IMPORTED_MODULE_29__.compareVersions)(expectedConfig.contractVersion, actualConfig.contractVersion);
803178
+ const comparisonValue = (0,compare_versions__WEBPACK_IMPORTED_MODULE_31__.compareVersions)(expectedConfig.contractVersion, actualConfig.contractVersion);
802762
803179
  // Expected version is lower than actual version, no upgrade is possible
802763
803180
  if (comparisonValue === -1) {
802764
803181
  throw new Error(`Expected contract version ${expectedConfig.contractVersion} is lower than actual contract version ${actualConfig.contractVersion}`);
@@ -802773,13 +803190,13 @@ class EvmWarpModule extends _core_AbstractHyperlaneModule_js__WEBPACK_IMPORTED_M
802773
803190
  // Scale values are immutables baked into the implementation bytecode.
802774
803191
  // Changing the effective scale during an upgrade would cause in-flight
802775
803192
  // messages to be decoded with incorrect scaling.
802776
- (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_15__/* .assert */ .v)((0,_utils_decimals_js__WEBPACK_IMPORTED_MODULE_30__/* .scalesEqual */ .gm)(actualConfig.scale, expectedConfig.scale), `Scale change detected during upgrade. ` +
803193
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_15__/* .assert */ .v)((0,_utils_decimals_js__WEBPACK_IMPORTED_MODULE_32__/* .scalesEqual */ .gm)(actualConfig.scale, expectedConfig.scale), `Scale change detected during upgrade. ` +
802777
803194
  `Changing scale on an existing deployment may cause in-flight messages to be decoded incorrectly.`);
802778
803195
  this.logger.info(`Upgrading Warp Route implementation on ${this.args.chain} from ${actualConfig.contractVersion} to ${expectedConfig.contractVersion}`);
802779
- const deployer = new _deploy_js__WEBPACK_IMPORTED_MODULE_31__/* .HypERC20Deployer */ .A7(this.multiProvider);
803196
+ const deployer = new _deploy_js__WEBPACK_IMPORTED_MODULE_33__/* .HypERC20Deployer */ .A7(this.multiProvider);
802780
803197
  const constructorArgs = await deployer.constructorArgs(this.chainName, expectedConfig);
802781
803198
  const tokenType = expectedConfig.type;
802782
- const implementation = await deployer.deployContractWithName(this.chainName, tokenType, _contracts_js__WEBPACK_IMPORTED_MODULE_32__/* .hypERC20contracts */ .LW[tokenType], constructorArgs, undefined, false);
803199
+ const implementation = await deployer.deployContractWithName(this.chainName, tokenType, _contracts_js__WEBPACK_IMPORTED_MODULE_34__/* .hypERC20contracts */ .LW[tokenType], constructorArgs, undefined, false);
802783
803200
  const provider = this.multiProvider.getProvider(this.domainId);
802784
803201
  const proxyAddress = this.args.addresses.deployedTokenRoute;
802785
803202
  const proxyAdminAddress = await (0,_deploy_proxy_js__WEBPACK_IMPORTED_MODULE_14__/* .proxyAdmin */ .Ey)(provider, proxyAddress);
@@ -802808,9 +803225,9 @@ class EvmWarpModule extends _core_AbstractHyperlaneModule_js__WEBPACK_IMPORTED_M
802808
803225
  // proxy upgrade. Always emit setMaxFeePpm in this case.
802809
803226
  const crossingPpmBoundary = actualConfig.contractVersion &&
802810
803227
  expectedConfig.contractVersion &&
802811
- (0,compare_versions__WEBPACK_IMPORTED_MODULE_29__.compareVersions)(actualConfig.contractVersion, _EvmWarpRouteReader_js__WEBPACK_IMPORTED_MODULE_7__/* .CCTP_PPM_STORAGE_VERSION */ .EY) <
803228
+ (0,compare_versions__WEBPACK_IMPORTED_MODULE_31__.compareVersions)(actualConfig.contractVersion, _EvmWarpRouteReader_js__WEBPACK_IMPORTED_MODULE_7__/* .CCTP_PPM_STORAGE_VERSION */ .EY) <
802812
803229
  0 &&
802813
- (0,compare_versions__WEBPACK_IMPORTED_MODULE_29__.compareVersions)(expectedConfig.contractVersion, _EvmWarpRouteReader_js__WEBPACK_IMPORTED_MODULE_7__/* .CCTP_PPM_STORAGE_VERSION */ .EY) >= 0;
803230
+ (0,compare_versions__WEBPACK_IMPORTED_MODULE_31__.compareVersions)(expectedConfig.contractVersion, _EvmWarpRouteReader_js__WEBPACK_IMPORTED_MODULE_7__/* .CCTP_PPM_STORAGE_VERSION */ .EY) >= 0;
802814
803231
  if (!crossingPpmBoundary && actualMaxFeeBps === expectedConfig.maxFeeBps) {
802815
803232
  return [];
802816
803233
  }
@@ -802835,7 +803252,7 @@ class EvmWarpModule extends _core_AbstractHyperlaneModule_js__WEBPACK_IMPORTED_M
802835
803252
  static async create(params) {
802836
803253
  const { chain, config, multiProvider, ccipContractCache, contractVerifier, proxyFactoryFactories, } = params;
802837
803254
  const chainName = multiProvider.getChainName(chain);
802838
- const deployer = new _deploy_js__WEBPACK_IMPORTED_MODULE_31__/* .HypERC20Deployer */ .A7(multiProvider);
803255
+ const deployer = new _deploy_js__WEBPACK_IMPORTED_MODULE_33__/* .HypERC20Deployer */ .A7(multiProvider);
802839
803256
  const deployedContracts = await deployer.deployContracts(chainName, config);
802840
803257
  const warpModule = new EvmWarpModule(multiProvider, {
802841
803258
  addresses: {
@@ -803130,7 +803547,7 @@ class EvmWarpRouteReader extends EvmRouterReader/* EvmRouterReader */.V {
803130
803547
  'interchainSecurityModule' in routerConfig) {
803131
803548
  routerConfig.interchainSecurityModule = lib.constants.AddressZero;
803132
803549
  }
803133
- const predicateWrapper = await this.derivePredicateWrapperConfig(routerConfig.hook);
803550
+ const predicateWrapper = await this.derivePredicateWrapperConfig(routerConfig.hook, warpRouteAddress);
803134
803551
  const derivedConfig = {
803135
803552
  ...routerConfig,
803136
803553
  ...tokenConfig,
@@ -803146,9 +803563,37 @@ class EvmWarpRouteReader extends EvmRouterReader/* EvmRouterReader */.V {
803146
803563
  /**
803147
803564
  * Searches the derived hook tree for a PredicateRouterWrapper and, if found,
803148
803565
  * reads its on-chain config (registry, policyId, owner).
803566
+ *
803567
+ * EvmHookReader.preserveUnredeployable() stores PREDICATE sub-hooks as bare address
803568
+ * strings (to survive normalizeConfig and deploy's string branch). The sync
803569
+ * findPredicateAddressInHook() returns undefined for bare strings, so we fall back to
803570
+ * an on-chain hookType() probe on bare string sub-hooks of aggregation hooks.
803149
803571
  */
803150
- async derivePredicateWrapperConfig(hook) {
803151
- const predicateAddress = this.findPredicateAddressInHook(hook);
803572
+ async derivePredicateWrapperConfig(hook, warpRouteAddress) {
803573
+ let predicateAddress = this.findPredicateAddressInHook(hook);
803574
+ if (!predicateAddress &&
803575
+ typeof hook !== 'string' &&
803576
+ hook?.type === types/* HookType */.WD.AGGREGATION) {
803577
+ for (const sub of hook.hooks) {
803578
+ if (typeof sub !== 'string')
803579
+ continue;
803580
+ try {
803581
+ const candidate = dist/* PredicateRouterWrapper__factory */.sYb.connect(sub, this.provider);
803582
+ const [hookType, warpRoute] = await Promise.all([
803583
+ candidate.hookType(),
803584
+ candidate.warpRoute(),
803585
+ ]);
803586
+ if (hookType === types/* OnchainHookType */.c0.PREDICATE_ROUTER_WRAPPER &&
803587
+ (0,addresses/* eqAddress */.fv)(warpRoute, warpRouteAddress)) {
803588
+ predicateAddress = sub;
803589
+ break;
803590
+ }
803591
+ }
803592
+ catch {
803593
+ // Not a PredicateRouterWrapper — continue
803594
+ }
803595
+ }
803596
+ }
803152
803597
  if (!predicateAddress)
803153
803598
  return undefined;
803154
803599
  const wrapper = dist/* PredicateRouterWrapper__factory */.sYb.connect(predicateAddress, this.provider);
@@ -804887,6 +805332,7 @@ class TokenMetadata {
804887
805332
  /* harmony export */ Zz: () => (/* binding */ PROTOCOL_TO_HYP_NATIVE_STANDARD),
804888
805333
  /* harmony export */ _T: () => (/* binding */ tokenTypeToStandard),
804889
805334
  /* harmony export */ c_: () => (/* binding */ LOCKBOX_STANDARDS),
805335
+ /* harmony export */ eB: () => (/* binding */ ERC4626_COLLATERAL_STANDARDS),
804890
805336
  /* harmony export */ kK: () => (/* binding */ TOKEN_CROSS_COLLATERAL_STANDARDS),
804891
805337
  /* harmony export */ ph: () => (/* binding */ TokenStandard),
804892
805338
  /* harmony export */ ro: () => (/* binding */ TOKEN_STANDARD_TO_PROVIDER_TYPE)
@@ -805077,6 +805523,7 @@ const TOKEN_NFT_STANDARDS = [
805077
805523
  const TOKEN_COLLATERALIZED_STANDARDS = [
805078
805524
  TokenStandard.EvmHypCollateral,
805079
805525
  TokenStandard.EvmHypOwnerCollateral,
805526
+ TokenStandard.EvmHypRebaseCollateral,
805080
805527
  TokenStandard.EvmHypNative,
805081
805528
  TokenStandard.SealevelHypCollateral,
805082
805529
  TokenStandard.SealevelHypNative,
@@ -805089,6 +805536,8 @@ const TOKEN_COLLATERALIZED_STANDARDS = [
805089
805536
  TokenStandard.AleoHypCollateral,
805090
805537
  TokenStandard.TronHypNative,
805091
805538
  TokenStandard.TronHypCollateral,
805539
+ TokenStandard.TronHypOwnerCollateral,
805540
+ TokenStandard.TronHypRebaseCollateral,
805092
805541
  TokenStandard.TronHypXERC20Lockbox,
805093
805542
  TokenStandard.TronHypVSXERC20Lockbox,
805094
805543
  TokenStandard.RadixHypCollateral,
@@ -805119,6 +805568,12 @@ const LOCKBOX_STANDARDS = [
805119
805568
  TokenStandard.TronHypXERC20Lockbox,
805120
805569
  TokenStandard.TronHypVSXERC20Lockbox,
805121
805570
  ];
805571
+ const ERC4626_COLLATERAL_STANDARDS = [
805572
+ TokenStandard.EvmHypOwnerCollateral,
805573
+ TokenStandard.EvmHypRebaseCollateral,
805574
+ TokenStandard.TronHypOwnerCollateral,
805575
+ TokenStandard.TronHypRebaseCollateral,
805576
+ ];
805122
805577
  const MINT_LIMITED_STANDARDS = [
805123
805578
  TokenStandard.EvmHypXERC20,
805124
805579
  TokenStandard.EvmHypXERC20Lockbox,
@@ -806131,6 +806586,7 @@ __nccwpck_require__.d(__webpack_exports__, {
806131
806586
  u$: () => (/* binding */ EvmHypCollateralAdapter),
806132
806587
  OR: () => (/* binding */ EvmHypCollateralFiatAdapter),
806133
806588
  uc: () => (/* binding */ EvmHypNativeAdapter),
806589
+ dv: () => (/* binding */ EvmHypOwnerCollateralAdapter),
806134
806590
  aT: () => (/* binding */ EvmHypRebaseCollateralAdapter),
806135
806591
  Qn: () => (/* binding */ EvmHypSyntheticAdapter),
806136
806592
  kL: () => (/* binding */ EvmHypSyntheticRebaseAdapter),
@@ -806715,8 +807171,20 @@ class EvmHypRebaseCollateralAdapter extends BaseEvmHypCollateralAdapter {
806715
807171
  async getBridgedSupply(options) {
806716
807172
  const vault = dist/* ERC4626__factory */.RTL.connect(await this.collateralContract.vault(), this.getProvider());
806717
807173
  const overrides = buildBlockTagOverrides(options?.blockTag);
806718
- const balance = await vault.balanceOf(this.addresses.token, overrides);
806719
- return balance.toBigInt();
807174
+ const assets = await vault.maxWithdraw(this.addresses.token, overrides);
807175
+ return assets.toBigInt();
807176
+ }
807177
+ }
807178
+ class EvmHypOwnerCollateralAdapter extends EvmHypRebaseCollateralAdapter {
807179
+ collateralContract;
807180
+ constructor(chainName, multiProvider, addresses) {
807181
+ super(chainName, multiProvider, addresses);
807182
+ this.collateralContract = dist/* HypERC4626OwnerCollateral__factory */.uhc.connect(addresses.token, this.getProvider());
807183
+ }
807184
+ async getBridgedSupply(options) {
807185
+ const overrides = buildBlockTagOverrides(options?.blockTag);
807186
+ const assetDeposited = await this.collateralContract.assetDeposited(overrides);
807187
+ return assetDeposited.toBigInt();
806720
807188
  }
806721
807189
  }
806722
807190
  class EvmHypSyntheticRebaseAdapter extends EvmHypSyntheticAdapter {
@@ -812579,10 +813047,8 @@ function createEvmHypAdapter(multiProvider, token) {
812579
813047
  return (0,_evmLikeHyp_js__WEBPACK_IMPORTED_MODULE_0__/* .createEvmLikeHypAdapter */ .a)(multiProvider, token, {
812580
813048
  native: _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.EvmNative,
812581
813049
  hypNative: _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.EvmHypNative,
812582
- hypCollateral: [
812583
- _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.EvmHypCollateral,
812584
- _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.EvmHypOwnerCollateral,
812585
- ],
813050
+ hypCollateral: [_TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.EvmHypCollateral],
813051
+ hypOwnerCollateral: _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.EvmHypOwnerCollateral,
812586
813052
  hypCrossCollateralRouter: _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.EvmHypCrossCollateralRouter,
812587
813053
  hypRebaseCollateral: _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.EvmHypRebaseCollateral,
812588
813054
  hypCollateralFiat: _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.EvmHypCollateralFiat,
@@ -812723,6 +813189,12 @@ function createEvmLikeHypAdapter(multiProvider, token, standards) {
812723
813189
  token: addressOrDenom,
812724
813190
  });
812725
813191
  }
813192
+ if (standards.hypOwnerCollateral &&
813193
+ standard === standards.hypOwnerCollateral) {
813194
+ return new EvmTokenAdapter/* EvmHypOwnerCollateralAdapter */.dv(chainName, multiProvider, {
813195
+ token: addressOrDenom,
813196
+ });
813197
+ }
812726
813198
  if (standards.hypCollateral.some((candidate) => candidate === standard)) {
812727
813199
  return new EvmTokenAdapter/* EvmMovableCollateralAdapter */.vo(chainName, multiProvider, {
812728
813200
  token: addressOrDenom,
@@ -813870,10 +814342,8 @@ function createTronHypAdapter(multiProvider, token) {
813870
814342
  return (0,_evmLikeHyp_js__WEBPACK_IMPORTED_MODULE_0__/* .createEvmLikeHypAdapter */ .a)(multiProvider, token, {
813871
814343
  native: _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.TronNative,
813872
814344
  hypNative: _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.TronHypNative,
813873
- hypCollateral: [
813874
- _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.TronHypCollateral,
813875
- _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.TronHypOwnerCollateral,
813876
- ],
814345
+ hypCollateral: [_TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.TronHypCollateral],
814346
+ hypOwnerCollateral: _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.TronHypOwnerCollateral,
813877
814347
  hypCrossCollateralRouter: _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.TronHypCrossCollateralRouter,
813878
814348
  hypRebaseCollateral: _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.TronHypRebaseCollateral,
813879
814349
  hypCollateralFiat: _TokenStandard_js__WEBPACK_IMPORTED_MODULE_1__/* .TokenStandard */ .ph.TronHypCollateralFiat,
@@ -815403,7 +815873,7 @@ const PROTOCOL_TO_DEFAULT_NATIVE_TOKEN = {
815403
815873
  },
815404
815874
  [_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_0__/* .ProtocolType */ .Hb.Aleo]: {
815405
815875
  decimals: 6,
815406
- denom: '0field',
815876
+ denom: 'credits',
815407
815877
  name: 'Aleo',
815408
815878
  symbol: 'ALEO',
815409
815879
  },
@@ -818886,9 +819356,11 @@ class WarpCore {
818886
819356
  return originToken.amount(0);
818887
819357
  }
818888
819358
  async getTokenCollateral(token) {
818889
- if (_token_TokenStandard_js__WEBPACK_IMPORTED_MODULE_13__/* .LOCKBOX_STANDARDS */ .c_.includes(token.standard)) {
818890
- const adapter = token.getAdapter(this.multiProvider);
819359
+ if (_token_TokenStandard_js__WEBPACK_IMPORTED_MODULE_13__/* .LOCKBOX_STANDARDS */ .c_.includes(token.standard) ||
819360
+ _token_TokenStandard_js__WEBPACK_IMPORTED_MODULE_13__/* .ERC4626_COLLATERAL_STANDARDS */ .eB.includes(token.standard)) {
819361
+ const adapter = token.getHypAdapter(this.multiProvider);
818891
819362
  const tokenCollateral = await adapter.getBridgedSupply();
819363
+ (0,_hyperlane_xyz_utils__WEBPACK_IMPORTED_MODULE_4__/* .assert */ .v)(tokenCollateral !== undefined, `getBridgedSupply returned undefined for ${token.symbol} on ${token.chainName}`);
818892
819364
  return tokenCollateral;
818893
819365
  }
818894
819366
  else {
@@ -907327,7 +907799,7 @@ module.exports = /*#__PURE__*/JSON.parse('[{"type":"function","name":"proveL2Lea
907327
907799
  /***/ 99468:
907328
907800
  /***/ ((module) => {
907329
907801
 
907330
- module.exports = {"rE":"34.0.0"};
907802
+ module.exports = {"rE":"35.0.0"};
907331
907803
 
907332
907804
  /***/ })
907333
907805