@recoillink/sdk 0.0.0-stage → 45.0.1

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.
Files changed (1823) hide show
  1. package/LICENSE.md +193 -0
  2. package/README.md +30 -2
  3. package/dist/app/HyperlaneApp.d.ts +13 -0
  4. package/dist/app/HyperlaneApp.d.ts.map +1 -0
  5. package/dist/app/HyperlaneApp.js +22 -0
  6. package/dist/app/HyperlaneApp.js.map +1 -0
  7. package/dist/app/MultiProtocolApp.d.ts +93 -0
  8. package/dist/app/MultiProtocolApp.d.ts.map +1 -0
  9. package/dist/app/MultiProtocolApp.js +144 -0
  10. package/dist/app/MultiProtocolApp.js.map +1 -0
  11. package/dist/app/MultiProtocolApp.test.d.ts +2 -0
  12. package/dist/app/MultiProtocolApp.test.d.ts.map +1 -0
  13. package/dist/app/MultiProtocolApp.test.js +28 -0
  14. package/dist/app/MultiProtocolApp.test.js.map +1 -0
  15. package/dist/aws/s3.d.ts +22 -0
  16. package/dist/aws/s3.d.ts.map +1 -0
  17. package/dist/aws/s3.js +69 -0
  18. package/dist/aws/s3.js.map +1 -0
  19. package/dist/aws/validator.d.ts +22 -0
  20. package/dist/aws/validator.d.ts.map +1 -0
  21. package/dist/aws/validator.js +99 -0
  22. package/dist/aws/validator.js.map +1 -0
  23. package/dist/block-explorer/etherscan.d.ts +142 -0
  24. package/dist/block-explorer/etherscan.d.ts.map +1 -0
  25. package/dist/block-explorer/etherscan.js +307 -0
  26. package/dist/block-explorer/etherscan.js.map +1 -0
  27. package/dist/block-explorer/etherscan.test.d.ts +2 -0
  28. package/dist/block-explorer/etherscan.test.d.ts.map +1 -0
  29. package/dist/block-explorer/etherscan.test.js +359 -0
  30. package/dist/block-explorer/etherscan.test.js.map +1 -0
  31. package/dist/block-explorer/testFixtures.d.ts +8 -0
  32. package/dist/block-explorer/testFixtures.d.ts.map +1 -0
  33. package/dist/block-explorer/testFixtures.js +18 -0
  34. package/dist/block-explorer/testFixtures.js.map +1 -0
  35. package/dist/block-explorer/utils.d.ts +11 -0
  36. package/dist/block-explorer/utils.d.ts.map +1 -0
  37. package/dist/block-explorer/utils.js +32 -0
  38. package/dist/block-explorer/utils.js.map +1 -0
  39. package/dist/ccip/HyperlaneCCIPDeployer.d.ts +18 -0
  40. package/dist/ccip/HyperlaneCCIPDeployer.d.ts.map +1 -0
  41. package/dist/ccip/HyperlaneCCIPDeployer.js +122 -0
  42. package/dist/ccip/HyperlaneCCIPDeployer.js.map +1 -0
  43. package/dist/ccip/consts.d.ts +24 -0
  44. package/dist/ccip/consts.d.ts.map +1 -0
  45. package/dist/ccip/consts.js +491 -0
  46. package/dist/ccip/consts.js.map +1 -0
  47. package/dist/ccip/utils.d.ts +46 -0
  48. package/dist/ccip/utils.d.ts.map +1 -0
  49. package/dist/ccip/utils.js +95 -0
  50. package/dist/ccip/utils.js.map +1 -0
  51. package/dist/consts/bytecode.d.ts +14 -0
  52. package/dist/consts/bytecode.d.ts.map +1 -0
  53. package/dist/consts/bytecode.js +15 -0
  54. package/dist/consts/bytecode.js.map +1 -0
  55. package/dist/consts/concurrency.d.ts +2 -0
  56. package/dist/consts/concurrency.d.ts.map +1 -0
  57. package/dist/consts/concurrency.js +2 -0
  58. package/dist/consts/concurrency.js.map +1 -0
  59. package/dist/consts/igp.d.ts +12 -0
  60. package/dist/consts/igp.d.ts.map +1 -0
  61. package/dist/consts/igp.js +40 -0
  62. package/dist/consts/igp.js.map +1 -0
  63. package/dist/consts/mailbox.d.ts +2 -0
  64. package/dist/consts/mailbox.d.ts.map +1 -0
  65. package/dist/consts/mailbox.js +3 -0
  66. package/dist/consts/mailbox.js.map +1 -0
  67. package/dist/consts/multisigIsm.d.ts +5 -0
  68. package/dist/consts/multisigIsm.d.ts.map +1 -0
  69. package/dist/consts/multisigIsm.js +847 -0
  70. package/dist/consts/multisigIsm.js.map +1 -0
  71. package/dist/consts/multisigIsm.test.d.ts +2 -0
  72. package/dist/consts/multisigIsm.test.d.ts.map +1 -0
  73. package/dist/consts/multisigIsm.test.js +40 -0
  74. package/dist/consts/multisigIsm.test.js.map +1 -0
  75. package/dist/consts/multisigIsmVerifyCosts.d.ts +210 -0
  76. package/dist/consts/multisigIsmVerifyCosts.d.ts.map +1 -0
  77. package/dist/consts/multisigIsmVerifyCosts.js +210 -0
  78. package/dist/consts/multisigIsmVerifyCosts.js.map +1 -0
  79. package/dist/consts/numbers.d.ts +2 -0
  80. package/dist/consts/numbers.d.ts.map +1 -0
  81. package/dist/consts/numbers.js +3 -0
  82. package/dist/consts/numbers.js.map +1 -0
  83. package/dist/consts/recoilLinkFees.d.ts +6 -0
  84. package/dist/consts/recoilLinkFees.d.ts.map +1 -0
  85. package/dist/consts/recoilLinkFees.js +17 -0
  86. package/dist/consts/recoilLinkFees.js.map +1 -0
  87. package/dist/consts/registry.d.ts +2 -0
  88. package/dist/consts/registry.d.ts.map +1 -0
  89. package/dist/consts/registry.js +5 -0
  90. package/dist/consts/registry.js.map +1 -0
  91. package/dist/consts/sealevel.d.ts +7 -0
  92. package/dist/consts/sealevel.d.ts.map +1 -0
  93. package/dist/consts/sealevel.js +8 -0
  94. package/dist/consts/sealevel.js.map +1 -0
  95. package/dist/consts/testChains.d.ts +30 -0
  96. package/dist/consts/testChains.d.ts.map +1 -0
  97. package/dist/consts/testChains.js +244 -0
  98. package/dist/consts/testChains.js.map +1 -0
  99. package/dist/contracts/contracts.d.ts +40 -0
  100. package/dist/contracts/contracts.d.ts.map +1 -0
  101. package/dist/contracts/contracts.hardhat-test.d.ts +2 -0
  102. package/dist/contracts/contracts.hardhat-test.d.ts.map +1 -0
  103. package/dist/contracts/contracts.hardhat-test.js +34 -0
  104. package/dist/contracts/contracts.hardhat-test.js.map +1 -0
  105. package/dist/contracts/contracts.js +201 -0
  106. package/dist/contracts/contracts.js.map +1 -0
  107. package/dist/contracts/contracts.test.d.ts +2 -0
  108. package/dist/contracts/contracts.test.d.ts.map +1 -0
  109. package/dist/contracts/contracts.test.js +88 -0
  110. package/dist/contracts/contracts.test.js.map +1 -0
  111. package/dist/contracts/types.d.ts +18 -0
  112. package/dist/contracts/types.d.ts.map +1 -0
  113. package/dist/contracts/types.js +2 -0
  114. package/dist/contracts/types.js.map +1 -0
  115. package/dist/core/AbstractHyperlaneModule.d.ts +18 -0
  116. package/dist/core/AbstractHyperlaneModule.d.ts.map +1 -0
  117. package/dist/core/AbstractHyperlaneModule.js +10 -0
  118. package/dist/core/AbstractHyperlaneModule.js.map +1 -0
  119. package/dist/core/CoreDeployer.hardhat-test.d.ts +2 -0
  120. package/dist/core/CoreDeployer.hardhat-test.d.ts.map +1 -0
  121. package/dist/core/CoreDeployer.hardhat-test.js +234 -0
  122. package/dist/core/CoreDeployer.hardhat-test.js.map +1 -0
  123. package/dist/core/EvmCoreModule.d.ts +119 -0
  124. package/dist/core/EvmCoreModule.d.ts.map +1 -0
  125. package/dist/core/EvmCoreModule.hardhat-test.d.ts +2 -0
  126. package/dist/core/EvmCoreModule.hardhat-test.d.ts.map +1 -0
  127. package/dist/core/EvmCoreModule.hardhat-test.js +364 -0
  128. package/dist/core/EvmCoreModule.hardhat-test.js.map +1 -0
  129. package/dist/core/EvmCoreModule.js +339 -0
  130. package/dist/core/EvmCoreModule.js.map +1 -0
  131. package/dist/core/EvmCoreReader.d.ts +38 -0
  132. package/dist/core/EvmCoreReader.d.ts.map +1 -0
  133. package/dist/core/EvmCoreReader.js +92 -0
  134. package/dist/core/EvmCoreReader.js.map +1 -0
  135. package/dist/core/EvmIcaModule.d.ts +43 -0
  136. package/dist/core/EvmIcaModule.d.ts.map +1 -0
  137. package/dist/core/EvmIcaModule.hardhat-test.d.ts +2 -0
  138. package/dist/core/EvmIcaModule.hardhat-test.d.ts.map +1 -0
  139. package/dist/core/EvmIcaModule.hardhat-test.js +211 -0
  140. package/dist/core/EvmIcaModule.hardhat-test.js.map +1 -0
  141. package/dist/core/EvmIcaModule.js +143 -0
  142. package/dist/core/EvmIcaModule.js.map +1 -0
  143. package/dist/core/HyperlaneCore.d.ts +78 -0
  144. package/dist/core/HyperlaneCore.d.ts.map +1 -0
  145. package/dist/core/HyperlaneCore.js +296 -0
  146. package/dist/core/HyperlaneCore.js.map +1 -0
  147. package/dist/core/HyperlaneCore.test.d.ts +2 -0
  148. package/dist/core/HyperlaneCore.test.d.ts.map +1 -0
  149. package/dist/core/HyperlaneCore.test.js +12 -0
  150. package/dist/core/HyperlaneCore.test.js.map +1 -0
  151. package/dist/core/HyperlaneCoreChecker.d.ts +18 -0
  152. package/dist/core/HyperlaneCoreChecker.d.ts.map +1 -0
  153. package/dist/core/HyperlaneCoreChecker.js +171 -0
  154. package/dist/core/HyperlaneCoreChecker.js.map +1 -0
  155. package/dist/core/HyperlaneCoreDeployer.d.ts +36 -0
  156. package/dist/core/HyperlaneCoreDeployer.d.ts.map +1 -0
  157. package/dist/core/HyperlaneCoreDeployer.js +162 -0
  158. package/dist/core/HyperlaneCoreDeployer.js.map +1 -0
  159. package/dist/core/MultiProtocolCore.d.ts +21 -0
  160. package/dist/core/MultiProtocolCore.d.ts.map +1 -0
  161. package/dist/core/MultiProtocolCore.js +49 -0
  162. package/dist/core/MultiProtocolCore.js.map +1 -0
  163. package/dist/core/MultiProtocolCore.test.d.ts +2 -0
  164. package/dist/core/MultiProtocolCore.test.d.ts.map +1 -0
  165. package/dist/core/MultiProtocolCore.test.js +27 -0
  166. package/dist/core/MultiProtocolCore.test.js.map +1 -0
  167. package/dist/core/TestCoreApp.d.ts +17 -0
  168. package/dist/core/TestCoreApp.d.ts.map +1 -0
  169. package/dist/core/TestCoreApp.js +49 -0
  170. package/dist/core/TestCoreApp.js.map +1 -0
  171. package/dist/core/TestCoreDeployer.d.ts +10 -0
  172. package/dist/core/TestCoreDeployer.d.ts.map +1 -0
  173. package/dist/core/TestCoreDeployer.js +13 -0
  174. package/dist/core/TestCoreDeployer.js.map +1 -0
  175. package/dist/core/TestRecipientDeployer.d.ts +22 -0
  176. package/dist/core/TestRecipientDeployer.d.ts.map +1 -0
  177. package/dist/core/TestRecipientDeployer.js +30 -0
  178. package/dist/core/TestRecipientDeployer.js.map +1 -0
  179. package/dist/core/adapters/AleoCoreAdapter.d.ts +23 -0
  180. package/dist/core/adapters/AleoCoreAdapter.d.ts.map +1 -0
  181. package/dist/core/adapters/AleoCoreAdapter.js +72 -0
  182. package/dist/core/adapters/AleoCoreAdapter.js.map +1 -0
  183. package/dist/core/adapters/CosmNativeCoreAdapter.d.ts +23 -0
  184. package/dist/core/adapters/CosmNativeCoreAdapter.d.ts.map +1 -0
  185. package/dist/core/adapters/CosmNativeCoreAdapter.js +65 -0
  186. package/dist/core/adapters/CosmNativeCoreAdapter.js.map +1 -0
  187. package/dist/core/adapters/CosmWasmCoreAdapter.d.ts +40 -0
  188. package/dist/core/adapters/CosmWasmCoreAdapter.d.ts.map +1 -0
  189. package/dist/core/adapters/CosmWasmCoreAdapter.js +145 -0
  190. package/dist/core/adapters/CosmWasmCoreAdapter.js.map +1 -0
  191. package/dist/core/adapters/CosmWasmCoreAdapter.test.d.ts +2 -0
  192. package/dist/core/adapters/CosmWasmCoreAdapter.test.d.ts.map +1 -0
  193. package/dist/core/adapters/CosmWasmCoreAdapter.test.js +31 -0
  194. package/dist/core/adapters/CosmWasmCoreAdapter.test.js.map +1 -0
  195. package/dist/core/adapters/CosmWasmIgpAdapter.d.ts +27 -0
  196. package/dist/core/adapters/CosmWasmIgpAdapter.d.ts.map +1 -0
  197. package/dist/core/adapters/CosmWasmIgpAdapter.js +92 -0
  198. package/dist/core/adapters/CosmWasmIgpAdapter.js.map +1 -0
  199. package/dist/core/adapters/EvmCoreAdapter.d.ts +25 -0
  200. package/dist/core/adapters/EvmCoreAdapter.d.ts.map +1 -0
  201. package/dist/core/adapters/EvmCoreAdapter.js +44 -0
  202. package/dist/core/adapters/EvmCoreAdapter.js.map +1 -0
  203. package/dist/core/adapters/RadixCoreAdapter.d.ts +23 -0
  204. package/dist/core/adapters/RadixCoreAdapter.d.ts.map +1 -0
  205. package/dist/core/adapters/RadixCoreAdapter.js +58 -0
  206. package/dist/core/adapters/RadixCoreAdapter.js.map +1 -0
  207. package/dist/core/adapters/SealevelCoreAdapter.d.ts +56 -0
  208. package/dist/core/adapters/SealevelCoreAdapter.d.ts.map +1 -0
  209. package/dist/core/adapters/SealevelCoreAdapter.js +191 -0
  210. package/dist/core/adapters/SealevelCoreAdapter.js.map +1 -0
  211. package/dist/core/adapters/SealevelCoreAdapter.test.d.ts +2 -0
  212. package/dist/core/adapters/SealevelCoreAdapter.test.d.ts.map +1 -0
  213. package/dist/core/adapters/SealevelCoreAdapter.test.js +33 -0
  214. package/dist/core/adapters/SealevelCoreAdapter.test.js.map +1 -0
  215. package/dist/core/adapters/StarknetCoreAdapter.d.ts +23 -0
  216. package/dist/core/adapters/StarknetCoreAdapter.d.ts.map +1 -0
  217. package/dist/core/adapters/StarknetCoreAdapter.js +70 -0
  218. package/dist/core/adapters/StarknetCoreAdapter.js.map +1 -0
  219. package/dist/core/adapters/types.d.ts +19 -0
  220. package/dist/core/adapters/types.d.ts.map +1 -0
  221. package/dist/core/adapters/types.js +2 -0
  222. package/dist/core/adapters/types.js.map +1 -0
  223. package/dist/core/contracts.d.ts +15 -0
  224. package/dist/core/contracts.d.ts.map +1 -0
  225. package/dist/core/contracts.js +13 -0
  226. package/dist/core/contracts.js.map +1 -0
  227. package/dist/core/events.d.ts +4 -0
  228. package/dist/core/events.d.ts.map +1 -0
  229. package/dist/core/events.js +2 -0
  230. package/dist/core/events.js.map +1 -0
  231. package/dist/core/testHyperlaneDeploy.hardhat-test.d.ts +3 -0
  232. package/dist/core/testHyperlaneDeploy.hardhat-test.d.ts.map +1 -0
  233. package/dist/core/testHyperlaneDeploy.hardhat-test.js +56 -0
  234. package/dist/core/testHyperlaneDeploy.hardhat-test.js.map +1 -0
  235. package/dist/core/types.d.ts +173 -0
  236. package/dist/core/types.d.ts.map +1 -0
  237. package/dist/core/types.js +118 -0
  238. package/dist/core/types.js.map +1 -0
  239. package/dist/core/types.test.d.ts +2 -0
  240. package/dist/core/types.test.d.ts.map +1 -0
  241. package/dist/core/types.test.js +205 -0
  242. package/dist/core/types.test.js.map +1 -0
  243. package/dist/cw-types/Cw20Base.types.d.ts +198 -0
  244. package/dist/cw-types/Cw20Base.types.d.ts.map +1 -0
  245. package/dist/cw-types/Cw20Base.types.js +7 -0
  246. package/dist/cw-types/Cw20Base.types.js.map +1 -0
  247. package/dist/cw-types/HookAggregate.types.d.ts +79 -0
  248. package/dist/cw-types/HookAggregate.types.d.ts.map +1 -0
  249. package/dist/cw-types/HookAggregate.types.js +7 -0
  250. package/dist/cw-types/HookAggregate.types.js.map +1 -0
  251. package/dist/cw-types/HookMerkle.types.d.ts +163 -0
  252. package/dist/cw-types/HookMerkle.types.d.ts.map +1 -0
  253. package/dist/cw-types/HookMerkle.types.js +7 -0
  254. package/dist/cw-types/HookMerkle.types.js.map +1 -0
  255. package/dist/cw-types/HookPausable.types.d.ts +82 -0
  256. package/dist/cw-types/HookPausable.types.d.ts.map +1 -0
  257. package/dist/cw-types/HookPausable.types.js +7 -0
  258. package/dist/cw-types/HookPausable.types.js.map +1 -0
  259. package/dist/cw-types/HookRouting.types.d.ts +109 -0
  260. package/dist/cw-types/HookRouting.types.d.ts.map +1 -0
  261. package/dist/cw-types/HookRouting.types.js +7 -0
  262. package/dist/cw-types/HookRouting.types.js.map +1 -0
  263. package/dist/cw-types/HookRoutingCustom.types.d.ts +149 -0
  264. package/dist/cw-types/HookRoutingCustom.types.d.ts.map +1 -0
  265. package/dist/cw-types/HookRoutingCustom.types.js +7 -0
  266. package/dist/cw-types/HookRoutingCustom.types.js.map +1 -0
  267. package/dist/cw-types/HookRoutingFallback.types.d.ts +113 -0
  268. package/dist/cw-types/HookRoutingFallback.types.d.ts.map +1 -0
  269. package/dist/cw-types/HookRoutingFallback.types.js +7 -0
  270. package/dist/cw-types/HookRoutingFallback.types.js.map +1 -0
  271. package/dist/cw-types/Igp.types.d.ts +184 -0
  272. package/dist/cw-types/Igp.types.d.ts.map +1 -0
  273. package/dist/cw-types/Igp.types.js +7 -0
  274. package/dist/cw-types/Igp.types.js.map +1 -0
  275. package/dist/cw-types/IgpOracle.types.d.ts +61 -0
  276. package/dist/cw-types/IgpOracle.types.d.ts.map +1 -0
  277. package/dist/cw-types/IgpOracle.types.js +7 -0
  278. package/dist/cw-types/IgpOracle.types.js.map +1 -0
  279. package/dist/cw-types/IsmAggregate.types.d.ts +76 -0
  280. package/dist/cw-types/IsmAggregate.types.d.ts.map +1 -0
  281. package/dist/cw-types/IsmAggregate.types.js +7 -0
  282. package/dist/cw-types/IsmAggregate.types.js.map +1 -0
  283. package/dist/cw-types/IsmMultisig.types.d.ts +102 -0
  284. package/dist/cw-types/IsmMultisig.types.d.ts.map +1 -0
  285. package/dist/cw-types/IsmMultisig.types.js +7 -0
  286. package/dist/cw-types/IsmMultisig.types.js.map +1 -0
  287. package/dist/cw-types/IsmRouting.types.d.ts +81 -0
  288. package/dist/cw-types/IsmRouting.types.d.ts.map +1 -0
  289. package/dist/cw-types/IsmRouting.types.js +7 -0
  290. package/dist/cw-types/IsmRouting.types.js.map +1 -0
  291. package/dist/cw-types/Mailbox.types.d.ts +131 -0
  292. package/dist/cw-types/Mailbox.types.d.ts.map +1 -0
  293. package/dist/cw-types/Mailbox.types.js +7 -0
  294. package/dist/cw-types/Mailbox.types.js.map +1 -0
  295. package/dist/cw-types/ValidatorAnnounce.types.d.ts +31 -0
  296. package/dist/cw-types/ValidatorAnnounce.types.d.ts.map +1 -0
  297. package/dist/cw-types/ValidatorAnnounce.types.js +7 -0
  298. package/dist/cw-types/ValidatorAnnounce.types.js.map +1 -0
  299. package/dist/cw-types/WarpCw20.types.d.ts +217 -0
  300. package/dist/cw-types/WarpCw20.types.d.ts.map +1 -0
  301. package/dist/cw-types/WarpCw20.types.js +7 -0
  302. package/dist/cw-types/WarpCw20.types.js.map +1 -0
  303. package/dist/cw-types/WarpNative.types.d.ts +197 -0
  304. package/dist/cw-types/WarpNative.types.d.ts.map +1 -0
  305. package/dist/cw-types/WarpNative.types.js +7 -0
  306. package/dist/cw-types/WarpNative.types.js.map +1 -0
  307. package/dist/deploy/HyperlaneAppChecker.d.ts +32 -0
  308. package/dist/deploy/HyperlaneAppChecker.d.ts.map +1 -0
  309. package/dist/deploy/HyperlaneAppChecker.js +220 -0
  310. package/dist/deploy/HyperlaneAppChecker.js.map +1 -0
  311. package/dist/deploy/HyperlaneDeployer.d.ts +83 -0
  312. package/dist/deploy/HyperlaneDeployer.d.ts.map +1 -0
  313. package/dist/deploy/HyperlaneDeployer.js +434 -0
  314. package/dist/deploy/HyperlaneDeployer.js.map +1 -0
  315. package/dist/deploy/HyperlaneProxyFactoryDeployer.d.ts +11 -0
  316. package/dist/deploy/HyperlaneProxyFactoryDeployer.d.ts.map +1 -0
  317. package/dist/deploy/HyperlaneProxyFactoryDeployer.js +48 -0
  318. package/dist/deploy/HyperlaneProxyFactoryDeployer.js.map +1 -0
  319. package/dist/deploy/contracts.d.ts +16 -0
  320. package/dist/deploy/contracts.d.ts.map +1 -0
  321. package/dist/deploy/contracts.js +25 -0
  322. package/dist/deploy/contracts.js.map +1 -0
  323. package/dist/deploy/proxy.d.ts +52 -0
  324. package/dist/deploy/proxy.d.ts.map +1 -0
  325. package/dist/deploy/proxy.js +153 -0
  326. package/dist/deploy/proxy.js.map +1 -0
  327. package/dist/deploy/proxy.test.d.ts +2 -0
  328. package/dist/deploy/proxy.test.d.ts.map +1 -0
  329. package/dist/deploy/proxy.test.js +168 -0
  330. package/dist/deploy/proxy.test.js.map +1 -0
  331. package/dist/deploy/proxyFactoryUtils.d.ts +7 -0
  332. package/dist/deploy/proxyFactoryUtils.d.ts.map +1 -0
  333. package/dist/deploy/proxyFactoryUtils.js +12 -0
  334. package/dist/deploy/proxyFactoryUtils.js.map +1 -0
  335. package/dist/deploy/types.d.ts +69 -0
  336. package/dist/deploy/types.d.ts.map +1 -0
  337. package/dist/deploy/types.js +22 -0
  338. package/dist/deploy/types.js.map +1 -0
  339. package/dist/deploy/utils.d.ts +15 -0
  340. package/dist/deploy/utils.d.ts.map +1 -0
  341. package/dist/deploy/utils.js +28 -0
  342. package/dist/deploy/utils.js.map +1 -0
  343. package/dist/deploy/verify/BaseContractVerifier.d.ts +23 -0
  344. package/dist/deploy/verify/BaseContractVerifier.d.ts.map +1 -0
  345. package/dist/deploy/verify/BaseContractVerifier.js +128 -0
  346. package/dist/deploy/verify/BaseContractVerifier.js.map +1 -0
  347. package/dist/deploy/verify/ContractVerifier.d.ts +30 -0
  348. package/dist/deploy/verify/ContractVerifier.d.ts.map +1 -0
  349. package/dist/deploy/verify/ContractVerifier.js +125 -0
  350. package/dist/deploy/verify/ContractVerifier.js.map +1 -0
  351. package/dist/deploy/verify/PostDeploymentContractVerifier.d.ts +15 -0
  352. package/dist/deploy/verify/PostDeploymentContractVerifier.d.ts.map +1 -0
  353. package/dist/deploy/verify/PostDeploymentContractVerifier.js +45 -0
  354. package/dist/deploy/verify/PostDeploymentContractVerifier.js.map +1 -0
  355. package/dist/deploy/verify/ZKSyncContractVerifier.d.ts +50 -0
  356. package/dist/deploy/verify/ZKSyncContractVerifier.d.ts.map +1 -0
  357. package/dist/deploy/verify/ZKSyncContractVerifier.js +99 -0
  358. package/dist/deploy/verify/ZKSyncContractVerifier.js.map +1 -0
  359. package/dist/deploy/verify/types.d.ts +47 -0
  360. package/dist/deploy/verify/types.d.ts.map +1 -0
  361. package/dist/deploy/verify/types.js +7 -0
  362. package/dist/deploy/verify/types.js.map +1 -0
  363. package/dist/deploy/verify/utils.d.ts +81 -0
  364. package/dist/deploy/verify/utils.d.ts.map +1 -0
  365. package/dist/deploy/verify/utils.js +208 -0
  366. package/dist/deploy/verify/utils.js.map +1 -0
  367. package/dist/deploy/verify/utils.test.d.ts +2 -0
  368. package/dist/deploy/verify/utils.test.d.ts.map +1 -0
  369. package/dist/deploy/verify/utils.test.js +49 -0
  370. package/dist/deploy/verify/utils.test.js.map +1 -0
  371. package/dist/deploy/warp.d.ts +150 -0
  372. package/dist/deploy/warp.d.ts.map +1 -0
  373. package/dist/deploy/warp.js +1280 -0
  374. package/dist/deploy/warp.js.map +1 -0
  375. package/dist/deploy/warp.test.d.ts +2 -0
  376. package/dist/deploy/warp.test.d.ts.map +1 -0
  377. package/dist/deploy/warp.test.js +419 -0
  378. package/dist/deploy/warp.test.js.map +1 -0
  379. package/dist/deploy/warpHybridPlan.d.ts +104 -0
  380. package/dist/deploy/warpHybridPlan.d.ts.map +1 -0
  381. package/dist/deploy/warpHybridPlan.js +178 -0
  382. package/dist/deploy/warpHybridPlan.js.map +1 -0
  383. package/dist/deploy/warpHybridPlan.test.d.ts +2 -0
  384. package/dist/deploy/warpHybridPlan.test.d.ts.map +1 -0
  385. package/dist/deploy/warpHybridPlan.test.js +141 -0
  386. package/dist/deploy/warpHybridPlan.test.js.map +1 -0
  387. package/dist/fee/EvmTokenFeeDeployer.d.ts +20 -0
  388. package/dist/fee/EvmTokenFeeDeployer.d.ts.map +1 -0
  389. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.d.ts +2 -0
  390. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.d.ts.map +1 -0
  391. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js +353 -0
  392. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js.map +1 -0
  393. package/dist/fee/EvmTokenFeeDeployer.js +143 -0
  394. package/dist/fee/EvmTokenFeeDeployer.js.map +1 -0
  395. package/dist/fee/EvmTokenFeeModule.d.ts +63 -0
  396. package/dist/fee/EvmTokenFeeModule.d.ts.map +1 -0
  397. package/dist/fee/EvmTokenFeeModule.hardhat-test.d.ts +2 -0
  398. package/dist/fee/EvmTokenFeeModule.hardhat-test.d.ts.map +1 -0
  399. package/dist/fee/EvmTokenFeeModule.hardhat-test.js +942 -0
  400. package/dist/fee/EvmTokenFeeModule.hardhat-test.js.map +1 -0
  401. package/dist/fee/EvmTokenFeeModule.js +583 -0
  402. package/dist/fee/EvmTokenFeeModule.js.map +1 -0
  403. package/dist/fee/EvmTokenFeeReader.d.ts +38 -0
  404. package/dist/fee/EvmTokenFeeReader.d.ts.map +1 -0
  405. package/dist/fee/EvmTokenFeeReader.hardhat-test.d.ts +4 -0
  406. package/dist/fee/EvmTokenFeeReader.hardhat-test.d.ts.map +1 -0
  407. package/dist/fee/EvmTokenFeeReader.hardhat-test.js +371 -0
  408. package/dist/fee/EvmTokenFeeReader.hardhat-test.js.map +1 -0
  409. package/dist/fee/EvmTokenFeeReader.js +200 -0
  410. package/dist/fee/EvmTokenFeeReader.js.map +1 -0
  411. package/dist/fee/contracts.d.ts +11 -0
  412. package/dist/fee/contracts.d.ts.map +1 -0
  413. package/dist/fee/contracts.js +11 -0
  414. package/dist/fee/contracts.js.map +1 -0
  415. package/dist/fee/crossCollateralUtils.d.ts +8 -0
  416. package/dist/fee/crossCollateralUtils.d.ts.map +1 -0
  417. package/dist/fee/crossCollateralUtils.js +49 -0
  418. package/dist/fee/crossCollateralUtils.js.map +1 -0
  419. package/dist/fee/feeConfigMapping.d.ts +9 -0
  420. package/dist/fee/feeConfigMapping.d.ts.map +1 -0
  421. package/dist/fee/feeConfigMapping.js +87 -0
  422. package/dist/fee/feeConfigMapping.js.map +1 -0
  423. package/dist/fee/feeConfigMapping.test.d.ts +2 -0
  424. package/dist/fee/feeConfigMapping.test.d.ts.map +1 -0
  425. package/dist/fee/feeConfigMapping.test.js +204 -0
  426. package/dist/fee/feeConfigMapping.test.js.map +1 -0
  427. package/dist/fee/types.d.ts +295 -0
  428. package/dist/fee/types.d.ts.map +1 -0
  429. package/dist/fee/types.js +238 -0
  430. package/dist/fee/types.js.map +1 -0
  431. package/dist/fee/types.test.d.ts +2 -0
  432. package/dist/fee/types.test.d.ts.map +1 -0
  433. package/dist/fee/types.test.js +204 -0
  434. package/dist/fee/types.test.js.map +1 -0
  435. package/dist/fee/utils.d.ts +9 -0
  436. package/dist/fee/utils.d.ts.map +1 -0
  437. package/dist/fee/utils.js +9 -0
  438. package/dist/fee/utils.js.map +1 -0
  439. package/dist/fee/utils.test.d.ts +2 -0
  440. package/dist/fee/utils.test.d.ts.map +1 -0
  441. package/dist/fee/utils.test.js +54 -0
  442. package/dist/fee/utils.test.js.map +1 -0
  443. package/dist/fork/types.d.ts +354 -0
  444. package/dist/fork/types.d.ts.map +1 -0
  445. package/dist/fork/types.js +142 -0
  446. package/dist/fork/types.js.map +1 -0
  447. package/dist/gas/HyperlaneIgp.d.ts +53 -0
  448. package/dist/gas/HyperlaneIgp.d.ts.map +1 -0
  449. package/dist/gas/HyperlaneIgp.js +64 -0
  450. package/dist/gas/HyperlaneIgp.js.map +1 -0
  451. package/dist/gas/HyperlaneIgpChecker.d.ts +13 -0
  452. package/dist/gas/HyperlaneIgpChecker.d.ts.map +1 -0
  453. package/dist/gas/HyperlaneIgpChecker.js +162 -0
  454. package/dist/gas/HyperlaneIgpChecker.js.map +1 -0
  455. package/dist/gas/HyperlaneIgpDeployer.d.ts +32 -0
  456. package/dist/gas/HyperlaneIgpDeployer.d.ts.map +1 -0
  457. package/dist/gas/HyperlaneIgpDeployer.js +248 -0
  458. package/dist/gas/HyperlaneIgpDeployer.js.map +1 -0
  459. package/dist/gas/adapters/SealevelIgpAdapter.d.ts +93 -0
  460. package/dist/gas/adapters/SealevelIgpAdapter.d.ts.map +1 -0
  461. package/dist/gas/adapters/SealevelIgpAdapter.js +294 -0
  462. package/dist/gas/adapters/SealevelIgpAdapter.js.map +1 -0
  463. package/dist/gas/adapters/SealevelIgpAdapter.test.d.ts +2 -0
  464. package/dist/gas/adapters/SealevelIgpAdapter.test.d.ts.map +1 -0
  465. package/dist/gas/adapters/SealevelIgpAdapter.test.js +189 -0
  466. package/dist/gas/adapters/SealevelIgpAdapter.test.js.map +1 -0
  467. package/dist/gas/adapters/serialization.d.ts +180 -0
  468. package/dist/gas/adapters/serialization.d.ts.map +1 -0
  469. package/dist/gas/adapters/serialization.js +409 -0
  470. package/dist/gas/adapters/serialization.js.map +1 -0
  471. package/dist/gas/adapters/serialization.test.d.ts +2 -0
  472. package/dist/gas/adapters/serialization.test.d.ts.map +1 -0
  473. package/dist/gas/adapters/serialization.test.js +87 -0
  474. package/dist/gas/adapters/serialization.test.js.map +1 -0
  475. package/dist/gas/contracts.d.ts +8 -0
  476. package/dist/gas/contracts.d.ts.map +1 -0
  477. package/dist/gas/contracts.js +7 -0
  478. package/dist/gas/contracts.js.map +1 -0
  479. package/dist/gas/oracle/configure-gas-oracles.hardhat-test.d.ts +2 -0
  480. package/dist/gas/oracle/configure-gas-oracles.hardhat-test.d.ts.map +1 -0
  481. package/dist/gas/oracle/configure-gas-oracles.hardhat-test.js +82 -0
  482. package/dist/gas/oracle/configure-gas-oracles.hardhat-test.js.map +1 -0
  483. package/dist/gas/oracle/types.d.ts +42 -0
  484. package/dist/gas/oracle/types.d.ts.map +1 -0
  485. package/dist/gas/oracle/types.js +45 -0
  486. package/dist/gas/oracle/types.js.map +1 -0
  487. package/dist/gas/token-prices.d.ts +58 -0
  488. package/dist/gas/token-prices.d.ts.map +1 -0
  489. package/dist/gas/token-prices.js +199 -0
  490. package/dist/gas/token-prices.js.map +1 -0
  491. package/dist/gas/token-prices.test.d.ts +2 -0
  492. package/dist/gas/token-prices.test.d.ts.map +1 -0
  493. package/dist/gas/token-prices.test.js +96 -0
  494. package/dist/gas/token-prices.test.js.map +1 -0
  495. package/dist/gas/types.d.ts +50 -0
  496. package/dist/gas/types.d.ts.map +1 -0
  497. package/dist/gas/types.js +26 -0
  498. package/dist/gas/types.js.map +1 -0
  499. package/dist/gas/utils.d.ts +34 -0
  500. package/dist/gas/utils.d.ts.map +1 -0
  501. package/dist/gas/utils.js +246 -0
  502. package/dist/gas/utils.js.map +1 -0
  503. package/dist/gas/utils.test.d.ts +2 -0
  504. package/dist/gas/utils.test.d.ts.map +1 -0
  505. package/dist/gas/utils.test.js +132 -0
  506. package/dist/gas/utils.test.js.map +1 -0
  507. package/dist/gcp/storage.d.ts +28 -0
  508. package/dist/gcp/storage.d.ts.map +1 -0
  509. package/dist/gcp/storage.js +88 -0
  510. package/dist/gcp/storage.js.map +1 -0
  511. package/dist/gcp/validator.d.ts +22 -0
  512. package/dist/gcp/validator.d.ts.map +1 -0
  513. package/dist/gcp/validator.js +107 -0
  514. package/dist/gcp/validator.js.map +1 -0
  515. package/dist/hook/EvmHookModule.d.ts +161 -0
  516. package/dist/hook/EvmHookModule.d.ts.map +1 -0
  517. package/dist/hook/EvmHookModule.hardhat-test.d.ts +2 -0
  518. package/dist/hook/EvmHookModule.hardhat-test.d.ts.map +1 -0
  519. package/dist/hook/EvmHookModule.hardhat-test.js +1004 -0
  520. package/dist/hook/EvmHookModule.hardhat-test.js.map +1 -0
  521. package/dist/hook/EvmHookModule.js +932 -0
  522. package/dist/hook/EvmHookModule.js.map +1 -0
  523. package/dist/hook/EvmHookReader.d.ts +81 -0
  524. package/dist/hook/EvmHookReader.d.ts.map +1 -0
  525. package/dist/hook/EvmHookReader.js +630 -0
  526. package/dist/hook/EvmHookReader.js.map +1 -0
  527. package/dist/hook/EvmHookReader.test.d.ts +2 -0
  528. package/dist/hook/EvmHookReader.test.d.ts.map +1 -0
  529. package/dist/hook/EvmHookReader.test.js +647 -0
  530. package/dist/hook/EvmHookReader.test.js.map +1 -0
  531. package/dist/hook/HyperlaneHookDeployer.d.ts +70 -0
  532. package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -0
  533. package/dist/hook/HyperlaneHookDeployer.hardhat-test.d.ts +2 -0
  534. package/dist/hook/HyperlaneHookDeployer.hardhat-test.d.ts.map +1 -0
  535. package/dist/hook/HyperlaneHookDeployer.hardhat-test.js +322 -0
  536. package/dist/hook/HyperlaneHookDeployer.hardhat-test.js.map +1 -0
  537. package/dist/hook/HyperlaneHookDeployer.js +538 -0
  538. package/dist/hook/HyperlaneHookDeployer.js.map +1 -0
  539. package/dist/hook/contracts.d.ts +20 -0
  540. package/dist/hook/contracts.d.ts.map +1 -0
  541. package/dist/hook/contracts.js +18 -0
  542. package/dist/hook/contracts.js.map +1 -0
  543. package/dist/hook/types.d.ts +262 -0
  544. package/dist/hook/types.d.ts.map +1 -0
  545. package/dist/hook/types.js +341 -0
  546. package/dist/hook/types.js.map +1 -0
  547. package/dist/hook/types.test.d.ts +2 -0
  548. package/dist/hook/types.test.d.ts.map +1 -0
  549. package/dist/hook/types.test.js +227 -0
  550. package/dist/hook/types.test.js.map +1 -0
  551. package/dist/hook/updates.d.ts +33 -0
  552. package/dist/hook/updates.d.ts.map +1 -0
  553. package/dist/hook/updates.js +35 -0
  554. package/dist/hook/updates.js.map +1 -0
  555. package/dist/hook/utils.d.ts +58 -0
  556. package/dist/hook/utils.d.ts.map +1 -0
  557. package/dist/hook/utils.hardhat-test.d.ts +2 -0
  558. package/dist/hook/utils.hardhat-test.d.ts.map +1 -0
  559. package/dist/hook/utils.hardhat-test.js +119 -0
  560. package/dist/hook/utils.hardhat-test.js.map +1 -0
  561. package/dist/hook/utils.js +157 -0
  562. package/dist/hook/utils.js.map +1 -0
  563. package/dist/ica/EvmIcaReader.d.ts +7 -0
  564. package/dist/ica/EvmIcaReader.d.ts.map +1 -0
  565. package/dist/ica/EvmIcaReader.hardhat-test.d.ts +2 -0
  566. package/dist/ica/EvmIcaReader.hardhat-test.d.ts.map +1 -0
  567. package/dist/ica/EvmIcaReader.hardhat-test.js +39 -0
  568. package/dist/ica/EvmIcaReader.hardhat-test.js.map +1 -0
  569. package/dist/ica/EvmIcaReader.js +32 -0
  570. package/dist/ica/EvmIcaReader.js.map +1 -0
  571. package/dist/ica/types.d.ts +88 -0
  572. package/dist/ica/types.d.ts.map +1 -0
  573. package/dist/ica/types.js +36 -0
  574. package/dist/ica/types.js.map +1 -0
  575. package/dist/index.d.ts +215 -0
  576. package/dist/index.d.ts.map +1 -0
  577. package/dist/index.js +199 -0
  578. package/dist/index.js.map +1 -0
  579. package/dist/ism/EvmIsmModule.d.ts +106 -0
  580. package/dist/ism/EvmIsmModule.d.ts.map +1 -0
  581. package/dist/ism/EvmIsmModule.hardhat-test.d.ts +2 -0
  582. package/dist/ism/EvmIsmModule.hardhat-test.d.ts.map +1 -0
  583. package/dist/ism/EvmIsmModule.hardhat-test.js +1279 -0
  584. package/dist/ism/EvmIsmModule.hardhat-test.js.map +1 -0
  585. package/dist/ism/EvmIsmModule.js +709 -0
  586. package/dist/ism/EvmIsmModule.js.map +1 -0
  587. package/dist/ism/EvmIsmModule.test.d.ts +2 -0
  588. package/dist/ism/EvmIsmModule.test.d.ts.map +1 -0
  589. package/dist/ism/EvmIsmModule.test.js +309 -0
  590. package/dist/ism/EvmIsmModule.test.js.map +1 -0
  591. package/dist/ism/EvmIsmReader.d.ts +55 -0
  592. package/dist/ism/EvmIsmReader.d.ts.map +1 -0
  593. package/dist/ism/EvmIsmReader.js +555 -0
  594. package/dist/ism/EvmIsmReader.js.map +1 -0
  595. package/dist/ism/EvmIsmReader.test.d.ts +2 -0
  596. package/dist/ism/EvmIsmReader.test.d.ts.map +1 -0
  597. package/dist/ism/EvmIsmReader.test.js +931 -0
  598. package/dist/ism/EvmIsmReader.test.js.map +1 -0
  599. package/dist/ism/HyperlaneIsmFactory.d.ts +129 -0
  600. package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -0
  601. package/dist/ism/HyperlaneIsmFactory.hardhat-test.d.ts +2 -0
  602. package/dist/ism/HyperlaneIsmFactory.hardhat-test.d.ts.map +1 -0
  603. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js +1228 -0
  604. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js.map +1 -0
  605. package/dist/ism/HyperlaneIsmFactory.js +867 -0
  606. package/dist/ism/HyperlaneIsmFactory.js.map +1 -0
  607. package/dist/ism/HyperlaneIsmFactory.test.d.ts +2 -0
  608. package/dist/ism/HyperlaneIsmFactory.test.d.ts.map +1 -0
  609. package/dist/ism/HyperlaneIsmFactory.test.js +98 -0
  610. package/dist/ism/HyperlaneIsmFactory.test.js.map +1 -0
  611. package/dist/ism/adapters/CosmWasmMultisigAdapter.d.ts +24 -0
  612. package/dist/ism/adapters/CosmWasmMultisigAdapter.d.ts.map +1 -0
  613. package/dist/ism/adapters/CosmWasmMultisigAdapter.js +74 -0
  614. package/dist/ism/adapters/CosmWasmMultisigAdapter.js.map +1 -0
  615. package/dist/ism/adapters/SealevelMultisigAdapter.d.ts +59 -0
  616. package/dist/ism/adapters/SealevelMultisigAdapter.d.ts.map +1 -0
  617. package/dist/ism/adapters/SealevelMultisigAdapter.js +133 -0
  618. package/dist/ism/adapters/SealevelMultisigAdapter.js.map +1 -0
  619. package/dist/ism/blacklist.d.ts +62 -0
  620. package/dist/ism/blacklist.d.ts.map +1 -0
  621. package/dist/ism/blacklist.js +98 -0
  622. package/dist/ism/blacklist.js.map +1 -0
  623. package/dist/ism/delayedFlow.d.ts +31 -0
  624. package/dist/ism/delayedFlow.d.ts.map +1 -0
  625. package/dist/ism/delayedFlow.js +33 -0
  626. package/dist/ism/delayedFlow.js.map +1 -0
  627. package/dist/ism/multisig.d.ts +6 -0
  628. package/dist/ism/multisig.d.ts.map +1 -0
  629. package/dist/ism/multisig.js +25 -0
  630. package/dist/ism/multisig.js.map +1 -0
  631. package/dist/ism/serialization.d.ts +74 -0
  632. package/dist/ism/serialization.d.ts.map +1 -0
  633. package/dist/ism/serialization.js +177 -0
  634. package/dist/ism/serialization.js.map +1 -0
  635. package/dist/ism/types.d.ts +384 -0
  636. package/dist/ism/types.d.ts.map +1 -0
  637. package/dist/ism/types.js +876 -0
  638. package/dist/ism/types.js.map +1 -0
  639. package/dist/ism/types.test.d.ts +2 -0
  640. package/dist/ism/types.test.d.ts.map +1 -0
  641. package/dist/ism/types.test.js +1269 -0
  642. package/dist/ism/types.test.js.map +1 -0
  643. package/dist/ism/utils.d.ts +44 -0
  644. package/dist/ism/utils.d.ts.map +1 -0
  645. package/dist/ism/utils.js +603 -0
  646. package/dist/ism/utils.js.map +1 -0
  647. package/dist/ism/utils.test.d.ts +2 -0
  648. package/dist/ism/utils.test.d.ts.map +1 -0
  649. package/dist/ism/utils.test.js +144 -0
  650. package/dist/ism/utils.test.js.map +1 -0
  651. package/dist/mailbox/serialization.d.ts +41 -0
  652. package/dist/mailbox/serialization.d.ts.map +1 -0
  653. package/dist/mailbox/serialization.js +104 -0
  654. package/dist/mailbox/serialization.js.map +1 -0
  655. package/dist/metadata/ChainMetadataManager.d.ts +233 -0
  656. package/dist/metadata/ChainMetadataManager.d.ts.map +1 -0
  657. package/dist/metadata/ChainMetadataManager.js +424 -0
  658. package/dist/metadata/ChainMetadataManager.js.map +1 -0
  659. package/dist/metadata/ChainMetadataManager.test.d.ts +2 -0
  660. package/dist/metadata/ChainMetadataManager.test.d.ts.map +1 -0
  661. package/dist/metadata/ChainMetadataManager.test.js +233 -0
  662. package/dist/metadata/ChainMetadataManager.test.js.map +1 -0
  663. package/dist/metadata/ChainMetadataResolver.d.ts +14 -0
  664. package/dist/metadata/ChainMetadataResolver.d.ts.map +1 -0
  665. package/dist/metadata/ChainMetadataResolver.js +57 -0
  666. package/dist/metadata/ChainMetadataResolver.js.map +1 -0
  667. package/dist/metadata/ChainMetadataResolver.test.d.ts +2 -0
  668. package/dist/metadata/ChainMetadataResolver.test.d.ts.map +1 -0
  669. package/dist/metadata/ChainMetadataResolver.test.js +87 -0
  670. package/dist/metadata/ChainMetadataResolver.test.js.map +1 -0
  671. package/dist/metadata/agentConfig.d.ts +1529 -0
  672. package/dist/metadata/agentConfig.d.ts.map +1 -0
  673. package/dist/metadata/agentConfig.js +750 -0
  674. package/dist/metadata/agentConfig.js.map +1 -0
  675. package/dist/metadata/agentConfig.test.d.ts +2 -0
  676. package/dist/metadata/agentConfig.test.d.ts.map +1 -0
  677. package/dist/metadata/agentConfig.test.js +457 -0
  678. package/dist/metadata/agentConfig.test.js.map +1 -0
  679. package/dist/metadata/blockExplorer.d.ts +11 -0
  680. package/dist/metadata/blockExplorer.d.ts.map +1 -0
  681. package/dist/metadata/blockExplorer.js +123 -0
  682. package/dist/metadata/blockExplorer.js.map +1 -0
  683. package/dist/metadata/blockExplorer.test.d.ts +2 -0
  684. package/dist/metadata/blockExplorer.test.d.ts.map +1 -0
  685. package/dist/metadata/blockExplorer.test.js +326 -0
  686. package/dist/metadata/blockExplorer.test.js.map +1 -0
  687. package/dist/metadata/chainIdUtils.d.ts +8 -0
  688. package/dist/metadata/chainIdUtils.d.ts.map +1 -0
  689. package/dist/metadata/chainIdUtils.js +33 -0
  690. package/dist/metadata/chainIdUtils.js.map +1 -0
  691. package/dist/metadata/chainIdUtils.test.d.ts +2 -0
  692. package/dist/metadata/chainIdUtils.test.d.ts.map +1 -0
  693. package/dist/metadata/chainIdUtils.test.js +45 -0
  694. package/dist/metadata/chainIdUtils.test.js.map +1 -0
  695. package/dist/metadata/chainMetadata.test.d.ts +2 -0
  696. package/dist/metadata/chainMetadata.test.d.ts.map +1 -0
  697. package/dist/metadata/chainMetadata.test.js +130 -0
  698. package/dist/metadata/chainMetadata.test.js.map +1 -0
  699. package/dist/metadata/chainMetadataConversion.d.ts +11 -0
  700. package/dist/metadata/chainMetadataConversion.d.ts.map +1 -0
  701. package/dist/metadata/chainMetadataConversion.js +119 -0
  702. package/dist/metadata/chainMetadataConversion.js.map +1 -0
  703. package/dist/metadata/chainMetadataTypes.d.ts +338 -0
  704. package/dist/metadata/chainMetadataTypes.d.ts.map +1 -0
  705. package/dist/metadata/chainMetadataTypes.js +373 -0
  706. package/dist/metadata/chainMetadataTypes.js.map +1 -0
  707. package/dist/metadata/customZodTypes.d.ts +44 -0
  708. package/dist/metadata/customZodTypes.d.ts.map +1 -0
  709. package/dist/metadata/customZodTypes.js +65 -0
  710. package/dist/metadata/customZodTypes.js.map +1 -0
  711. package/dist/metadata/deploymentArtifacts.d.ts +10 -0
  712. package/dist/metadata/deploymentArtifacts.d.ts.map +1 -0
  713. package/dist/metadata/deploymentArtifacts.js +10 -0
  714. package/dist/metadata/deploymentArtifacts.js.map +1 -0
  715. package/dist/metadata/forwardCompatibleEnum.test.d.ts +2 -0
  716. package/dist/metadata/forwardCompatibleEnum.test.d.ts.map +1 -0
  717. package/dist/metadata/forwardCompatibleEnum.test.js +299 -0
  718. package/dist/metadata/forwardCompatibleEnum.test.js.map +1 -0
  719. package/dist/metadata/matchingList.d.ts +25 -0
  720. package/dist/metadata/matchingList.d.ts.map +1 -0
  721. package/dist/metadata/matchingList.js +22 -0
  722. package/dist/metadata/matchingList.js.map +1 -0
  723. package/dist/metadata/warpRouteConfig.d.ts +83 -0
  724. package/dist/metadata/warpRouteConfig.d.ts.map +1 -0
  725. package/dist/metadata/warpRouteConfig.js +22 -0
  726. package/dist/metadata/warpRouteConfig.js.map +1 -0
  727. package/dist/middleware/account/InterchainAccount.d.ts +47 -0
  728. package/dist/middleware/account/InterchainAccount.d.ts.map +1 -0
  729. package/dist/middleware/account/InterchainAccount.js +324 -0
  730. package/dist/middleware/account/InterchainAccount.js.map +1 -0
  731. package/dist/middleware/account/InterchainAccount.test.d.ts +2 -0
  732. package/dist/middleware/account/InterchainAccount.test.d.ts.map +1 -0
  733. package/dist/middleware/account/InterchainAccount.test.js +733 -0
  734. package/dist/middleware/account/InterchainAccount.test.js.map +1 -0
  735. package/dist/middleware/account/InterchainAccountChecker.d.ts +7 -0
  736. package/dist/middleware/account/InterchainAccountChecker.d.ts.map +1 -0
  737. package/dist/middleware/account/InterchainAccountChecker.js +4 -0
  738. package/dist/middleware/account/InterchainAccountChecker.js.map +1 -0
  739. package/dist/middleware/account/InterchainAccountDeployer.d.ts +14 -0
  740. package/dist/middleware/account/InterchainAccountDeployer.d.ts.map +1 -0
  741. package/dist/middleware/account/InterchainAccountDeployer.js +68 -0
  742. package/dist/middleware/account/InterchainAccountDeployer.js.map +1 -0
  743. package/dist/middleware/account/accounts.hardhat-test.d.ts +2 -0
  744. package/dist/middleware/account/accounts.hardhat-test.d.ts.map +1 -0
  745. package/dist/middleware/account/accounts.hardhat-test.js +240 -0
  746. package/dist/middleware/account/accounts.hardhat-test.js.map +1 -0
  747. package/dist/middleware/account/contracts.d.ts +6 -0
  748. package/dist/middleware/account/contracts.d.ts.map +1 -0
  749. package/dist/middleware/account/contracts.js +5 -0
  750. package/dist/middleware/account/contracts.js.map +1 -0
  751. package/dist/middleware/account/icaCalls.d.ts +78 -0
  752. package/dist/middleware/account/icaCalls.d.ts.map +1 -0
  753. package/dist/middleware/account/icaCalls.js +75 -0
  754. package/dist/middleware/account/icaCalls.js.map +1 -0
  755. package/dist/middleware/account/types.d.ts +40 -0
  756. package/dist/middleware/account/types.d.ts.map +1 -0
  757. package/dist/middleware/account/types.js +25 -0
  758. package/dist/middleware/account/types.js.map +1 -0
  759. package/dist/middleware/query/InterchainQuery.d.ts +10 -0
  760. package/dist/middleware/query/InterchainQuery.d.ts.map +1 -0
  761. package/dist/middleware/query/InterchainQuery.js +13 -0
  762. package/dist/middleware/query/InterchainQuery.js.map +1 -0
  763. package/dist/middleware/query/InterchainQueryChecker.d.ts +7 -0
  764. package/dist/middleware/query/InterchainQueryChecker.d.ts.map +1 -0
  765. package/dist/middleware/query/InterchainQueryChecker.js +4 -0
  766. package/dist/middleware/query/InterchainQueryChecker.js.map +1 -0
  767. package/dist/middleware/query/InterchainQueryDeployer.d.ts +17 -0
  768. package/dist/middleware/query/InterchainQueryDeployer.d.ts.map +1 -0
  769. package/dist/middleware/query/InterchainQueryDeployer.js +35 -0
  770. package/dist/middleware/query/InterchainQueryDeployer.js.map +1 -0
  771. package/dist/middleware/query/contracts.d.ts +8 -0
  772. package/dist/middleware/query/contracts.d.ts.map +1 -0
  773. package/dist/middleware/query/contracts.js +7 -0
  774. package/dist/middleware/query/contracts.js.map +1 -0
  775. package/dist/middleware/query/queries.hardhat-test.d.ts +2 -0
  776. package/dist/middleware/query/queries.hardhat-test.d.ts.map +1 -0
  777. package/dist/middleware/query/queries.hardhat-test.js +70 -0
  778. package/dist/middleware/query/queries.hardhat-test.js.map +1 -0
  779. package/dist/predicate/PredicateApiClient.d.ts +35 -0
  780. package/dist/predicate/PredicateApiClient.d.ts.map +1 -0
  781. package/dist/predicate/PredicateApiClient.js +66 -0
  782. package/dist/predicate/PredicateApiClient.js.map +1 -0
  783. package/dist/predicate/PredicateApiClient.test.d.ts +2 -0
  784. package/dist/predicate/PredicateApiClient.test.d.ts.map +1 -0
  785. package/dist/predicate/PredicateApiClient.test.js +108 -0
  786. package/dist/predicate/PredicateApiClient.test.js.map +1 -0
  787. package/dist/predicate/PredicateDeployer.d.ts +56 -0
  788. package/dist/predicate/PredicateDeployer.d.ts.map +1 -0
  789. package/dist/predicate/PredicateDeployer.hardhat-test.d.ts +2 -0
  790. package/dist/predicate/PredicateDeployer.hardhat-test.d.ts.map +1 -0
  791. package/dist/predicate/PredicateDeployer.hardhat-test.js +209 -0
  792. package/dist/predicate/PredicateDeployer.hardhat-test.js.map +1 -0
  793. package/dist/predicate/PredicateDeployer.js +218 -0
  794. package/dist/predicate/PredicateDeployer.js.map +1 -0
  795. package/dist/providers/MinimalProviderRegistry.d.ts +41 -0
  796. package/dist/providers/MinimalProviderRegistry.d.ts.map +1 -0
  797. package/dist/providers/MinimalProviderRegistry.js +122 -0
  798. package/dist/providers/MinimalProviderRegistry.js.map +1 -0
  799. package/dist/providers/MultiProtocolProvider.d.ts +23 -0
  800. package/dist/providers/MultiProtocolProvider.d.ts.map +1 -0
  801. package/dist/providers/MultiProtocolProvider.js +64 -0
  802. package/dist/providers/MultiProtocolProvider.js.map +1 -0
  803. package/dist/providers/MultiProtocolProvider.test.d.ts +2 -0
  804. package/dist/providers/MultiProtocolProvider.test.d.ts.map +1 -0
  805. package/dist/providers/MultiProtocolProvider.test.js +126 -0
  806. package/dist/providers/MultiProtocolProvider.test.js.map +1 -0
  807. package/dist/providers/MultiProvider.d.ts +196 -0
  808. package/dist/providers/MultiProvider.d.ts.map +1 -0
  809. package/dist/providers/MultiProvider.js +553 -0
  810. package/dist/providers/MultiProvider.js.map +1 -0
  811. package/dist/providers/MultiProvider.test.d.ts +2 -0
  812. package/dist/providers/MultiProvider.test.d.ts.map +1 -0
  813. package/dist/providers/MultiProvider.test.js +357 -0
  814. package/dist/providers/MultiProvider.test.js.map +1 -0
  815. package/dist/providers/MultiProviderAdapter.d.ts +61 -0
  816. package/dist/providers/MultiProviderAdapter.d.ts.map +1 -0
  817. package/dist/providers/MultiProviderAdapter.js +164 -0
  818. package/dist/providers/MultiProviderAdapter.js.map +1 -0
  819. package/dist/providers/ProviderType.d.ts +319 -0
  820. package/dist/providers/ProviderType.d.ts.map +1 -0
  821. package/dist/providers/ProviderType.js +27 -0
  822. package/dist/providers/ProviderType.js.map +1 -0
  823. package/dist/providers/SeismicSigner.d.ts +78 -0
  824. package/dist/providers/SeismicSigner.d.ts.map +1 -0
  825. package/dist/providers/SeismicSigner.js +265 -0
  826. package/dist/providers/SeismicSigner.js.map +1 -0
  827. package/dist/providers/SeismicSigner.test.d.ts +2 -0
  828. package/dist/providers/SeismicSigner.test.d.ts.map +1 -0
  829. package/dist/providers/SeismicSigner.test.js +561 -0
  830. package/dist/providers/SeismicSigner.test.js.map +1 -0
  831. package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.d.ts +25 -0
  832. package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.d.ts.map +1 -0
  833. package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.js +139 -0
  834. package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.js.map +1 -0
  835. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.d.ts +61 -0
  836. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.d.ts.map +1 -0
  837. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.js +248 -0
  838. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.js.map +1 -0
  839. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.test.d.ts +2 -0
  840. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.test.d.ts.map +1 -0
  841. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.test.js +516 -0
  842. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.test.js.map +1 -0
  843. package/dist/providers/SmartProvider/ProviderMethods.d.ts +24 -0
  844. package/dist/providers/SmartProvider/ProviderMethods.d.ts.map +1 -0
  845. package/dist/providers/SmartProvider/ProviderMethods.js +32 -0
  846. package/dist/providers/SmartProvider/ProviderMethods.js.map +1 -0
  847. package/dist/providers/SmartProvider/SmartProvider.d.ts +58 -0
  848. package/dist/providers/SmartProvider/SmartProvider.d.ts.map +1 -0
  849. package/dist/providers/SmartProvider/SmartProvider.emptyResponse.test.d.ts +2 -0
  850. package/dist/providers/SmartProvider/SmartProvider.emptyResponse.test.d.ts.map +1 -0
  851. package/dist/providers/SmartProvider/SmartProvider.emptyResponse.test.js +164 -0
  852. package/dist/providers/SmartProvider/SmartProvider.emptyResponse.test.js.map +1 -0
  853. package/dist/providers/SmartProvider/SmartProvider.foundry-test.d.ts +2 -0
  854. package/dist/providers/SmartProvider/SmartProvider.foundry-test.d.ts.map +1 -0
  855. package/dist/providers/SmartProvider/SmartProvider.foundry-test.js +173 -0
  856. package/dist/providers/SmartProvider/SmartProvider.foundry-test.js.map +1 -0
  857. package/dist/providers/SmartProvider/SmartProvider.js +560 -0
  858. package/dist/providers/SmartProvider/SmartProvider.js.map +1 -0
  859. package/dist/providers/SmartProvider/SmartProvider.rawRead.test.d.ts +2 -0
  860. package/dist/providers/SmartProvider/SmartProvider.rawRead.test.d.ts.map +1 -0
  861. package/dist/providers/SmartProvider/SmartProvider.rawRead.test.js +90 -0
  862. package/dist/providers/SmartProvider/SmartProvider.rawRead.test.js.map +1 -0
  863. package/dist/providers/SmartProvider/SmartProvider.test.d.ts +2 -0
  864. package/dist/providers/SmartProvider/SmartProvider.test.d.ts.map +1 -0
  865. package/dist/providers/SmartProvider/SmartProvider.test.js +1119 -0
  866. package/dist/providers/SmartProvider/SmartProvider.test.js.map +1 -0
  867. package/dist/providers/SmartProvider/jsonRpcError.d.ts +13 -0
  868. package/dist/providers/SmartProvider/jsonRpcError.d.ts.map +1 -0
  869. package/dist/providers/SmartProvider/jsonRpcError.js +86 -0
  870. package/dist/providers/SmartProvider/jsonRpcError.js.map +1 -0
  871. package/dist/providers/SmartProvider/jsonRpcError.test.d.ts +2 -0
  872. package/dist/providers/SmartProvider/jsonRpcError.test.d.ts.map +1 -0
  873. package/dist/providers/SmartProvider/jsonRpcError.test.js +46 -0
  874. package/dist/providers/SmartProvider/jsonRpcError.test.js.map +1 -0
  875. package/dist/providers/SmartProvider/logFilters.d.ts +10 -0
  876. package/dist/providers/SmartProvider/logFilters.d.ts.map +1 -0
  877. package/dist/providers/SmartProvider/logFilters.js +31 -0
  878. package/dist/providers/SmartProvider/logFilters.js.map +1 -0
  879. package/dist/providers/SmartProvider/types.d.ts +50 -0
  880. package/dist/providers/SmartProvider/types.d.ts.map +1 -0
  881. package/dist/providers/SmartProvider/types.js +7 -0
  882. package/dist/providers/SmartProvider/types.js.map +1 -0
  883. package/dist/providers/builders/aleo.browser.d.ts +13 -0
  884. package/dist/providers/builders/aleo.browser.d.ts.map +1 -0
  885. package/dist/providers/builders/aleo.browser.js +54 -0
  886. package/dist/providers/builders/aleo.browser.js.map +1 -0
  887. package/dist/providers/builders/aleo.d.ts +4 -0
  888. package/dist/providers/builders/aleo.d.ts.map +1 -0
  889. package/dist/providers/builders/aleo.js +7 -0
  890. package/dist/providers/builders/aleo.js.map +1 -0
  891. package/dist/providers/builders/aleo.test.d.ts +2 -0
  892. package/dist/providers/builders/aleo.test.d.ts.map +1 -0
  893. package/dist/providers/builders/aleo.test.js +99 -0
  894. package/dist/providers/builders/aleo.test.js.map +1 -0
  895. package/dist/providers/builders/cosmos.d.ts +6 -0
  896. package/dist/providers/builders/cosmos.d.ts.map +1 -0
  897. package/dist/providers/builders/cosmos.js +30 -0
  898. package/dist/providers/builders/cosmos.js.map +1 -0
  899. package/dist/providers/builders/ethersV5.d.ts +7 -0
  900. package/dist/providers/builders/ethersV5.d.ts.map +1 -0
  901. package/dist/providers/builders/ethersV5.js +38 -0
  902. package/dist/providers/builders/ethersV5.js.map +1 -0
  903. package/dist/providers/builders/ethersV5.test.d.ts +2 -0
  904. package/dist/providers/builders/ethersV5.test.d.ts.map +1 -0
  905. package/dist/providers/builders/ethersV5.test.js +77 -0
  906. package/dist/providers/builders/ethersV5.test.js.map +1 -0
  907. package/dist/providers/builders/radix.browser.d.ts +19 -0
  908. package/dist/providers/builders/radix.browser.d.ts.map +1 -0
  909. package/dist/providers/builders/radix.browser.js +47 -0
  910. package/dist/providers/builders/radix.browser.js.map +1 -0
  911. package/dist/providers/builders/radix.d.ts +4 -0
  912. package/dist/providers/builders/radix.d.ts.map +1 -0
  913. package/dist/providers/builders/radix.gateway.test.d.ts +2 -0
  914. package/dist/providers/builders/radix.gateway.test.d.ts.map +1 -0
  915. package/dist/providers/builders/radix.gateway.test.js +39 -0
  916. package/dist/providers/builders/radix.gateway.test.js.map +1 -0
  917. package/dist/providers/builders/radix.js +17 -0
  918. package/dist/providers/builders/radix.js.map +1 -0
  919. package/dist/providers/builders/radix.test.d.ts +2 -0
  920. package/dist/providers/builders/radix.test.d.ts.map +1 -0
  921. package/dist/providers/builders/radix.test.js +82 -0
  922. package/dist/providers/builders/radix.test.js.map +1 -0
  923. package/dist/providers/builders/solana.d.ts +4 -0
  924. package/dist/providers/builders/solana.d.ts.map +1 -0
  925. package/dist/providers/builders/solana.js +12 -0
  926. package/dist/providers/builders/solana.js.map +1 -0
  927. package/dist/providers/builders/starknet.d.ts +4 -0
  928. package/dist/providers/builders/starknet.d.ts.map +1 -0
  929. package/dist/providers/builders/starknet.js +20 -0
  930. package/dist/providers/builders/starknet.js.map +1 -0
  931. package/dist/providers/builders/tron.d.ts +10 -0
  932. package/dist/providers/builders/tron.d.ts.map +1 -0
  933. package/dist/providers/builders/tron.js +21 -0
  934. package/dist/providers/builders/tron.js.map +1 -0
  935. package/dist/providers/builders/types.d.ts +6 -0
  936. package/dist/providers/builders/types.d.ts.map +1 -0
  937. package/dist/providers/builders/types.js +2 -0
  938. package/dist/providers/builders/types.js.map +1 -0
  939. package/dist/providers/builders/viem.d.ts +4 -0
  940. package/dist/providers/builders/viem.d.ts.map +1 -0
  941. package/dist/providers/builders/viem.js +25 -0
  942. package/dist/providers/builders/viem.js.map +1 -0
  943. package/dist/providers/builders/zksync.d.ts +7 -0
  944. package/dist/providers/builders/zksync.d.ts.map +1 -0
  945. package/dist/providers/builders/zksync.js +14 -0
  946. package/dist/providers/builders/zksync.js.map +1 -0
  947. package/dist/providers/defaultProviderBuilderMaps.d.ts +7 -0
  948. package/dist/providers/defaultProviderBuilderMaps.d.ts.map +1 -0
  949. package/dist/providers/defaultProviderBuilderMaps.js +36 -0
  950. package/dist/providers/defaultProviderBuilderMaps.js.map +1 -0
  951. package/dist/providers/explorerHealthTest.d.ts +4 -0
  952. package/dist/providers/explorerHealthTest.d.ts.map +1 -0
  953. package/dist/providers/explorerHealthTest.js +53 -0
  954. package/dist/providers/explorerHealthTest.js.map +1 -0
  955. package/dist/providers/providerBuilders.d.ts +12 -0
  956. package/dist/providers/providerBuilders.d.ts.map +1 -0
  957. package/dist/providers/providerBuilders.js +11 -0
  958. package/dist/providers/providerBuilders.js.map +1 -0
  959. package/dist/providers/rpcHealthTest.d.ts +11 -0
  960. package/dist/providers/rpcHealthTest.d.ts.map +1 -0
  961. package/dist/providers/rpcHealthTest.js +104 -0
  962. package/dist/providers/rpcHealthTest.js.map +1 -0
  963. package/dist/providers/runtime/evm.d.ts +3 -0
  964. package/dist/providers/runtime/evm.d.ts.map +1 -0
  965. package/dist/providers/runtime/evm.js +11 -0
  966. package/dist/providers/runtime/evm.js.map +1 -0
  967. package/dist/providers/runtime/evmLike.d.ts +3 -0
  968. package/dist/providers/runtime/evmLike.d.ts.map +1 -0
  969. package/dist/providers/runtime/evmLike.js +7 -0
  970. package/dist/providers/runtime/evmLike.js.map +1 -0
  971. package/dist/providers/runtime/evmLike.test.d.ts +2 -0
  972. package/dist/providers/runtime/evmLike.test.d.ts.map +1 -0
  973. package/dist/providers/runtime/evmLike.test.js +22 -0
  974. package/dist/providers/runtime/evmLike.test.js.map +1 -0
  975. package/dist/providers/runtime/tron.d.ts +3 -0
  976. package/dist/providers/runtime/tron.d.ts.map +1 -0
  977. package/dist/providers/runtime/tron.js +6 -0
  978. package/dist/providers/runtime/tron.js.map +1 -0
  979. package/dist/providers/transactionFeeEstimators.d.ts +79 -0
  980. package/dist/providers/transactionFeeEstimators.d.ts.map +1 -0
  981. package/dist/providers/transactionFeeEstimators.js +317 -0
  982. package/dist/providers/transactionFeeEstimators.js.map +1 -0
  983. package/dist/providers/transactionFeeEstimators.test.d.ts +2 -0
  984. package/dist/providers/transactionFeeEstimators.test.d.ts.map +1 -0
  985. package/dist/providers/transactionFeeEstimators.test.js +394 -0
  986. package/dist/providers/transactionFeeEstimators.test.js.map +1 -0
  987. package/dist/providers/transactions/submitter/IcaTxSubmitter.d.ts +25 -0
  988. package/dist/providers/transactions/submitter/IcaTxSubmitter.d.ts.map +1 -0
  989. package/dist/providers/transactions/submitter/IcaTxSubmitter.js +113 -0
  990. package/dist/providers/transactions/submitter/IcaTxSubmitter.js.map +1 -0
  991. package/dist/providers/transactions/submitter/IcaTxSubmitter.test.d.ts +2 -0
  992. package/dist/providers/transactions/submitter/IcaTxSubmitter.test.d.ts.map +1 -0
  993. package/dist/providers/transactions/submitter/IcaTxSubmitter.test.js +122 -0
  994. package/dist/providers/transactions/submitter/IcaTxSubmitter.test.js.map +1 -0
  995. package/dist/providers/transactions/submitter/TxSubmitterInterface.d.ts +19 -0
  996. package/dist/providers/transactions/submitter/TxSubmitterInterface.d.ts.map +1 -0
  997. package/dist/providers/transactions/submitter/TxSubmitterInterface.js +2 -0
  998. package/dist/providers/transactions/submitter/TxSubmitterInterface.js.map +1 -0
  999. package/dist/providers/transactions/submitter/TxSubmitterTypes.d.ts +9 -0
  1000. package/dist/providers/transactions/submitter/TxSubmitterTypes.d.ts.map +1 -0
  1001. package/dist/providers/transactions/submitter/TxSubmitterTypes.js +10 -0
  1002. package/dist/providers/transactions/submitter/TxSubmitterTypes.js.map +1 -0
  1003. package/dist/providers/transactions/submitter/builder/TxSubmitterBuilder.d.ts +39 -0
  1004. package/dist/providers/transactions/submitter/builder/TxSubmitterBuilder.d.ts.map +1 -0
  1005. package/dist/providers/transactions/submitter/builder/TxSubmitterBuilder.js +48 -0
  1006. package/dist/providers/transactions/submitter/builder/TxSubmitterBuilder.js.map +1 -0
  1007. package/dist/providers/transactions/submitter/builder/types.d.ts +69 -0
  1008. package/dist/providers/transactions/submitter/builder/types.d.ts.map +1 -0
  1009. package/dist/providers/transactions/submitter/builder/types.js +94 -0
  1010. package/dist/providers/transactions/submitter/builder/types.js.map +1 -0
  1011. package/dist/providers/transactions/submitter/builder/types.test.d.ts +2 -0
  1012. package/dist/providers/transactions/submitter/builder/types.test.d.ts.map +1 -0
  1013. package/dist/providers/transactions/submitter/builder/types.test.js +314 -0
  1014. package/dist/providers/transactions/submitter/builder/types.test.js.map +1 -0
  1015. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxBuilder.d.ts +33 -0
  1016. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxBuilder.d.ts.map +1 -0
  1017. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxBuilder.js +43 -0
  1018. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxBuilder.js.map +1 -0
  1019. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.d.ts +31 -0
  1020. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.d.ts.map +1 -0
  1021. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.js +90 -0
  1022. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.js.map +1 -0
  1023. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.test.d.ts +2 -0
  1024. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.test.d.ts.map +1 -0
  1025. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.test.js +145 -0
  1026. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.test.js.map +1 -0
  1027. package/dist/providers/transactions/submitter/ethersV5/EV5ImpersonatedAccountTxSubmitter.d.ts +15 -0
  1028. package/dist/providers/transactions/submitter/ethersV5/EV5ImpersonatedAccountTxSubmitter.d.ts.map +1 -0
  1029. package/dist/providers/transactions/submitter/ethersV5/EV5ImpersonatedAccountTxSubmitter.js +26 -0
  1030. package/dist/providers/transactions/submitter/ethersV5/EV5ImpersonatedAccountTxSubmitter.js.map +1 -0
  1031. package/dist/providers/transactions/submitter/ethersV5/EV5JsonRpcTxSubmitter.d.ts +29 -0
  1032. package/dist/providers/transactions/submitter/ethersV5/EV5JsonRpcTxSubmitter.d.ts.map +1 -0
  1033. package/dist/providers/transactions/submitter/ethersV5/EV5JsonRpcTxSubmitter.js +68 -0
  1034. package/dist/providers/transactions/submitter/ethersV5/EV5JsonRpcTxSubmitter.js.map +1 -0
  1035. package/dist/providers/transactions/submitter/ethersV5/EV5JsonRpcTxSubmitter.test.d.ts +2 -0
  1036. package/dist/providers/transactions/submitter/ethersV5/EV5JsonRpcTxSubmitter.test.d.ts.map +1 -0
  1037. package/dist/providers/transactions/submitter/ethersV5/EV5JsonRpcTxSubmitter.test.js +125 -0
  1038. package/dist/providers/transactions/submitter/ethersV5/EV5JsonRpcTxSubmitter.test.js.map +1 -0
  1039. package/dist/providers/transactions/submitter/ethersV5/EV5TimelockSubmitter.d.ts +22 -0
  1040. package/dist/providers/transactions/submitter/ethersV5/EV5TimelockSubmitter.d.ts.map +1 -0
  1041. package/dist/providers/transactions/submitter/ethersV5/EV5TimelockSubmitter.js +85 -0
  1042. package/dist/providers/transactions/submitter/ethersV5/EV5TimelockSubmitter.js.map +1 -0
  1043. package/dist/providers/transactions/submitter/ethersV5/EV5TxSubmitterInterface.d.ts +10 -0
  1044. package/dist/providers/transactions/submitter/ethersV5/EV5TxSubmitterInterface.d.ts.map +1 -0
  1045. package/dist/providers/transactions/submitter/ethersV5/EV5TxSubmitterInterface.js +2 -0
  1046. package/dist/providers/transactions/submitter/ethersV5/EV5TxSubmitterInterface.js.map +1 -0
  1047. package/dist/providers/transactions/submitter/ethersV5/types.d.ts +104 -0
  1048. package/dist/providers/transactions/submitter/ethersV5/types.d.ts.map +1 -0
  1049. package/dist/providers/transactions/submitter/ethersV5/types.js +72 -0
  1050. package/dist/providers/transactions/submitter/ethersV5/types.js.map +1 -0
  1051. package/dist/providers/transactions/submitter/ethersV5/types.test.d.ts +2 -0
  1052. package/dist/providers/transactions/submitter/ethersV5/types.test.d.ts.map +1 -0
  1053. package/dist/providers/transactions/submitter/ethersV5/types.test.js +57 -0
  1054. package/dist/providers/transactions/submitter/ethersV5/types.test.js.map +1 -0
  1055. package/dist/providers/transactions/submitter/submitterBuilderGetter.d.ts +31 -0
  1056. package/dist/providers/transactions/submitter/submitterBuilderGetter.d.ts.map +1 -0
  1057. package/dist/providers/transactions/submitter/submitterBuilderGetter.js +97 -0
  1058. package/dist/providers/transactions/submitter/submitterBuilderGetter.js.map +1 -0
  1059. package/dist/providers/transactions/submitter/submitterBuilderGetter.test.d.ts +2 -0
  1060. package/dist/providers/transactions/submitter/submitterBuilderGetter.test.d.ts.map +1 -0
  1061. package/dist/providers/transactions/submitter/submitterBuilderGetter.test.js +38 -0
  1062. package/dist/providers/transactions/submitter/submitterBuilderGetter.test.js.map +1 -0
  1063. package/dist/providers/transactions/submitter/types.d.ts +37 -0
  1064. package/dist/providers/transactions/submitter/types.d.ts.map +1 -0
  1065. package/dist/providers/transactions/submitter/types.js +3 -0
  1066. package/dist/providers/transactions/submitter/types.js.map +1 -0
  1067. package/dist/providers/transactions/types.d.ts +9 -0
  1068. package/dist/providers/transactions/types.d.ts.map +1 -0
  1069. package/dist/providers/transactions/types.js +9 -0
  1070. package/dist/providers/transactions/types.js.map +1 -0
  1071. package/dist/providers/transactions/types.test.d.ts +2 -0
  1072. package/dist/providers/transactions/types.test.d.ts.map +1 -0
  1073. package/dist/providers/transactions/types.test.js +37 -0
  1074. package/dist/providers/transactions/types.test.js.map +1 -0
  1075. package/dist/quote/Eip712Signable.d.ts +25 -0
  1076. package/dist/quote/Eip712Signable.d.ts.map +1 -0
  1077. package/dist/quote/Eip712Signable.js +27 -0
  1078. package/dist/quote/Eip712Signable.js.map +1 -0
  1079. package/dist/quote/EvmPrivateKeyQuoteSigner.d.ts +15 -0
  1080. package/dist/quote/EvmPrivateKeyQuoteSigner.d.ts.map +1 -0
  1081. package/dist/quote/EvmPrivateKeyQuoteSigner.js +24 -0
  1082. package/dist/quote/EvmPrivateKeyQuoteSigner.js.map +1 -0
  1083. package/dist/quote/EvmPrivateKeyQuoteSigner.test.d.ts +2 -0
  1084. package/dist/quote/EvmPrivateKeyQuoteSigner.test.d.ts.map +1 -0
  1085. package/dist/quote/EvmPrivateKeyQuoteSigner.test.js +23 -0
  1086. package/dist/quote/EvmPrivateKeyQuoteSigner.test.js.map +1 -0
  1087. package/dist/quote/EvmQuoteArtifactManager.d.ts +20 -0
  1088. package/dist/quote/EvmQuoteArtifactManager.d.ts.map +1 -0
  1089. package/dist/quote/EvmQuoteArtifactManager.js +32 -0
  1090. package/dist/quote/EvmQuoteArtifactManager.js.map +1 -0
  1091. package/dist/quote/EvmQuoteReader.d.ts +24 -0
  1092. package/dist/quote/EvmQuoteReader.d.ts.map +1 -0
  1093. package/dist/quote/EvmQuoteReader.hardhat-test.d.ts +2 -0
  1094. package/dist/quote/EvmQuoteReader.hardhat-test.d.ts.map +1 -0
  1095. package/dist/quote/EvmQuoteReader.hardhat-test.js +157 -0
  1096. package/dist/quote/EvmQuoteReader.hardhat-test.js.map +1 -0
  1097. package/dist/quote/EvmQuoteReader.js +91 -0
  1098. package/dist/quote/EvmQuoteReader.js.map +1 -0
  1099. package/dist/quote/EvmQuoteWriter.d.ts +16 -0
  1100. package/dist/quote/EvmQuoteWriter.d.ts.map +1 -0
  1101. package/dist/quote/EvmQuoteWriter.hardhat-test.d.ts +2 -0
  1102. package/dist/quote/EvmQuoteWriter.hardhat-test.d.ts.map +1 -0
  1103. package/dist/quote/EvmQuoteWriter.hardhat-test.js +238 -0
  1104. package/dist/quote/EvmQuoteWriter.hardhat-test.js.map +1 -0
  1105. package/dist/quote/EvmQuoteWriter.js +55 -0
  1106. package/dist/quote/EvmQuoteWriter.js.map +1 -0
  1107. package/dist/quote/WarpSignedQuoteEip712.d.ts +22 -0
  1108. package/dist/quote/WarpSignedQuoteEip712.d.ts.map +1 -0
  1109. package/dist/quote/WarpSignedQuoteEip712.js +48 -0
  1110. package/dist/quote/WarpSignedQuoteEip712.js.map +1 -0
  1111. package/dist/quoted-calls/EvmQuotedTransferProvider.d.ts +63 -0
  1112. package/dist/quoted-calls/EvmQuotedTransferProvider.d.ts.map +1 -0
  1113. package/dist/quoted-calls/EvmQuotedTransferProvider.js +207 -0
  1114. package/dist/quoted-calls/EvmQuotedTransferProvider.js.map +1 -0
  1115. package/dist/quoted-calls/QuotedTransferProvider.d.ts +50 -0
  1116. package/dist/quoted-calls/QuotedTransferProvider.d.ts.map +1 -0
  1117. package/dist/quoted-calls/QuotedTransferProvider.js +2 -0
  1118. package/dist/quoted-calls/QuotedTransferProvider.js.map +1 -0
  1119. package/dist/quoted-calls/SealevelQuotedTransferProvider.d.ts +89 -0
  1120. package/dist/quoted-calls/SealevelQuotedTransferProvider.d.ts.map +1 -0
  1121. package/dist/quoted-calls/SealevelQuotedTransferProvider.js +472 -0
  1122. package/dist/quoted-calls/SealevelQuotedTransferProvider.js.map +1 -0
  1123. package/dist/quoted-calls/SealevelQuotedTransferProvider.test.d.ts +2 -0
  1124. package/dist/quoted-calls/SealevelQuotedTransferProvider.test.d.ts.map +1 -0
  1125. package/dist/quoted-calls/SealevelQuotedTransferProvider.test.js +502 -0
  1126. package/dist/quoted-calls/SealevelQuotedTransferProvider.test.js.map +1 -0
  1127. package/dist/quoted-calls/assertHex.d.ts +6 -0
  1128. package/dist/quoted-calls/assertHex.d.ts.map +1 -0
  1129. package/dist/quoted-calls/assertHex.js +13 -0
  1130. package/dist/quoted-calls/assertHex.js.map +1 -0
  1131. package/dist/quoted-calls/builder.d.ts +52 -0
  1132. package/dist/quoted-calls/builder.d.ts.map +1 -0
  1133. package/dist/quoted-calls/builder.js +161 -0
  1134. package/dist/quoted-calls/builder.js.map +1 -0
  1135. package/dist/quoted-calls/builder.test.d.ts +2 -0
  1136. package/dist/quoted-calls/builder.test.d.ts.map +1 -0
  1137. package/dist/quoted-calls/builder.test.js +193 -0
  1138. package/dist/quoted-calls/builder.test.js.map +1 -0
  1139. package/dist/quoted-calls/client.d.ts +69 -0
  1140. package/dist/quoted-calls/client.d.ts.map +1 -0
  1141. package/dist/quoted-calls/client.js +205 -0
  1142. package/dist/quoted-calls/client.js.map +1 -0
  1143. package/dist/quoted-calls/client.v2.test.d.ts +2 -0
  1144. package/dist/quoted-calls/client.v2.test.d.ts.map +1 -0
  1145. package/dist/quoted-calls/client.v2.test.js +346 -0
  1146. package/dist/quoted-calls/client.v2.test.js.map +1 -0
  1147. package/dist/quoted-calls/codec.d.ts +94 -0
  1148. package/dist/quoted-calls/codec.d.ts.map +1 -0
  1149. package/dist/quoted-calls/codec.js +223 -0
  1150. package/dist/quoted-calls/codec.js.map +1 -0
  1151. package/dist/quoted-calls/codec.test.d.ts +2 -0
  1152. package/dist/quoted-calls/codec.test.d.ts.map +1 -0
  1153. package/dist/quoted-calls/codec.test.js +307 -0
  1154. package/dist/quoted-calls/codec.test.js.map +1 -0
  1155. package/dist/quoted-calls/composeSealevelTx.d.ts +26 -0
  1156. package/dist/quoted-calls/composeSealevelTx.d.ts.map +1 -0
  1157. package/dist/quoted-calls/composeSealevelTx.js +45 -0
  1158. package/dist/quoted-calls/composeSealevelTx.js.map +1 -0
  1159. package/dist/quoted-calls/svmDecoder.d.ts +51 -0
  1160. package/dist/quoted-calls/svmDecoder.d.ts.map +1 -0
  1161. package/dist/quoted-calls/svmDecoder.js +26 -0
  1162. package/dist/quoted-calls/svmDecoder.js.map +1 -0
  1163. package/dist/quoted-calls/svmDecoder.test.d.ts +2 -0
  1164. package/dist/quoted-calls/svmDecoder.test.d.ts.map +1 -0
  1165. package/dist/quoted-calls/svmDecoder.test.js +56 -0
  1166. package/dist/quoted-calls/svmDecoder.test.js.map +1 -0
  1167. package/dist/quoted-calls/types.d.ts +176 -0
  1168. package/dist/quoted-calls/types.d.ts.map +1 -0
  1169. package/dist/quoted-calls/types.js +56 -0
  1170. package/dist/quoted-calls/types.js.map +1 -0
  1171. package/dist/router/EvmRouterReader.d.ts +18 -0
  1172. package/dist/router/EvmRouterReader.d.ts.map +1 -0
  1173. package/dist/router/EvmRouterReader.js +60 -0
  1174. package/dist/router/EvmRouterReader.js.map +1 -0
  1175. package/dist/router/GasRouterDeployer.d.ts +11 -0
  1176. package/dist/router/GasRouterDeployer.d.ts.map +1 -0
  1177. package/dist/router/GasRouterDeployer.js +25 -0
  1178. package/dist/router/GasRouterDeployer.js.map +1 -0
  1179. package/dist/router/HyperlaneRouterChecker.d.ts +19 -0
  1180. package/dist/router/HyperlaneRouterChecker.d.ts.map +1 -0
  1181. package/dist/router/HyperlaneRouterChecker.js +157 -0
  1182. package/dist/router/HyperlaneRouterChecker.js.map +1 -0
  1183. package/dist/router/HyperlaneRouterDeployer.d.ts +18 -0
  1184. package/dist/router/HyperlaneRouterDeployer.d.ts.map +1 -0
  1185. package/dist/router/HyperlaneRouterDeployer.js +88 -0
  1186. package/dist/router/HyperlaneRouterDeployer.js.map +1 -0
  1187. package/dist/router/MultiProtocolRouterApps.d.ts +20 -0
  1188. package/dist/router/MultiProtocolRouterApps.d.ts.map +1 -0
  1189. package/dist/router/MultiProtocolRouterApps.js +43 -0
  1190. package/dist/router/MultiProtocolRouterApps.js.map +1 -0
  1191. package/dist/router/MultiProtocolRouterApps.test.d.ts +2 -0
  1192. package/dist/router/MultiProtocolRouterApps.test.d.ts.map +1 -0
  1193. package/dist/router/MultiProtocolRouterApps.test.js +22 -0
  1194. package/dist/router/MultiProtocolRouterApps.test.js.map +1 -0
  1195. package/dist/router/ProxiedRouterChecker.d.ts +12 -0
  1196. package/dist/router/ProxiedRouterChecker.d.ts.map +1 -0
  1197. package/dist/router/ProxiedRouterChecker.js +34 -0
  1198. package/dist/router/ProxiedRouterChecker.js.map +1 -0
  1199. package/dist/router/ProxiedRouterDeployer.d.ts +35 -0
  1200. package/dist/router/ProxiedRouterDeployer.d.ts.map +1 -0
  1201. package/dist/router/ProxiedRouterDeployer.js +58 -0
  1202. package/dist/router/ProxiedRouterDeployer.js.map +1 -0
  1203. package/dist/router/RouterApps.d.ts +22 -0
  1204. package/dist/router/RouterApps.d.ts.map +1 -0
  1205. package/dist/router/RouterApps.js +39 -0
  1206. package/dist/router/RouterApps.js.map +1 -0
  1207. package/dist/router/adapters/EvmRouterAdapter.d.ts +30 -0
  1208. package/dist/router/adapters/EvmRouterAdapter.d.ts.map +1 -0
  1209. package/dist/router/adapters/EvmRouterAdapter.js +46 -0
  1210. package/dist/router/adapters/EvmRouterAdapter.js.map +1 -0
  1211. package/dist/router/adapters/SealevelRouterAdapter.d.ts +35 -0
  1212. package/dist/router/adapters/SealevelRouterAdapter.d.ts.map +1 -0
  1213. package/dist/router/adapters/SealevelRouterAdapter.js +56 -0
  1214. package/dist/router/adapters/SealevelRouterAdapter.js.map +1 -0
  1215. package/dist/router/adapters/types.d.ts +17 -0
  1216. package/dist/router/adapters/types.d.ts.map +1 -0
  1217. package/dist/router/adapters/types.js +2 -0
  1218. package/dist/router/adapters/types.js.map +1 -0
  1219. package/dist/router/types.d.ts +139 -0
  1220. package/dist/router/types.d.ts.map +1 -0
  1221. package/dist/router/types.js +62 -0
  1222. package/dist/router/types.js.map +1 -0
  1223. package/dist/router/types.test.d.ts +2 -0
  1224. package/dist/router/types.test.d.ts.map +1 -0
  1225. package/dist/router/types.test.js +108 -0
  1226. package/dist/router/types.test.js.map +1 -0
  1227. package/dist/rpc/evm/EvmEventLogsReader.d.ts +91 -0
  1228. package/dist/rpc/evm/EvmEventLogsReader.d.ts.map +1 -0
  1229. package/dist/rpc/evm/EvmEventLogsReader.hardhat-test.d.ts +2 -0
  1230. package/dist/rpc/evm/EvmEventLogsReader.hardhat-test.d.ts.map +1 -0
  1231. package/dist/rpc/evm/EvmEventLogsReader.hardhat-test.js +640 -0
  1232. package/dist/rpc/evm/EvmEventLogsReader.hardhat-test.js.map +1 -0
  1233. package/dist/rpc/evm/EvmEventLogsReader.js +246 -0
  1234. package/dist/rpc/evm/EvmEventLogsReader.js.map +1 -0
  1235. package/dist/rpc/evm/EvmEventLogsReader.test.d.ts +2 -0
  1236. package/dist/rpc/evm/EvmEventLogsReader.test.d.ts.map +1 -0
  1237. package/dist/rpc/evm/EvmEventLogsReader.test.js +139 -0
  1238. package/dist/rpc/evm/EvmEventLogsReader.test.js.map +1 -0
  1239. package/dist/rpc/evm/types.d.ts +11 -0
  1240. package/dist/rpc/evm/types.d.ts.map +1 -0
  1241. package/dist/rpc/evm/types.js +2 -0
  1242. package/dist/rpc/evm/types.js.map +1 -0
  1243. package/dist/rpc/evm/utils.d.ts +75 -0
  1244. package/dist/rpc/evm/utils.d.ts.map +1 -0
  1245. package/dist/rpc/evm/utils.hardhat-test.d.ts +2 -0
  1246. package/dist/rpc/evm/utils.hardhat-test.d.ts.map +1 -0
  1247. package/dist/rpc/evm/utils.hardhat-test.js +457 -0
  1248. package/dist/rpc/evm/utils.hardhat-test.js.map +1 -0
  1249. package/dist/rpc/evm/utils.js +338 -0
  1250. package/dist/rpc/evm/utils.js.map +1 -0
  1251. package/dist/rpc/evm/utils.test.d.ts +2 -0
  1252. package/dist/rpc/evm/utils.test.d.ts.map +1 -0
  1253. package/dist/rpc/evm/utils.test.js +636 -0
  1254. package/dist/rpc/evm/utils.test.js.map +1 -0
  1255. package/dist/signers/cosmos/cosmjs.d.ts +17 -0
  1256. package/dist/signers/cosmos/cosmjs.d.ts.map +1 -0
  1257. package/dist/signers/cosmos/cosmjs.js +39 -0
  1258. package/dist/signers/cosmos/cosmjs.js.map +1 -0
  1259. package/dist/signers/evm/ethersv5.d.ts +14 -0
  1260. package/dist/signers/evm/ethersv5.d.ts.map +1 -0
  1261. package/dist/signers/evm/ethersv5.js +36 -0
  1262. package/dist/signers/evm/ethersv5.js.map +1 -0
  1263. package/dist/signers/evm/turnkey.d.ts +91 -0
  1264. package/dist/signers/evm/turnkey.d.ts.map +1 -0
  1265. package/dist/signers/evm/turnkey.js +269 -0
  1266. package/dist/signers/evm/turnkey.js.map +1 -0
  1267. package/dist/signers/evm/turnkey.test.d.ts +2 -0
  1268. package/dist/signers/evm/turnkey.test.d.ts.map +1 -0
  1269. package/dist/signers/evm/turnkey.test.js +240 -0
  1270. package/dist/signers/evm/turnkey.test.js.map +1 -0
  1271. package/dist/signers/radix/radix-toolkit.d.ts +16 -0
  1272. package/dist/signers/radix/radix-toolkit.d.ts.map +1 -0
  1273. package/dist/signers/radix/radix-toolkit.js +34 -0
  1274. package/dist/signers/radix/radix-toolkit.js.map +1 -0
  1275. package/dist/signers/signers.d.ts +17 -0
  1276. package/dist/signers/signers.d.ts.map +1 -0
  1277. package/dist/signers/signers.js +26 -0
  1278. package/dist/signers/signers.js.map +1 -0
  1279. package/dist/signers/starknet/starknetjs.d.ts +14 -0
  1280. package/dist/signers/starknet/starknetjs.d.ts.map +1 -0
  1281. package/dist/signers/starknet/starknetjs.js +38 -0
  1282. package/dist/signers/starknet/starknetjs.js.map +1 -0
  1283. package/dist/signers/svm/solana-web3js.d.ts +89 -0
  1284. package/dist/signers/svm/solana-web3js.d.ts.map +1 -0
  1285. package/dist/signers/svm/solana-web3js.js +247 -0
  1286. package/dist/signers/svm/solana-web3js.js.map +1 -0
  1287. package/dist/signers/svm/solana-web3js.test.d.ts +2 -0
  1288. package/dist/signers/svm/solana-web3js.test.d.ts.map +1 -0
  1289. package/dist/signers/svm/solana-web3js.test.js +61 -0
  1290. package/dist/signers/svm/solana-web3js.test.js.map +1 -0
  1291. package/dist/signers/svm/turnkey.d.ts +49 -0
  1292. package/dist/signers/svm/turnkey.d.ts.map +1 -0
  1293. package/dist/signers/svm/turnkey.js +80 -0
  1294. package/dist/signers/svm/turnkey.js.map +1 -0
  1295. package/dist/signers/turnkeyClient.d.ts +72 -0
  1296. package/dist/signers/turnkeyClient.d.ts.map +1 -0
  1297. package/dist/signers/turnkeyClient.js +121 -0
  1298. package/dist/signers/turnkeyClient.js.map +1 -0
  1299. package/dist/signers/types.d.ts +8 -0
  1300. package/dist/signers/types.d.ts.map +1 -0
  1301. package/dist/signers/types.js +2 -0
  1302. package/dist/signers/types.js.map +1 -0
  1303. package/dist/test/contractDouble.d.ts +8 -0
  1304. package/dist/test/contractDouble.d.ts.map +1 -0
  1305. package/dist/test/contractDouble.js +12 -0
  1306. package/dist/test/contractDouble.js.map +1 -0
  1307. package/dist/test/contractStubs.d.ts +8 -0
  1308. package/dist/test/contractStubs.d.ts.map +1 -0
  1309. package/dist/test/contractStubs.js +15 -0
  1310. package/dist/test/contractStubs.js.map +1 -0
  1311. package/dist/test/errors.d.ts +34 -0
  1312. package/dist/test/errors.d.ts.map +1 -0
  1313. package/dist/test/errors.js +46 -0
  1314. package/dist/test/errors.js.map +1 -0
  1315. package/dist/test/fixtures/warp-route-replay/record.d.ts +2 -0
  1316. package/dist/test/fixtures/warp-route-replay/record.d.ts.map +1 -0
  1317. package/dist/test/fixtures/warp-route-replay/record.js +32 -0
  1318. package/dist/test/fixtures/warp-route-replay/record.js.map +1 -0
  1319. package/dist/test/multiProviderStubs.d.ts +9 -0
  1320. package/dist/test/multiProviderStubs.d.ts.map +1 -0
  1321. package/dist/test/multiProviderStubs.js +31 -0
  1322. package/dist/test/multiProviderStubs.js.map +1 -0
  1323. package/dist/test/replayRpc.d.ts +82 -0
  1324. package/dist/test/replayRpc.d.ts.map +1 -0
  1325. package/dist/test/replayRpc.js +331 -0
  1326. package/dist/test/replayRpc.js.map +1 -0
  1327. package/dist/test/replayScenarios.d.ts +19 -0
  1328. package/dist/test/replayScenarios.d.ts.map +1 -0
  1329. package/dist/test/replayScenarios.js +89 -0
  1330. package/dist/test/replayScenarios.js.map +1 -0
  1331. package/dist/test/testUtils.d.ts +32 -0
  1332. package/dist/test/testUtils.d.ts.map +1 -0
  1333. package/dist/test/testUtils.js +408 -0
  1334. package/dist/test/testUtils.js.map +1 -0
  1335. package/dist/test/testUtils.test.d.ts +2 -0
  1336. package/dist/test/testUtils.test.d.ts.map +1 -0
  1337. package/dist/test/testUtils.test.js +28 -0
  1338. package/dist/test/testUtils.test.js.map +1 -0
  1339. package/dist/timelock/evm/EvmTimelockDeployer.d.ts +12 -0
  1340. package/dist/timelock/evm/EvmTimelockDeployer.d.ts.map +1 -0
  1341. package/dist/timelock/evm/EvmTimelockDeployer.hardhat-test.d.ts +2 -0
  1342. package/dist/timelock/evm/EvmTimelockDeployer.hardhat-test.d.ts.map +1 -0
  1343. package/dist/timelock/evm/EvmTimelockDeployer.hardhat-test.js +210 -0
  1344. package/dist/timelock/evm/EvmTimelockDeployer.hardhat-test.js.map +1 -0
  1345. package/dist/timelock/evm/EvmTimelockDeployer.js +68 -0
  1346. package/dist/timelock/evm/EvmTimelockDeployer.js.map +1 -0
  1347. package/dist/timelock/evm/EvmTimelockReader.d.ts +32 -0
  1348. package/dist/timelock/evm/EvmTimelockReader.d.ts.map +1 -0
  1349. package/dist/timelock/evm/EvmTimelockReader.hardhat-test.d.ts +2 -0
  1350. package/dist/timelock/evm/EvmTimelockReader.hardhat-test.d.ts.map +1 -0
  1351. package/dist/timelock/evm/EvmTimelockReader.hardhat-test.js +889 -0
  1352. package/dist/timelock/evm/EvmTimelockReader.hardhat-test.js.map +1 -0
  1353. package/dist/timelock/evm/EvmTimelockReader.js +171 -0
  1354. package/dist/timelock/evm/EvmTimelockReader.js.map +1 -0
  1355. package/dist/timelock/evm/constants.d.ts +6 -0
  1356. package/dist/timelock/evm/constants.d.ts.map +1 -0
  1357. package/dist/timelock/evm/constants.js +7 -0
  1358. package/dist/timelock/evm/constants.js.map +1 -0
  1359. package/dist/timelock/evm/contracts.d.ts +6 -0
  1360. package/dist/timelock/evm/contracts.d.ts.map +1 -0
  1361. package/dist/timelock/evm/contracts.js +5 -0
  1362. package/dist/timelock/evm/contracts.js.map +1 -0
  1363. package/dist/timelock/evm/errors.d.ts +2 -0
  1364. package/dist/timelock/evm/errors.d.ts.map +1 -0
  1365. package/dist/timelock/evm/errors.js +19 -0
  1366. package/dist/timelock/evm/errors.js.map +1 -0
  1367. package/dist/timelock/evm/errors.test.d.ts +2 -0
  1368. package/dist/timelock/evm/errors.test.d.ts.map +1 -0
  1369. package/dist/timelock/evm/errors.test.js +33 -0
  1370. package/dist/timelock/evm/errors.test.js.map +1 -0
  1371. package/dist/timelock/evm/utils.d.ts +4 -0
  1372. package/dist/timelock/evm/utils.d.ts.map +1 -0
  1373. package/dist/timelock/evm/utils.js +11 -0
  1374. package/dist/timelock/evm/utils.js.map +1 -0
  1375. package/dist/timelock/types.d.ts +29 -0
  1376. package/dist/timelock/types.d.ts.map +1 -0
  1377. package/dist/timelock/types.js +11 -0
  1378. package/dist/timelock/types.js.map +1 -0
  1379. package/dist/token/EvmWarpModule.d.ts +301 -0
  1380. package/dist/token/EvmWarpModule.d.ts.map +1 -0
  1381. package/dist/token/EvmWarpModule.hardhat-test.d.ts +2 -0
  1382. package/dist/token/EvmWarpModule.hardhat-test.d.ts.map +1 -0
  1383. package/dist/token/EvmWarpModule.hardhat-test.js +3143 -0
  1384. package/dist/token/EvmWarpModule.hardhat-test.js.map +1 -0
  1385. package/dist/token/EvmWarpModule.js +1800 -0
  1386. package/dist/token/EvmWarpModule.js.map +1 -0
  1387. package/dist/token/EvmWarpModule.test.d.ts +2 -0
  1388. package/dist/token/EvmWarpModule.test.d.ts.map +1 -0
  1389. package/dist/token/EvmWarpModule.test.js +471 -0
  1390. package/dist/token/EvmWarpModule.test.js.map +1 -0
  1391. package/dist/token/EvmWarpRouteReader.d.ts +135 -0
  1392. package/dist/token/EvmWarpRouteReader.d.ts.map +1 -0
  1393. package/dist/token/EvmWarpRouteReader.hardhat-test.d.ts +2 -0
  1394. package/dist/token/EvmWarpRouteReader.hardhat-test.d.ts.map +1 -0
  1395. package/dist/token/EvmWarpRouteReader.hardhat-test.js +1357 -0
  1396. package/dist/token/EvmWarpRouteReader.hardhat-test.js.map +1 -0
  1397. package/dist/token/EvmWarpRouteReader.js +1292 -0
  1398. package/dist/token/EvmWarpRouteReader.js.map +1 -0
  1399. package/dist/token/EvmWarpRouteReader.replay.test.d.ts +2 -0
  1400. package/dist/token/EvmWarpRouteReader.replay.test.d.ts.map +1 -0
  1401. package/dist/token/EvmWarpRouteReader.replay.test.js +392 -0
  1402. package/dist/token/EvmWarpRouteReader.replay.test.js.map +1 -0
  1403. package/dist/token/EvmWarpRouteReader.test.d.ts +2 -0
  1404. package/dist/token/EvmWarpRouteReader.test.d.ts.map +1 -0
  1405. package/dist/token/EvmWarpRouteReader.test.js +783 -0
  1406. package/dist/token/EvmWarpRouteReader.test.js.map +1 -0
  1407. package/dist/token/EvmXERC20Module.d.ts +105 -0
  1408. package/dist/token/EvmXERC20Module.d.ts.map +1 -0
  1409. package/dist/token/EvmXERC20Module.js +277 -0
  1410. package/dist/token/EvmXERC20Module.js.map +1 -0
  1411. package/dist/token/EvmXERC20Module.test.d.ts +2 -0
  1412. package/dist/token/EvmXERC20Module.test.d.ts.map +1 -0
  1413. package/dist/token/EvmXERC20Module.test.js +464 -0
  1414. package/dist/token/EvmXERC20Module.test.js.map +1 -0
  1415. package/dist/token/EvmXERC20Reader.d.ts +58 -0
  1416. package/dist/token/EvmXERC20Reader.d.ts.map +1 -0
  1417. package/dist/token/EvmXERC20Reader.js +122 -0
  1418. package/dist/token/EvmXERC20Reader.js.map +1 -0
  1419. package/dist/token/EvmXERC20Reader.test.d.ts +2 -0
  1420. package/dist/token/EvmXERC20Reader.test.d.ts.map +1 -0
  1421. package/dist/token/EvmXERC20Reader.test.js +333 -0
  1422. package/dist/token/EvmXERC20Reader.test.js.map +1 -0
  1423. package/dist/token/IToken.d.ts +21 -0
  1424. package/dist/token/IToken.d.ts.map +1 -0
  1425. package/dist/token/IToken.js +2 -0
  1426. package/dist/token/IToken.js.map +1 -0
  1427. package/dist/token/ITokenMetadata.d.ts +90 -0
  1428. package/dist/token/ITokenMetadata.d.ts.map +1 -0
  1429. package/dist/token/ITokenMetadata.js +53 -0
  1430. package/dist/token/ITokenMetadata.js.map +1 -0
  1431. package/dist/token/Token.d.ts +47 -0
  1432. package/dist/token/Token.d.ts.map +1 -0
  1433. package/dist/token/Token.js +231 -0
  1434. package/dist/token/Token.js.map +1 -0
  1435. package/dist/token/Token.test.d.ts +2 -0
  1436. package/dist/token/Token.test.d.ts.map +1 -0
  1437. package/dist/token/Token.test.js +579 -0
  1438. package/dist/token/Token.test.js.map +1 -0
  1439. package/dist/token/TokenAmount.d.ts +12 -0
  1440. package/dist/token/TokenAmount.d.ts.map +1 -0
  1441. package/dist/token/TokenAmount.js +22 -0
  1442. package/dist/token/TokenAmount.js.map +1 -0
  1443. package/dist/token/TokenAmount.test.d.ts +2 -0
  1444. package/dist/token/TokenAmount.test.d.ts.map +1 -0
  1445. package/dist/token/TokenAmount.test.js +38 -0
  1446. package/dist/token/TokenAmount.test.js.map +1 -0
  1447. package/dist/token/TokenConnection.d.ts +55 -0
  1448. package/dist/token/TokenConnection.d.ts.map +1 -0
  1449. package/dist/token/TokenConnection.js +44 -0
  1450. package/dist/token/TokenConnection.js.map +1 -0
  1451. package/dist/token/TokenConnection.test.d.ts +2 -0
  1452. package/dist/token/TokenConnection.test.d.ts.map +1 -0
  1453. package/dist/token/TokenConnection.test.js +17 -0
  1454. package/dist/token/TokenConnection.test.js.map +1 -0
  1455. package/dist/token/TokenMetadata.d.ts +43 -0
  1456. package/dist/token/TokenMetadata.d.ts.map +1 -0
  1457. package/dist/token/TokenMetadata.js +121 -0
  1458. package/dist/token/TokenMetadata.js.map +1 -0
  1459. package/dist/token/TokenMetadataMap.d.ts +15 -0
  1460. package/dist/token/TokenMetadataMap.d.ts.map +1 -0
  1461. package/dist/token/TokenMetadataMap.js +56 -0
  1462. package/dist/token/TokenMetadataMap.js.map +1 -0
  1463. package/dist/token/TokenStandard.d.ts +108 -0
  1464. package/dist/token/TokenStandard.d.ts.map +1 -0
  1465. package/dist/token/TokenStandard.js +470 -0
  1466. package/dist/token/TokenStandard.js.map +1 -0
  1467. package/dist/token/adapters/AleoTokenAdapter.d.ts +60 -0
  1468. package/dist/token/adapters/AleoTokenAdapter.d.ts.map +1 -0
  1469. package/dist/token/adapters/AleoTokenAdapter.js +190 -0
  1470. package/dist/token/adapters/AleoTokenAdapter.js.map +1 -0
  1471. package/dist/token/adapters/CosmWasmTokenAdapter.d.ts +114 -0
  1472. package/dist/token/adapters/CosmWasmTokenAdapter.d.ts.map +1 -0
  1473. package/dist/token/adapters/CosmWasmTokenAdapter.js +332 -0
  1474. package/dist/token/adapters/CosmWasmTokenAdapter.js.map +1 -0
  1475. package/dist/token/adapters/CosmWasmTokenAdapter.test.d.ts +14 -0
  1476. package/dist/token/adapters/CosmWasmTokenAdapter.test.d.ts.map +1 -0
  1477. package/dist/token/adapters/CosmWasmTokenAdapter.test.js +283 -0
  1478. package/dist/token/adapters/CosmWasmTokenAdapter.test.js.map +1 -0
  1479. package/dist/token/adapters/CosmosModuleTokenAdapter.d.ts +54 -0
  1480. package/dist/token/adapters/CosmosModuleTokenAdapter.d.ts.map +1 -0
  1481. package/dist/token/adapters/CosmosModuleTokenAdapter.js +189 -0
  1482. package/dist/token/adapters/CosmosModuleTokenAdapter.js.map +1 -0
  1483. package/dist/token/adapters/CosmosTokenAdapter.d.ts +74 -0
  1484. package/dist/token/adapters/CosmosTokenAdapter.d.ts.map +1 -0
  1485. package/dist/token/adapters/CosmosTokenAdapter.js +192 -0
  1486. package/dist/token/adapters/CosmosTokenAdapter.js.map +1 -0
  1487. package/dist/token/adapters/EvmCrossCollateralAdapter.d.ts +39 -0
  1488. package/dist/token/adapters/EvmCrossCollateralAdapter.d.ts.map +1 -0
  1489. package/dist/token/adapters/EvmCrossCollateralAdapter.js +85 -0
  1490. package/dist/token/adapters/EvmCrossCollateralAdapter.js.map +1 -0
  1491. package/dist/token/adapters/EvmCrossCollateralAdapter.test.d.ts +2 -0
  1492. package/dist/token/adapters/EvmCrossCollateralAdapter.test.d.ts.map +1 -0
  1493. package/dist/token/adapters/EvmCrossCollateralAdapter.test.js +155 -0
  1494. package/dist/token/adapters/EvmCrossCollateralAdapter.test.js.map +1 -0
  1495. package/dist/token/adapters/EvmHypSyntheticAdapter.test.d.ts +2 -0
  1496. package/dist/token/adapters/EvmHypSyntheticAdapter.test.d.ts.map +1 -0
  1497. package/dist/token/adapters/EvmHypSyntheticAdapter.test.js +96 -0
  1498. package/dist/token/adapters/EvmHypSyntheticAdapter.test.js.map +1 -0
  1499. package/dist/token/adapters/EvmTokenAdapter.d.ts +303 -0
  1500. package/dist/token/adapters/EvmTokenAdapter.d.ts.map +1 -0
  1501. package/dist/token/adapters/EvmTokenAdapter.js +899 -0
  1502. package/dist/token/adapters/EvmTokenAdapter.js.map +1 -0
  1503. package/dist/token/adapters/EvmTokenAdapter.seismic.test.d.ts +2 -0
  1504. package/dist/token/adapters/EvmTokenAdapter.seismic.test.d.ts.map +1 -0
  1505. package/dist/token/adapters/EvmTokenAdapter.seismic.test.js +125 -0
  1506. package/dist/token/adapters/EvmTokenAdapter.seismic.test.js.map +1 -0
  1507. package/dist/token/adapters/EvmTokenAdapter.test.d.ts +2 -0
  1508. package/dist/token/adapters/EvmTokenAdapter.test.d.ts.map +1 -0
  1509. package/dist/token/adapters/EvmTokenAdapter.test.js +73 -0
  1510. package/dist/token/adapters/EvmTokenAdapter.test.js.map +1 -0
  1511. package/dist/token/adapters/ITokenAdapter.d.ts +129 -0
  1512. package/dist/token/adapters/ITokenAdapter.d.ts.map +1 -0
  1513. package/dist/token/adapters/ITokenAdapter.js +15 -0
  1514. package/dist/token/adapters/ITokenAdapter.js.map +1 -0
  1515. package/dist/token/adapters/M0PortalLiteTokenAdapter.d.ts +22 -0
  1516. package/dist/token/adapters/M0PortalLiteTokenAdapter.d.ts.map +1 -0
  1517. package/dist/token/adapters/M0PortalLiteTokenAdapter.js +90 -0
  1518. package/dist/token/adapters/M0PortalLiteTokenAdapter.js.map +1 -0
  1519. package/dist/token/adapters/M0PortalTokenAdapter.d.ts +22 -0
  1520. package/dist/token/adapters/M0PortalTokenAdapter.d.ts.map +1 -0
  1521. package/dist/token/adapters/M0PortalTokenAdapter.js +95 -0
  1522. package/dist/token/adapters/M0PortalTokenAdapter.js.map +1 -0
  1523. package/dist/token/adapters/M0PortalTokenAdapter.test.d.ts +2 -0
  1524. package/dist/token/adapters/M0PortalTokenAdapter.test.d.ts.map +1 -0
  1525. package/dist/token/adapters/M0PortalTokenAdapter.test.js +94 -0
  1526. package/dist/token/adapters/M0PortalTokenAdapter.test.js.map +1 -0
  1527. package/dist/token/adapters/RadixTokenAdapter.d.ts +55 -0
  1528. package/dist/token/adapters/RadixTokenAdapter.d.ts.map +1 -0
  1529. package/dist/token/adapters/RadixTokenAdapter.js +190 -0
  1530. package/dist/token/adapters/RadixTokenAdapter.js.map +1 -0
  1531. package/dist/token/adapters/SealevelCrossCollateralAdapter.d.ts +64 -0
  1532. package/dist/token/adapters/SealevelCrossCollateralAdapter.d.ts.map +1 -0
  1533. package/dist/token/adapters/SealevelCrossCollateralAdapter.js +474 -0
  1534. package/dist/token/adapters/SealevelCrossCollateralAdapter.js.map +1 -0
  1535. package/dist/token/adapters/SealevelCrossCollateralAdapter.test.d.ts +2 -0
  1536. package/dist/token/adapters/SealevelCrossCollateralAdapter.test.d.ts.map +1 -0
  1537. package/dist/token/adapters/SealevelCrossCollateralAdapter.test.js +138 -0
  1538. package/dist/token/adapters/SealevelCrossCollateralAdapter.test.js.map +1 -0
  1539. package/dist/token/adapters/SealevelHypTokenAdapter.test.d.ts +2 -0
  1540. package/dist/token/adapters/SealevelHypTokenAdapter.test.d.ts.map +1 -0
  1541. package/dist/token/adapters/SealevelHypTokenAdapter.test.js +136 -0
  1542. package/dist/token/adapters/SealevelHypTokenAdapter.test.js.map +1 -0
  1543. package/dist/token/adapters/SealevelTokenAdapter.d.ts +288 -0
  1544. package/dist/token/adapters/SealevelTokenAdapter.d.ts.map +1 -0
  1545. package/dist/token/adapters/SealevelTokenAdapter.js +1019 -0
  1546. package/dist/token/adapters/SealevelTokenAdapter.js.map +1 -0
  1547. package/dist/token/adapters/StarknetTokenAdapter.d.ts +107 -0
  1548. package/dist/token/adapters/StarknetTokenAdapter.d.ts.map +1 -0
  1549. package/dist/token/adapters/StarknetTokenAdapter.js +273 -0
  1550. package/dist/token/adapters/StarknetTokenAdapter.js.map +1 -0
  1551. package/dist/token/adapters/aleoHyp.d.ts +7 -0
  1552. package/dist/token/adapters/aleoHyp.d.ts.map +1 -0
  1553. package/dist/token/adapters/aleoHyp.js +26 -0
  1554. package/dist/token/adapters/aleoHyp.js.map +1 -0
  1555. package/dist/token/adapters/cosmosHyp.d.ts +7 -0
  1556. package/dist/token/adapters/cosmosHyp.d.ts.map +1 -0
  1557. package/dist/token/adapters/cosmosHyp.js +40 -0
  1558. package/dist/token/adapters/cosmosHyp.js.map +1 -0
  1559. package/dist/token/adapters/evmHyp.d.ts +7 -0
  1560. package/dist/token/adapters/evmHyp.d.ts.map +1 -0
  1561. package/dist/token/adapters/evmHyp.js +21 -0
  1562. package/dist/token/adapters/evmHyp.js.map +1 -0
  1563. package/dist/token/adapters/evmLikeHyp.d.ts +20 -0
  1564. package/dist/token/adapters/evmLikeHyp.d.ts.map +1 -0
  1565. package/dist/token/adapters/evmLikeHyp.js +67 -0
  1566. package/dist/token/adapters/evmLikeHyp.js.map +1 -0
  1567. package/dist/token/adapters/hypTokenAdapterUtils.d.ts +15 -0
  1568. package/dist/token/adapters/hypTokenAdapterUtils.d.ts.map +1 -0
  1569. package/dist/token/adapters/hypTokenAdapterUtils.js +9 -0
  1570. package/dist/token/adapters/hypTokenAdapterUtils.js.map +1 -0
  1571. package/dist/token/adapters/radixHyp.d.ts +7 -0
  1572. package/dist/token/adapters/radixHyp.d.ts.map +1 -0
  1573. package/dist/token/adapters/radixHyp.js +22 -0
  1574. package/dist/token/adapters/radixHyp.js.map +1 -0
  1575. package/dist/token/adapters/sealevelFee.d.ts +206 -0
  1576. package/dist/token/adapters/sealevelFee.d.ts.map +1 -0
  1577. package/dist/token/adapters/sealevelFee.js +515 -0
  1578. package/dist/token/adapters/sealevelFee.js.map +1 -0
  1579. package/dist/token/adapters/sealevelFee.test.d.ts +2 -0
  1580. package/dist/token/adapters/sealevelFee.test.d.ts.map +1 -0
  1581. package/dist/token/adapters/sealevelFee.test.js +246 -0
  1582. package/dist/token/adapters/sealevelFee.test.js.map +1 -0
  1583. package/dist/token/adapters/sealevelHyp.d.ts +8 -0
  1584. package/dist/token/adapters/sealevelHyp.d.ts.map +1 -0
  1585. package/dist/token/adapters/sealevelHyp.js +52 -0
  1586. package/dist/token/adapters/sealevelHyp.js.map +1 -0
  1587. package/dist/token/adapters/serialization.d.ts +234 -0
  1588. package/dist/token/adapters/serialization.d.ts.map +1 -0
  1589. package/dist/token/adapters/serialization.js +580 -0
  1590. package/dist/token/adapters/serialization.js.map +1 -0
  1591. package/dist/token/adapters/serialization.test.d.ts +2 -0
  1592. package/dist/token/adapters/serialization.test.d.ts.map +1 -0
  1593. package/dist/token/adapters/serialization.test.js +55 -0
  1594. package/dist/token/adapters/serialization.test.js.map +1 -0
  1595. package/dist/token/adapters/starknetHyp.d.ts +7 -0
  1596. package/dist/token/adapters/starknetHyp.d.ts.map +1 -0
  1597. package/dist/token/adapters/starknetHyp.js +35 -0
  1598. package/dist/token/adapters/starknetHyp.js.map +1 -0
  1599. package/dist/token/adapters/tronHyp.d.ts +7 -0
  1600. package/dist/token/adapters/tronHyp.d.ts.map +1 -0
  1601. package/dist/token/adapters/tronHyp.js +21 -0
  1602. package/dist/token/adapters/tronHyp.js.map +1 -0
  1603. package/dist/token/adapters/utils.d.ts +7 -0
  1604. package/dist/token/adapters/utils.d.ts.map +1 -0
  1605. package/dist/token/adapters/utils.js +4 -0
  1606. package/dist/token/adapters/utils.js.map +1 -0
  1607. package/dist/token/cctp.d.ts +10 -0
  1608. package/dist/token/cctp.d.ts.map +1 -0
  1609. package/dist/token/cctp.js +13 -0
  1610. package/dist/token/cctp.js.map +1 -0
  1611. package/dist/token/cctp.test.d.ts +2 -0
  1612. package/dist/token/cctp.test.d.ts.map +1 -0
  1613. package/dist/token/cctp.test.js +48 -0
  1614. package/dist/token/cctp.test.js.map +1 -0
  1615. package/dist/token/config.d.ts +61 -0
  1616. package/dist/token/config.d.ts.map +1 -0
  1617. package/dist/token/config.js +79 -0
  1618. package/dist/token/config.js.map +1 -0
  1619. package/dist/token/configUtils.d.ts +106 -0
  1620. package/dist/token/configUtils.d.ts.map +1 -0
  1621. package/dist/token/configUtils.js +735 -0
  1622. package/dist/token/configUtils.js.map +1 -0
  1623. package/dist/token/configUtils.test.d.ts +2 -0
  1624. package/dist/token/configUtils.test.d.ts.map +1 -0
  1625. package/dist/token/configUtils.test.js +1313 -0
  1626. package/dist/token/configUtils.test.js.map +1 -0
  1627. package/dist/token/contracts.d.ts +64 -0
  1628. package/dist/token/contracts.d.ts.map +1 -0
  1629. package/dist/token/contracts.js +68 -0
  1630. package/dist/token/contracts.js.map +1 -0
  1631. package/dist/token/deploy.d.ts +56 -0
  1632. package/dist/token/deploy.d.ts.map +1 -0
  1633. package/dist/token/deploy.hardhat-test.d.ts +2 -0
  1634. package/dist/token/deploy.hardhat-test.d.ts.map +1 -0
  1635. package/dist/token/deploy.hardhat-test.js +1397 -0
  1636. package/dist/token/deploy.hardhat-test.js.map +1 -0
  1637. package/dist/token/deploy.js +698 -0
  1638. package/dist/token/deploy.js.map +1 -0
  1639. package/dist/token/nativeTokenMetadata.d.ts +4 -0
  1640. package/dist/token/nativeTokenMetadata.d.ts.map +1 -0
  1641. package/dist/token/nativeTokenMetadata.js +50 -0
  1642. package/dist/token/nativeTokenMetadata.js.map +1 -0
  1643. package/dist/token/sealevel/metadata.d.ts +33 -0
  1644. package/dist/token/sealevel/metadata.d.ts.map +1 -0
  1645. package/dist/token/sealevel/metadata.js +90 -0
  1646. package/dist/token/sealevel/metadata.js.map +1 -0
  1647. package/dist/token/tokenMetadataUtils.d.ts +7 -0
  1648. package/dist/token/tokenMetadataUtils.d.ts.map +1 -0
  1649. package/dist/token/tokenMetadataUtils.js +109 -0
  1650. package/dist/token/tokenMetadataUtils.js.map +1 -0
  1651. package/dist/token/types.d.ts +9384 -0
  1652. package/dist/token/types.d.ts.map +1 -0
  1653. package/dist/token/types.js +613 -0
  1654. package/dist/token/types.js.map +1 -0
  1655. package/dist/token/types.test.d.ts +2 -0
  1656. package/dist/token/types.test.d.ts.map +1 -0
  1657. package/dist/token/types.test.js +529 -0
  1658. package/dist/token/types.test.js.map +1 -0
  1659. package/dist/token/warpCheck.d.ts +75 -0
  1660. package/dist/token/warpCheck.d.ts.map +1 -0
  1661. package/dist/token/warpCheck.js +1003 -0
  1662. package/dist/token/warpCheck.js.map +1 -0
  1663. package/dist/token/warpCheck.test.d.ts +2 -0
  1664. package/dist/token/warpCheck.test.d.ts.map +1 -0
  1665. package/dist/token/warpCheck.test.js +947 -0
  1666. package/dist/token/warpCheck.test.js.map +1 -0
  1667. package/dist/token/xerc20-abi.d.ts +58 -0
  1668. package/dist/token/xerc20-abi.d.ts.map +1 -0
  1669. package/dist/token/xerc20-abi.js +77 -0
  1670. package/dist/token/xerc20-abi.js.map +1 -0
  1671. package/dist/token/xerc20-limits.d.ts +63 -0
  1672. package/dist/token/xerc20-limits.d.ts.map +1 -0
  1673. package/dist/token/xerc20-limits.js +80 -0
  1674. package/dist/token/xerc20-limits.js.map +1 -0
  1675. package/dist/token/xerc20.d.ts +93 -0
  1676. package/dist/token/xerc20.d.ts.map +1 -0
  1677. package/dist/token/xerc20.js +355 -0
  1678. package/dist/token/xerc20.js.map +1 -0
  1679. package/dist/token/xerc20.test.d.ts +2 -0
  1680. package/dist/token/xerc20.test.d.ts.map +1 -0
  1681. package/dist/token/xerc20.test.js +728 -0
  1682. package/dist/token/xerc20.test.js.map +1 -0
  1683. package/dist/types.d.ts +47 -0
  1684. package/dist/types.d.ts.map +1 -0
  1685. package/dist/types.js +18 -0
  1686. package/dist/types.js.map +1 -0
  1687. package/dist/utils/HyperlaneReader.d.ts +17 -0
  1688. package/dist/utils/HyperlaneReader.d.ts.map +1 -0
  1689. package/dist/utils/HyperlaneReader.js +22 -0
  1690. package/dist/utils/HyperlaneReader.js.map +1 -0
  1691. package/dist/utils/MultiGeneric.d.ts +26 -0
  1692. package/dist/utils/MultiGeneric.d.ts.map +1 -0
  1693. package/dist/utils/MultiGeneric.js +55 -0
  1694. package/dist/utils/MultiGeneric.js.map +1 -0
  1695. package/dist/utils/contract.d.ts +60 -0
  1696. package/dist/utils/contract.d.ts.map +1 -0
  1697. package/dist/utils/contract.js +231 -0
  1698. package/dist/utils/contract.js.map +1 -0
  1699. package/dist/utils/contract.test.d.ts +2 -0
  1700. package/dist/utils/contract.test.d.ts.map +1 -0
  1701. package/dist/utils/contract.test.js +551 -0
  1702. package/dist/utils/contract.test.js.map +1 -0
  1703. package/dist/utils/contract.transport.test.d.ts +2 -0
  1704. package/dist/utils/contract.transport.test.d.ts.map +1 -0
  1705. package/dist/utils/contract.transport.test.js +145 -0
  1706. package/dist/utils/contract.transport.test.js.map +1 -0
  1707. package/dist/utils/cosmos.d.ts +391 -0
  1708. package/dist/utils/cosmos.d.ts.map +1 -0
  1709. package/dist/utils/cosmos.js +424 -0
  1710. package/dist/utils/cosmos.js.map +1 -0
  1711. package/dist/utils/decimals.d.ts +53 -0
  1712. package/dist/utils/decimals.d.ts.map +1 -0
  1713. package/dist/utils/decimals.js +131 -0
  1714. package/dist/utils/decimals.js.map +1 -0
  1715. package/dist/utils/decimals.test.d.ts +2 -0
  1716. package/dist/utils/decimals.test.d.ts.map +1 -0
  1717. package/dist/utils/decimals.test.js +526 -0
  1718. package/dist/utils/decimals.test.js.map +1 -0
  1719. package/dist/utils/filter.d.ts +3 -0
  1720. package/dist/utils/filter.d.ts.map +1 -0
  1721. package/dist/utils/filter.js +9 -0
  1722. package/dist/utils/filter.js.map +1 -0
  1723. package/dist/utils/fork.d.ts +55 -0
  1724. package/dist/utils/fork.d.ts.map +1 -0
  1725. package/dist/utils/fork.js +119 -0
  1726. package/dist/utils/fork.js.map +1 -0
  1727. package/dist/utils/gas.d.ts +30 -0
  1728. package/dist/utils/gas.d.ts.map +1 -0
  1729. package/dist/utils/gas.js +35 -0
  1730. package/dist/utils/gas.js.map +1 -0
  1731. package/dist/utils/gnosisSafe.d.ts +21 -0
  1732. package/dist/utils/gnosisSafe.d.ts.map +1 -0
  1733. package/dist/utils/gnosisSafe.js +193 -0
  1734. package/dist/utils/gnosisSafe.js.map +1 -0
  1735. package/dist/utils/gnosisSafe.test.d.ts +2 -0
  1736. package/dist/utils/gnosisSafe.test.d.ts.map +1 -0
  1737. package/dist/utils/gnosisSafe.test.js +78 -0
  1738. package/dist/utils/gnosisSafe.test.js.map +1 -0
  1739. package/dist/utils/ism.d.ts +193 -0
  1740. package/dist/utils/ism.d.ts.map +1 -0
  1741. package/dist/utils/ism.js +611 -0
  1742. package/dist/utils/ism.js.map +1 -0
  1743. package/dist/utils/ism.test.d.ts +2 -0
  1744. package/dist/utils/ism.test.d.ts.map +1 -0
  1745. package/dist/utils/ism.test.js +445 -0
  1746. package/dist/utils/ism.test.js.map +1 -0
  1747. package/dist/utils/logUtils.d.ts +4 -0
  1748. package/dist/utils/logUtils.d.ts.map +1 -0
  1749. package/dist/utils/logUtils.js +13 -0
  1750. package/dist/utils/logUtils.js.map +1 -0
  1751. package/dist/utils/numbers.d.ts +11 -0
  1752. package/dist/utils/numbers.d.ts.map +1 -0
  1753. package/dist/utils/numbers.js +36 -0
  1754. package/dist/utils/numbers.js.map +1 -0
  1755. package/dist/utils/numbers.test.d.ts +2 -0
  1756. package/dist/utils/numbers.test.d.ts.map +1 -0
  1757. package/dist/utils/numbers.test.js +80 -0
  1758. package/dist/utils/numbers.test.js.map +1 -0
  1759. package/dist/utils/provider.d.ts +6 -0
  1760. package/dist/utils/provider.d.ts.map +1 -0
  1761. package/dist/utils/provider.js +36 -0
  1762. package/dist/utils/provider.js.map +1 -0
  1763. package/dist/utils/schemas.d.ts +4 -0
  1764. package/dist/utils/schemas.d.ts.map +1 -0
  1765. package/dist/utils/schemas.js +15 -0
  1766. package/dist/utils/schemas.js.map +1 -0
  1767. package/dist/utils/schemas.test.d.ts +2 -0
  1768. package/dist/utils/schemas.test.d.ts.map +1 -0
  1769. package/dist/utils/schemas.test.js +33 -0
  1770. package/dist/utils/schemas.test.js.map +1 -0
  1771. package/dist/utils/sealevelSerialization.d.ts +50 -0
  1772. package/dist/utils/sealevelSerialization.d.ts.map +1 -0
  1773. package/dist/utils/sealevelSerialization.js +85 -0
  1774. package/dist/utils/sealevelSerialization.js.map +1 -0
  1775. package/dist/utils/starknet.d.ts +35 -0
  1776. package/dist/utils/starknet.d.ts.map +1 -0
  1777. package/dist/utils/starknet.js +89 -0
  1778. package/dist/utils/starknet.js.map +1 -0
  1779. package/dist/utils/transactions.d.ts +12 -0
  1780. package/dist/utils/transactions.d.ts.map +1 -0
  1781. package/dist/utils/transactions.js +17 -0
  1782. package/dist/utils/transactions.js.map +1 -0
  1783. package/dist/utils/validator.d.ts +5 -0
  1784. package/dist/utils/validator.d.ts.map +1 -0
  1785. package/dist/utils/validator.js +18 -0
  1786. package/dist/utils/validator.js.map +1 -0
  1787. package/dist/utils/zksync.d.ts +8 -0
  1788. package/dist/utils/zksync.d.ts.map +1 -0
  1789. package/dist/utils/zksync.js +24 -0
  1790. package/dist/utils/zksync.js.map +1 -0
  1791. package/dist/warp/WarpCore.d.ts +286 -0
  1792. package/dist/warp/WarpCore.d.ts.map +1 -0
  1793. package/dist/warp/WarpCore.js +1144 -0
  1794. package/dist/warp/WarpCore.js.map +1 -0
  1795. package/dist/warp/WarpCore.test.d.ts +2 -0
  1796. package/dist/warp/WarpCore.test.d.ts.map +1 -0
  1797. package/dist/warp/WarpCore.test.js +1823 -0
  1798. package/dist/warp/WarpCore.test.js.map +1 -0
  1799. package/dist/warp/read.d.ts +19 -0
  1800. package/dist/warp/read.d.ts.map +1 -0
  1801. package/dist/warp/read.js +34 -0
  1802. package/dist/warp/read.js.map +1 -0
  1803. package/dist/warp/read.test.d.ts +2 -0
  1804. package/dist/warp/read.test.d.ts.map +1 -0
  1805. package/dist/warp/read.test.js +56 -0
  1806. package/dist/warp/read.test.js.map +1 -0
  1807. package/dist/warp/resolveDestinationToken.d.ts +23 -0
  1808. package/dist/warp/resolveDestinationToken.d.ts.map +1 -0
  1809. package/dist/warp/resolveDestinationToken.js +31 -0
  1810. package/dist/warp/resolveDestinationToken.js.map +1 -0
  1811. package/dist/warp/types.d.ts +122 -0
  1812. package/dist/warp/types.d.ts.map +1 -0
  1813. package/dist/warp/types.js +52 -0
  1814. package/dist/warp/types.js.map +1 -0
  1815. package/dist/warp/types.test.d.ts +2 -0
  1816. package/dist/warp/types.test.d.ts.map +1 -0
  1817. package/dist/warp/types.test.js +81 -0
  1818. package/dist/warp/types.test.js.map +1 -0
  1819. package/dist/zksync/ZKSyncDeployer.d.ts +59 -0
  1820. package/dist/zksync/ZKSyncDeployer.d.ts.map +1 -0
  1821. package/dist/zksync/ZKSyncDeployer.js +132 -0
  1822. package/dist/zksync/ZKSyncDeployer.js.map +1 -0
  1823. package/package.json +259 -3
@@ -0,0 +1,1800 @@
1
+ // import { expect } from 'chai';
2
+ import { compareVersions } from 'compare-versions';
3
+ import { constants, utils } from 'ethers';
4
+ import { CrossCollateralRouter__factory, EverclearTokenBridge__factory, GasRouter__factory, IERC20__factory, MailboxClient__factory, MovableCollateralRouter__factory, PredicateRouterWrapper__factory, ProxyAdmin__factory, StaticAggregationHook__factory, StaticAggregationHookFactory__factory, TimelockController__factory, TokenBridgeCctpBase__factory, TokenBridgeCctpV2__factory, TokenRouter__factory, } from '@recoillink/core';
5
+ import { buildArtifact as coreBuildArtifact } from '@recoillink/core/buildArtifact.js';
6
+ import { ZERO_ADDRESS_HEX_32, addressToBytes32, assert, concurrentMap, deepEquals, difference, eqAddress, isAddressEvm, isNullish, isObjEmpty, isZeroishAddress, normalizeAddressEvm, objDiff, objFilter, objKeys, objMap, promiseObjAll, rootLogger, } from '@recoillink/utils';
7
+ import { ExplorerLicenseType } from '../block-explorer/etherscan.js';
8
+ import { DEFAULT_CONTRACT_READ_CONCURRENCY } from '../consts/concurrency.js';
9
+ import { transferOwnershipTransactions } from '../contracts/contracts.js';
10
+ import { HyperlaneModule, } from '../core/AbstractHyperlaneModule.js';
11
+ import { contractHasCode, isInitialized, isStorageEmpty, proxyAdmin, proxyAdminUpdateTxs, } from '../deploy/proxy.js';
12
+ import { ContractVerifier } from '../deploy/verify/ContractVerifier.js';
13
+ import { EvmTokenFeeModule } from '../fee/EvmTokenFeeModule.js';
14
+ import { mergeCrossCollateralRouters } from '../fee/crossCollateralUtils.js';
15
+ import { TokenFeeType } from '../fee/types.js';
16
+ import { getEvmHookUpdateTransactions } from '../hook/updates.js';
17
+ import { collectHybridHookNodes, resolveHybridHookNodesToAddress, stripPredicateSubHook, } from '../hook/utils.js';
18
+ import { HookType, OnchainHookType, } from '../hook/types.js';
19
+ import { EvmIsmModule } from '../ism/EvmIsmModule.js';
20
+ import { EvmIsmReader } from '../ism/EvmIsmReader.js';
21
+ import { HyperlaneIsmFactory } from '../ism/HyperlaneIsmFactory.js';
22
+ import { moduleMatchesConfig } from '../ism/utils.js';
23
+ import { PredicateWrapperDeployer } from '../predicate/PredicateDeployer.js';
24
+ import { resolveRouterMapConfig } from '../router/types.js';
25
+ import { CANCELLER_ROLE, EXECUTOR_ROLE, PROPOSER_ROLE, TIMELOCK_ADMIN_ROLE, } from '../timelock/evm/constants.js';
26
+ import { isDeterministicTimelockReadError } from '../timelock/evm/errors.js';
27
+ import { planChainHybrid, } from '../deploy/warpHybridPlan.js';
28
+ import { scalesEqual } from '../utils/decimals.js';
29
+ import { isRevertData } from '../utils/contract.js';
30
+ import { IsmType } from '../ism/types.js';
31
+ import { DelayedFlowRemoteIsmsSourceType, collectHybridIsmNodes, completeHybridIsmNodes, extractIsmAndHookFactoryAddresses, ismTreeContainsHybridHookIsm, ismTreeContainsRateLimited, normalizeConfig, resolveHybridIsmNodesToAddress, setRateLimitedIsmRecipient, } from '../utils/ism.js';
32
+ import { CCTP_PPM_STORAGE_VERSION, EvmWarpRouteReader, } from './EvmWarpRouteReader.js';
33
+ import { EvmXERC20Module } from './EvmXERC20Module.js';
34
+ import { TokenType } from './config.js';
35
+ import { resolveAndValidateRebalanceConfig, resolveTokenFeeAddress, } from './configUtils.js';
36
+ import { hypERC20contracts } from './contracts.js';
37
+ import { HypERC20Deployer } from './deploy.js';
38
+ import { HypTokenRouterConfigSchema, PredicateWrapperConfigSchema, VERSION_ERROR_MESSAGE, contractVersionMatchesDependency, derivedHookAddress, derivedIsmAddress, isCctpTokenConfig, isEverclearTokenBridgeConfig, isMovableCollateralTokenConfig, isCrossCollateralTokenConfig, isOftTokenConfig, isXERC20TokenConfig, } from './types.js';
39
+ // The last contract version where `approveTokenForBridge` granted max allowance
40
+ // instead of revoking it. Hardcoded (not CONTRACTS_PACKAGE_VERSION) because the
41
+ // package version moves to the next major at release and would wrongly match the
42
+ // new revoke-semantics implementations.
43
+ export const MAX_LEGACY_BRIDGE_APPROVAL_VERSION = '11.3.1';
44
+ /**
45
+ * Whether `approveTokenForBridge` GRANTS a standing max allowance on the given
46
+ * contract version (legacy impls) rather than REVOKING it (new impls). The
47
+ * selector is overloaded by implementation version.
48
+ */
49
+ export function bridgeApprovalGrantsMaxAllowance(contractVersion) {
50
+ return (compareVersions(contractVersion, MAX_LEGACY_BRIDGE_APPROVAL_VERSION) <= 0);
51
+ }
52
+ const getAllowedRebalancingBridgesByDomain = (allowedRebalancingBridgesByDomain) => {
53
+ return objMap(allowedRebalancingBridgesByDomain, (_domainId, allowedRebalancingBridges) => {
54
+ return new Set(allowedRebalancingBridges.map((bridgeConfig) => normalizeAddressEvm(bridgeConfig.bridge)));
55
+ });
56
+ };
57
+ const getRebalanceTargetsByDomain = (rebalanceTargetsByDomain) => {
58
+ return objMap(rebalanceTargetsByDomain, (_domainId, targets) => new Set(targets.map((target) => addressToBytes32(target).toLowerCase())));
59
+ };
60
+ const getRebalanceRecipientsByDomain = (rebalanceRecipientsByDomain) => {
61
+ return objMap(rebalanceRecipientsByDomain, (_domainId, recipient) => addressToBytes32(recipient).toLowerCase());
62
+ };
63
+ export class EvmWarpModule extends HyperlaneModule {
64
+ multiProvider;
65
+ ccipContractCache;
66
+ contractVerifier;
67
+ static deployedTimelockByProvider = new WeakMap();
68
+ logger = rootLogger.child({
69
+ module: 'EvmWarpModule',
70
+ });
71
+ reader;
72
+ chainName;
73
+ chainId;
74
+ domainId;
75
+ constructor(multiProvider, args, ccipContractCache, contractVerifier) {
76
+ super(args);
77
+ this.multiProvider = multiProvider;
78
+ this.ccipContractCache = ccipContractCache;
79
+ this.contractVerifier = contractVerifier;
80
+ this.reader = new EvmWarpRouteReader(multiProvider, args.chain);
81
+ this.chainName = this.multiProvider.getChainName(args.chain);
82
+ this.chainId = multiProvider.getEvmChainId(args.chain);
83
+ this.domainId = multiProvider.getDomainId(args.chain);
84
+ this.chainId = multiProvider.getEvmChainId(args.chain);
85
+ this.contractVerifier ??= new ContractVerifier(multiProvider, {}, coreBuildArtifact, ExplorerLicenseType.MIT);
86
+ }
87
+ /**
88
+ * Retrieves the token router configuration for the specified address.
89
+ *
90
+ * @param address - The address to derive the token router configuration from.
91
+ * @returns A promise that resolves to the token router configuration.
92
+ */
93
+ async read() {
94
+ const config = await this.reader.deriveWarpRouteConfig(this.args.addresses.deployedTokenRoute);
95
+ // recipient is always the token address itself — implicit in the warp
96
+ // context, so omit it from read() output to keep configs clean.
97
+ // Mutate in place to preserve the DerivedIsmConfig type (WithAddress<...>).
98
+ const stripRecipient = (node) => {
99
+ if (typeof node !== 'object' || node === null)
100
+ return;
101
+ const n = node;
102
+ if (n.type === IsmType.RATE_LIMITED) {
103
+ delete n.recipient;
104
+ return;
105
+ }
106
+ if (Array.isArray(n.modules))
107
+ n.modules.forEach(stripRecipient);
108
+ if (typeof n.domains === 'object' && n.domains !== null)
109
+ Object.values(n.domains).forEach(stripRecipient);
110
+ if (n.lowerIsm)
111
+ stripRecipient(n.lowerIsm);
112
+ if (n.upperIsm)
113
+ stripRecipient(n.upperIsm);
114
+ };
115
+ const ism = config.interchainSecurityModule;
116
+ if (typeof ism !== 'string' && ismTreeContainsRateLimited(ism))
117
+ stripRecipient(ism);
118
+ return config;
119
+ }
120
+ async timelockMatchesConfig(timelockAddress, config, codeAlreadyVerified = false) {
121
+ const provider = this.multiProvider.getProvider(this.chainName);
122
+ if (!codeAlreadyVerified &&
123
+ isStorageEmpty(await provider.getCode(timelockAddress))) {
124
+ this.logger.debug({ chain: this.chainName, timelockAddress }, 'ProxyAdmin owner has no contract code and is not a TimelockController');
125
+ return false;
126
+ }
127
+ const timelockController = TimelockController__factory.connect(timelockAddress, provider);
128
+ try {
129
+ const [delay, hasProposer, hasExecutor, hasCanceller, hasAdminSelf] = await Promise.all([
130
+ timelockController.getMinDelay(),
131
+ timelockController.hasRole(PROPOSER_ROLE, config.roles.proposer),
132
+ timelockController.hasRole(EXECUTOR_ROLE, config.roles.executor),
133
+ timelockController.hasRole(CANCELLER_ROLE, config.roles.proposer),
134
+ timelockController.hasRole(TIMELOCK_ADMIN_ROLE, timelockAddress),
135
+ ]);
136
+ return (delay.eq(config.delay) &&
137
+ hasProposer &&
138
+ hasExecutor &&
139
+ hasCanceller &&
140
+ hasAdminSelf);
141
+ }
142
+ catch (error) {
143
+ if (!isDeterministicTimelockReadError(error))
144
+ throw error;
145
+ this.logger.debug({ chain: this.chainName, error, timelockAddress }, 'ProxyAdmin owner does not match the expected timelock config');
146
+ return false;
147
+ }
148
+ }
149
+ async cachedTimelockMatchesConfig(timelockAddress, config) {
150
+ const provider = this.multiProvider.getProvider(this.chainName);
151
+ if (!(await contractHasCode(provider, timelockAddress))) {
152
+ this.logger.debug({ chain: this.chainName, timelockAddress }, 'Cached TimelockController has no code after visibility retry');
153
+ return false;
154
+ }
155
+ return this.timelockMatchesConfig(timelockAddress, config, true);
156
+ }
157
+ async configWithTimelockProxyAdminOwner(actualConfig, expectedConfig) {
158
+ if (!expectedConfig.timelock)
159
+ return expectedConfig;
160
+ assert(actualConfig.proxyAdmin?.address && actualConfig.proxyAdmin.owner, `Cannot configure timelock for non-proxied warp route on ${this.chainName}`);
161
+ assert(!expectedConfig.proxyAdmin?.address ||
162
+ eqAddress(expectedConfig.proxyAdmin.address, actualConfig.proxyAdmin.address), `Cannot configure timelock while changing ProxyAdmin address on ${this.chainName}`);
163
+ let timelockControllerAddress;
164
+ if (await this.timelockMatchesConfig(actualConfig.proxyAdmin.owner, expectedConfig.timelock)) {
165
+ timelockControllerAddress = actualConfig.proxyAdmin.owner;
166
+ }
167
+ else {
168
+ const timelockCacheKey = this.timelockDeploymentCacheKey(actualConfig.proxyAdmin.address, expectedConfig.timelock);
169
+ const deployedTimelockByConfig = EvmWarpModule.deployedTimelockByConfig(this.multiProvider);
170
+ const cachedTimelockControllerAddress = deployedTimelockByConfig.get(timelockCacheKey);
171
+ if (cachedTimelockControllerAddress &&
172
+ (await this.cachedTimelockMatchesConfig(cachedTimelockControllerAddress, expectedConfig.timelock))) {
173
+ timelockControllerAddress = cachedTimelockControllerAddress;
174
+ }
175
+ else {
176
+ timelockControllerAddress = (await new HypERC20Deployer(this.multiProvider, undefined, this.contractVerifier).deployTimelock(this.chainName, expectedConfig.timelock)).address;
177
+ deployedTimelockByConfig.set(timelockCacheKey, timelockControllerAddress);
178
+ }
179
+ }
180
+ return {
181
+ ...expectedConfig,
182
+ proxyAdmin: {
183
+ ...expectedConfig.proxyAdmin,
184
+ address: actualConfig.proxyAdmin.address,
185
+ owner: timelockControllerAddress,
186
+ },
187
+ };
188
+ }
189
+ timelockDeploymentCacheKey(proxyAdminAddress, config) {
190
+ return JSON.stringify({
191
+ chainName: this.chainName,
192
+ delay: config.delay.toString(),
193
+ executor: normalizeAddressEvm(config.roles.executor),
194
+ proposer: normalizeAddressEvm(config.roles.proposer),
195
+ proxyAdminAddress: normalizeAddressEvm(proxyAdminAddress),
196
+ });
197
+ }
198
+ static deployedTimelockByConfig(multiProvider) {
199
+ let deployedTimelockByConfig = EvmWarpModule.deployedTimelockByProvider.get(multiProvider);
200
+ if (!deployedTimelockByConfig) {
201
+ deployedTimelockByConfig = new Map();
202
+ EvmWarpModule.deployedTimelockByProvider.set(multiProvider, deployedTimelockByConfig);
203
+ }
204
+ return deployedTimelockByConfig;
205
+ }
206
+ /**
207
+ * Plans a Warp Route update as per-chain transaction groups.
208
+ *
209
+ * IMPORTANT — irreversible side effects when expectedConfig includes `predicateWrapper`:
210
+ * The PredicateRouterWrapper contract is deployed on-chain during planning (before this
211
+ * method returns). If the returned transactions are never submitted, the wrapper is
212
+ * orphaned. See PredicateWrapperDeployer.deployAndConfigure for details.
213
+ *
214
+ * IMPORTANT — irreversible side effects when expectedConfig includes `timelock`:
215
+ * A TimelockController may be deployed on-chain during planning so the returned ownership
216
+ * transactions can transfer ProxyAdmin ownership to it. The deployment address is cached
217
+ * per MultiProvider, revalidated, and reused across retries for the same
218
+ * chain/ProxyAdmin/timelock config, but a declined or externally persisted
219
+ * transaction plan can still leave an untracked timelock deployment.
220
+ *
221
+ * @param expectedConfig - The configuration for the token router to be updated.
222
+ * Used by warp apply to assemble one ordered batch for this chain.
223
+ */
224
+ async updatePhases(expectedConfig, tokenReaderParams, cctpDomains = []) {
225
+ HypTokenRouterConfigSchema.parse(expectedConfig);
226
+ const actualConfig = await this.read();
227
+ const hybridPlan = this.planHybridUpdate(actualConfig, expectedConfig);
228
+ const actualHasDelayedFlowRouter = (typeof actualConfig.hook === 'object' &&
229
+ collectHybridHookNodes(actualConfig.hook).some(({ type }) => type === HookType.DELAYED_FLOW_ROUTER)) ||
230
+ (typeof actualConfig.interchainSecurityModule === 'object' &&
231
+ collectHybridIsmNodes(actualConfig.interchainSecurityModule).some(({ type }) => type === IsmType.DELAYED_FLOW_ROUTER));
232
+ const targetHasDelayedFlowRouter = (typeof expectedConfig.hook === 'object' &&
233
+ collectHybridHookNodes(expectedConfig.hook).some(({ type }) => type === HookType.DELAYED_FLOW_ROUTER)) ||
234
+ (typeof expectedConfig.interchainSecurityModule === 'object' &&
235
+ collectHybridIsmNodes(expectedConfig.interchainSecurityModule).some(({ type }) => type === IsmType.DELAYED_FLOW_ROUTER));
236
+ const removesDelayedFlowRouter = actualHasDelayedFlowRouter && !targetHasDelayedFlowRouter;
237
+ expectedConfig = await this.configWithTimelockProxyAdminOwner(actualConfig, expectedConfig);
238
+ const transactions = [];
239
+ let xerc20Txs = [];
240
+ if (isXERC20TokenConfig(expectedConfig)) {
241
+ const { module, config } = await EvmXERC20Module.fromWarpRouteConfig(this.multiProvider, this.chainName, expectedConfig, this.args.addresses.deployedTokenRoute);
242
+ xerc20Txs = await module.update(config);
243
+ }
244
+ const allFeeTxs = await this.createTokenFeeUpdateTxs(actualConfig, expectedConfig, tokenReaderParams);
245
+ // Split feeTxs by authority: setFeeRecipient targets the token router (router
246
+ // owner gated) while all other fee txs target the fee contract (fee-contract
247
+ // owner gated). Keeping them in the same bucket means a dedicated feeSubmitter
248
+ // (which owns the fee contract) would try to call setFeeRecipient — which reverts
249
+ // because it doesn't own the router. Router-owner txs go into the main batch;
250
+ // only fee-contract-owner txs are returned as feeTxs for the feeSubmitter.
251
+ const routerAddress = this.args.addresses.deployedTokenRoute.toLowerCase();
252
+ const routerOwnerFeeTxs = allFeeTxs.filter((tx) => tx.to?.toLowerCase() === routerAddress);
253
+ const feeTxs = allFeeTxs.filter((tx) => tx.to?.toLowerCase() !== routerAddress);
254
+ /**
255
+ * @remark
256
+ * The order of operations matter
257
+ * 1. createOwnershipUpdateTxs() must always be LAST because no updates possible after ownership transferred
258
+ * 2. createEnrollRemoteRoutersUpdateTxs() must be BEFORE createSetDestinationGasUpdateTxs()
259
+ * because GasRouter requires routers to be enrolled before setting destination gas
260
+ * 3. createHookAndPredicateUpdateTxs() handles hook + predicate wrapper together so the
261
+ * pending new hook address is threaded through without leaking into other method signatures
262
+ * 4. The hook transactions are pushed BEFORE the ISM transactions, whatever the order they
263
+ * are built in — see the comment at the push
264
+ */
265
+ const upgradeTxs = await this.upgradeWarpRouteImplementationTx(actualConfig, expectedConfig);
266
+ if (upgradeTxs.length === 0 &&
267
+ isCctpTokenConfig(actualConfig) &&
268
+ isCctpTokenConfig(expectedConfig) &&
269
+ expectedConfig.cctpVersion === 'V2') {
270
+ assert(eqAddress(actualConfig.messageTransmitter, expectedConfig.messageTransmitter), `Configured CCTP message transmitter ${expectedConfig.messageTransmitter} does not match the deployed router's immutable transmitter ${actualConfig.messageTransmitter}`);
271
+ }
272
+ // Pure hybrid validation already ran immediately after the read. Resolve
273
+ // (and, when needed, deploy) the shared instance for both config trees.
274
+ const hybrid = await this.resolveHybridInstance(actualConfig, expectedConfig, hybridPlan);
275
+ // With the shared address known, both trees reference it as an ordinary
276
+ // address child and the existing ISM/hook modules deploy whatever parents
277
+ // remain. Nothing downstream needs to know a hybrid is involved.
278
+ const resolvedConfig = hybrid
279
+ ? {
280
+ ...expectedConfig,
281
+ interchainSecurityModule: resolveHybridIsmNodesToAddress(hybrid.ismTree, hybrid.address),
282
+ hook: resolveHybridHookNodesToAddress(hybrid.hookTree, hybrid.address),
283
+ }
284
+ : expectedConfig;
285
+ const ismTxs = await this.createIsmUpdateTxs(actualConfig, resolvedConfig, hybrid?.address);
286
+ // Built after the ISM step, which may deploy the tree, but ORDERED BEFORE
287
+ // it: a batch executes sequentially with no rollback, so a failure between
288
+ // the two installs is a state the route can be left in. Hook first leaves
289
+ // the previous ISM verifying inbound messages. ISM first can leave a hybrid
290
+ // hook/ISM gating delivery while nothing drives its postDispatch — no
291
+ // preverification is ever sent for the messages dispatched in that window,
292
+ // and none can be sent afterwards, so they are permanently undeliverable.
293
+ // Returned in their own buckets so callers can choose the safe order within
294
+ // this chain's batch, including reversing it when removing delayed flow.
295
+ const hookTxs = await this.createHookAndPredicateUpdateTxs(actualConfig, resolvedConfig, hybrid?.address);
296
+ transactions.push(...this.createFeeHookUpdateTxs(actualConfig, expectedConfig), ...this.createUnenrollRemoteRoutersUpdateTxs(actualConfig, expectedConfig), ...this.createEnrollRemoteRoutersUpdateTxs(actualConfig, expectedConfig),
297
+ // MC unenroll before enroll for consistency with remote routers.
298
+ // MC enrollment must come before gas setting so that MC-only domains
299
+ ...this.createUnenrollCrossCollateralRoutersTxs(actualConfig, expectedConfig), ...this.createEnrollCrossCollateralRoutersTxs(actualConfig, expectedConfig), ...this.createSetDestinationGasUpdateTxs(actualConfig, expectedConfig), ...this.createAddRebalancersUpdateTxs(actualConfig, expectedConfig), ...this.createRemoveRebalancersUpdateTxs(actualConfig, expectedConfig), ...(await this.createAddAllowedBridgesUpdateTxs(actualConfig, expectedConfig)), ...this.createRemoveBridgesTxs(actualConfig, expectedConfig), ...this.createAddRebalanceTargetsUpdateTxs(actualConfig, expectedConfig), ...this.createRemoveRebalanceTargetsTxs(actualConfig, expectedConfig), ...this.createSetRecipientsUpdateTxs(actualConfig, expectedConfig), ...this.createRemoveRecipientsTxs(actualConfig, expectedConfig), ...(await this.createRevokeStaleBridgeAllowancesTxs(actualConfig, expectedConfig, upgradeTxs.length > 0)), ...this.createAddRemoteOutputAssetsTxs(actualConfig, expectedConfig), ...this.createRemoveRemoteOutputAssetsTxs(actualConfig, expectedConfig), ...this.createUpdateEverclearFeeParamsTxs(actualConfig, expectedConfig), ...this.createRemoveEverclearFeeParamsTxs(actualConfig, expectedConfig), ...(await this.createAddCctpDomainsTxs(expectedConfig, cctpDomains)), ...this.createSetMaxFeePpmTxs(actualConfig, expectedConfig), ...xerc20Txs,
300
+ // Router-owner fee txs (setFeeRecipient) belong in the main batch so they
301
+ // always execute under the router owner's authority — even when a dedicated
302
+ // feeSubmitter is configured for fee-contract-owner txs.
303
+ ...routerOwnerFeeTxs);
304
+ // Ownership/proxyAdmin must always execute last; returned separately so callers
305
+ // can place feeTxs between main txs and ownership (see update() below).
306
+ const ownershipTxs = [
307
+ ...(hybrid?.ownershipTxs ?? []),
308
+ ...this.createOwnershipUpdateTxs(actualConfig, expectedConfig),
309
+ ...proxyAdminUpdateTxs(this.chainId, this.args.addresses.deployedTokenRoute, actualConfig, expectedConfig),
310
+ ];
311
+ return {
312
+ upgradeTxs,
313
+ instanceTxs: hybrid?.instanceTxs ?? [],
314
+ hookTxs,
315
+ ismTxs,
316
+ txs: transactions,
317
+ feeTxs,
318
+ ownershipTxs,
319
+ hybridIsm: hybrid?.address,
320
+ removesDelayedFlowRouter,
321
+ };
322
+ }
323
+ /**
324
+ * Main-compatible split: router-owner work, fee-owner work, then ownership.
325
+ */
326
+ async updateSplit(expectedConfig, tokenReaderParams, cctpDomains = []) {
327
+ const { upgradeTxs, instanceTxs, hookTxs, ismTxs, txs, feeTxs, ownershipTxs, removesDelayedFlowRouter, } = await this.updatePhases(expectedConfig, tokenReaderParams, cctpDomains);
328
+ return {
329
+ txs: removesDelayedFlowRouter
330
+ ? [...upgradeTxs, ...instanceTxs, ...ismTxs, ...hookTxs, ...txs]
331
+ : [...upgradeTxs, ...instanceTxs, ...hookTxs, ...ismTxs, ...txs],
332
+ feeTxs,
333
+ ownershipTxs,
334
+ };
335
+ }
336
+ /** Returns a flat, ordered transaction array suitable for one submitter. */
337
+ async update(expectedConfig, tokenReaderParams, cctpDomains = []) {
338
+ const { txs, feeTxs, ownershipTxs } = await this.updateSplit(expectedConfig, tokenReaderParams, cctpDomains);
339
+ // feeTxs (fee-contract-owner calls) must come before ownershipTxs so they
340
+ // execute before the router owner changes.
341
+ return [...txs, ...feeTxs, ...ownershipTxs];
342
+ }
343
+ /**
344
+ * Validates hybrid composition and fee-hook transitions before update
345
+ * planning reaches any operation that may deploy a contract.
346
+ */
347
+ planHybridUpdate(actualConfig, expectedConfig) {
348
+ // An omitted feeHook is intentionally left unchanged by warp apply. Plan
349
+ // against the effective value so an already-installed ERC20 fee hook
350
+ // cannot bypass hybrid hook composition validation.
351
+ const effectiveFeeHook = expectedConfig.feeHook ?? actualConfig.feeHook;
352
+ const plan = planChainHybrid({
353
+ multiProvider: this.multiProvider,
354
+ chain: this.chainName,
355
+ config: { ...expectedConfig, feeHook: effectiveFeeHook },
356
+ });
357
+ if (!plan)
358
+ return undefined;
359
+ if (plan.node.type === IsmType.DELAYED_FLOW_ROUTER &&
360
+ actualConfig.feeHook &&
361
+ !isZeroishAddress(actualConfig.feeHook) &&
362
+ expectedConfig.feeHook &&
363
+ isZeroishAddress(expectedConfig.feeHook)) {
364
+ const actualHook = actualConfig.hook;
365
+ const expectedHook = expectedConfig.hook;
366
+ const installedHybrid = typeof actualHook === 'object'
367
+ ? collectHybridHookNodes(actualHook)[0]
368
+ : undefined;
369
+ const delayedFlowHookStaysInstalled = installedHybrid?.type === HookType.DELAYED_FLOW_ROUTER &&
370
+ installedHybrid.duration === plan.node.duration &&
371
+ installedHybrid.thresholdBps === plan.node.thresholdBps &&
372
+ installedHybrid.maxDelay === plan.node.maxDelay &&
373
+ (plan.node.warpRouter === undefined ||
374
+ (!!installedHybrid.warpRouter &&
375
+ eqAddress(installedHybrid.warpRouter, plan.node.warpRouter))) &&
376
+ typeof expectedHook === 'object' &&
377
+ deepEquals(normalizeConfig(resolveHybridHookNodesToAddress(actualHook, constants.AddressZero)), normalizeConfig(resolveHybridHookNodesToAddress(expectedHook, constants.AddressZero)));
378
+ assert(delayedFlowHookStaysInstalled, `Cannot introduce, replace, or recompose ${IsmType.DELAYED_FLOW_ROUTER} on ${this.chainName} while clearing existing feeHook ${actualConfig.feeHook} in the same warp apply. Hook installation runs before router updates, leaving the delayed-flow hook active while ERC20 fee metadata still prevents its native control dispatch. Apply feeHook address(0) without changing the hook first, execute that update, then apply the ${IsmType.DELAYED_FLOW_ROUTER} config.`);
379
+ }
380
+ return plan;
381
+ }
382
+ /**
383
+ * Reuses or deploys the one hybrid leaf declared on both config surfaces.
384
+ * Parent trees only ever receive the returned address, preventing duplicate
385
+ * bucket state. Instance mutations are returned separately so counterpart
386
+ * enrollment can precede either router-surface change in this chain's batch.
387
+ */
388
+ async resolveHybridInstance(actualConfig, expectedConfig, plan) {
389
+ if (!plan)
390
+ return undefined;
391
+ const completed = completeHybridIsmNodes(plan.node, this.args.addresses.deployedTokenRoute, { type: DelayedFlowRemoteIsmsSourceType.Deferred }, actualConfig.owner, this.multiProvider);
392
+ assert(typeof completed === 'object' &&
393
+ (completed.type === IsmType.NET_FLOW_RATE_LIMITED ||
394
+ completed.type === IsmType.DELAYED_FLOW_ROUTER), `Failed to complete hybrid hook/ISM config on ${this.chainName}`);
395
+ // Every owner-gated mutation is signed by the router's current owner.
396
+ // Ownership moves to the target owner only in the final ownership phase.
397
+ const desired = {
398
+ ...completed,
399
+ owner: actualConfig.owner,
400
+ };
401
+ const actualHook = actualConfig.hook;
402
+ const hookNodes = typeof actualHook === 'object' ? collectHybridHookNodes(actualHook) : [];
403
+ const actualIsm = actualConfig.interchainSecurityModule;
404
+ const ismNodes = typeof actualIsm === 'object' ? collectHybridIsmNodes(actualIsm) : [];
405
+ assert(hookNodes.length <= 1 && ismNodes.length <= 1, `Expected at most one installed hybrid hook/ISM on each surface of ${this.chainName}, found ${hookNodes.length} under hook and ${ismNodes.length} under interchainSecurityModule`);
406
+ // Prefer the hook: submission can be interrupted after its update but before
407
+ // the ISM update, leaving the new leaf installed while the ISM still has the
408
+ // old tree. A later apply must reuse that new leaf.
409
+ const candidate = hookNodes[0] ?? ismNodes[0];
410
+ const currentAddress = candidate &&
411
+ 'address' in candidate &&
412
+ typeof candidate.address === 'string'
413
+ ? candidate.address
414
+ : undefined;
415
+ if (currentAddress) {
416
+ const current = await new EvmIsmReader(this.multiProvider, this.chainName).deriveIsmConfig(currentAddress);
417
+ assert(typeof current === 'object' &&
418
+ (current.type === IsmType.NET_FLOW_RATE_LIMITED ||
419
+ current.type === IsmType.DELAYED_FLOW_ROUTER), `Expected ${currentAddress} on ${this.chainName} to be a hybrid hook/ISM`);
420
+ const ownedByRouter = current.owner && eqAddress(current.owner, actualConfig.owner);
421
+ const alreadyTransferred = !ownedByRouter &&
422
+ current.owner &&
423
+ expectedConfig.owner &&
424
+ eqAddress(current.owner, expectedConfig.owner);
425
+ assert(ownedByRouter || alreadyTransferred, `Hybrid hook/ISM ${currentAddress} on ${this.chainName} is owned by ${current.owner}, but its warp router is owned by ${actualConfig.owner}. Warp apply uses the router's submitter for every non-fee mutation, so align the owners before applying this config.`);
426
+ if (alreadyTransferred) {
427
+ const factory = HyperlaneIsmFactory.fromAddressesMap({ [this.chainName]: this.args.addresses }, this.multiProvider, this.ccipContractCache, this.contractVerifier);
428
+ const matchesFinalConfig = await moduleMatchesConfig(this.chainName, currentAddress, { ...completed, owner: expectedConfig.owner }, this.multiProvider, factory.getContracts(this.chainName), actualConfig.mailbox);
429
+ assert(matchesFinalConfig, `Hybrid hook/ISM ${currentAddress} on ${this.chainName} was already transferred to the target owner ${expectedConfig.owner}, but its config does not match the target. Complete or revert the interrupted ownership transfer before changing its config.`);
430
+ return {
431
+ address: currentAddress,
432
+ ismTree: plan.ismTree,
433
+ hookTree: plan.hookTree,
434
+ instanceTxs: [],
435
+ ownershipTxs: [],
436
+ };
437
+ }
438
+ const module = new EvmIsmModule(this.multiProvider, {
439
+ chain: this.chainName,
440
+ config: current,
441
+ addresses: {
442
+ ...this.args.addresses,
443
+ mailbox: actualConfig.mailbox,
444
+ deployedIsm: currentAddress,
445
+ },
446
+ }, this.ccipContractCache, this.contractVerifier);
447
+ const txs = await module.updateDeployedInstance(desired);
448
+ const { deployedIsm } = module.serialize();
449
+ assert(deployedIsm, `Failed to resolve hybrid hook/ISM on ${this.chainName}`);
450
+ const ownershipTxs = transferOwnershipTransactions(this.chainId, deployedIsm, { owner: actualConfig.owner }, { owner: expectedConfig.owner }, `hybrid hook/ISM on ${this.chainName}`);
451
+ return {
452
+ address: deployedIsm,
453
+ ismTree: plan.ismTree,
454
+ hookTree: plan.hookTree,
455
+ instanceTxs: txs,
456
+ ownershipTxs,
457
+ };
458
+ }
459
+ const factory = HyperlaneIsmFactory.fromAddressesMap({ [this.chainName]: this.args.addresses }, this.multiProvider, this.ccipContractCache, this.contractVerifier);
460
+ const deployed = await factory.deployInternal({
461
+ destination: this.chainName,
462
+ config: desired,
463
+ mailbox: actualConfig.mailbox,
464
+ });
465
+ const ownershipTxs = transferOwnershipTransactions(this.chainId, deployed.address, { owner: actualConfig.owner }, { owner: expectedConfig.owner }, `hybrid hook/ISM on ${this.chainName}`);
466
+ return {
467
+ address: deployed.address,
468
+ ismTree: plan.ismTree,
469
+ hookTree: plan.hookTree,
470
+ instanceTxs: [],
471
+ ownershipTxs,
472
+ };
473
+ }
474
+ /**
475
+ * Create a transaction to update the remote routers for the Warp Route contract.
476
+ *
477
+ * @param actualConfig - The on-chain router configuration, including the remoteRouters array.
478
+ * @param expectedConfig - The expected token router configuration.
479
+ * @returns A array with a single Ethereum transaction that need to be executed to enroll the routers
480
+ */
481
+ createEnrollRemoteRoutersUpdateTxs(actualConfig, expectedConfig) {
482
+ // OFT contracts don't have Router interface — no remote router enrollment
483
+ if (isOftTokenConfig(expectedConfig)) {
484
+ return [];
485
+ }
486
+ const updateTransactions = [];
487
+ if (!expectedConfig.remoteRouters) {
488
+ return [];
489
+ }
490
+ assert(actualConfig.remoteRouters, 'actualRemoteRouters is undefined');
491
+ assert(expectedConfig.remoteRouters, 'actualRemoteRouters is undefined');
492
+ const { remoteRouters: actualRemoteRouters } = actualConfig;
493
+ const { remoteRouters: expectedRemoteRouters } = expectedConfig;
494
+ const routesToEnroll = Object.entries(expectedRemoteRouters)
495
+ .map(([domain, rawRouter]) => [
496
+ domain,
497
+ { address: addressToBytes32(rawRouter.address) },
498
+ ])
499
+ .filter(([domain, expectedRouter]) => {
500
+ const actualRouter = actualRemoteRouters[domain];
501
+ // Enroll if router doesn't exist for domain or has different address
502
+ return !actualRouter || actualRouter.address !== expectedRouter.address;
503
+ })
504
+ .map(([domain]) => domain);
505
+ if (routesToEnroll.length === 0) {
506
+ return updateTransactions;
507
+ }
508
+ const contractToUpdate = TokenRouter__factory.connect(this.args.addresses.deployedTokenRoute, this.multiProvider.getProvider(this.domainId));
509
+ updateTransactions.push({
510
+ chainId: this.chainId,
511
+ annotation: `Enrolling Router ${this.args.addresses.deployedTokenRoute} on ${this.args.chain}`,
512
+ to: contractToUpdate.address,
513
+ data: contractToUpdate.interface.encodeFunctionData('enrollRemoteRouters', [
514
+ routesToEnroll.map((k) => Number(k)),
515
+ routesToEnroll.map((a) => addressToBytes32(expectedRemoteRouters[a].address)),
516
+ ]),
517
+ });
518
+ return updateTransactions;
519
+ }
520
+ createUnenrollRemoteRoutersUpdateTxs(actualConfig, expectedConfig) {
521
+ // OFT contracts don't have Router interface — no remote router unenrollment
522
+ if (isOftTokenConfig(expectedConfig)) {
523
+ return [];
524
+ }
525
+ const updateTransactions = [];
526
+ if (!expectedConfig.remoteRouters) {
527
+ return [];
528
+ }
529
+ assert(actualConfig.remoteRouters, 'actualRemoteRouters is undefined');
530
+ assert(expectedConfig.remoteRouters, 'actualRemoteRouters is undefined');
531
+ const { remoteRouters: actualRemoteRouters } = actualConfig;
532
+ const { remoteRouters: expectedRemoteRouters } = expectedConfig;
533
+ const routesToUnenroll = Array.from(difference(new Set(Object.keys(actualRemoteRouters)), new Set(Object.keys(expectedRemoteRouters))));
534
+ if (routesToUnenroll.length === 0) {
535
+ return updateTransactions;
536
+ }
537
+ const contractToUpdate = TokenRouter__factory.connect(this.args.addresses.deployedTokenRoute, this.multiProvider.getProvider(this.domainId));
538
+ updateTransactions.push({
539
+ annotation: `Unenrolling Router ${this.args.addresses.deployedTokenRoute} on ${this.args.chain}`,
540
+ chainId: this.chainId,
541
+ to: contractToUpdate.address,
542
+ data: contractToUpdate.interface.encodeFunctionData('unenrollRemoteRouters(uint32[])', [routesToUnenroll.map((k) => Number(k))]),
543
+ });
544
+ return updateTransactions;
545
+ }
546
+ createAddRebalancersUpdateTxs(actualConfig, expectedConfig) {
547
+ if (!isMovableCollateralTokenConfig(expectedConfig) ||
548
+ !isMovableCollateralTokenConfig(actualConfig)) {
549
+ return [];
550
+ }
551
+ if (!expectedConfig.allowedRebalancers) {
552
+ return [];
553
+ }
554
+ const formattedExpectedRebalancers = new Set(expectedConfig.allowedRebalancers.map(normalizeAddressEvm));
555
+ const formattedActualRebalancers = new Set((actualConfig.allowedRebalancers ?? []).map(normalizeAddressEvm));
556
+ const rebalancersToAdd = Array.from(difference(formattedExpectedRebalancers, formattedActualRebalancers));
557
+ if (rebalancersToAdd.length === 0) {
558
+ return [];
559
+ }
560
+ return rebalancersToAdd.map((rebalancerToAdd) => ({
561
+ chainId: this.chainId,
562
+ annotation: `Adding rebalancer role to "${rebalancerToAdd}" on token "${this.args.addresses.deployedTokenRoute}" on chain "${this.chainName}"`,
563
+ to: this.args.addresses.deployedTokenRoute,
564
+ data: MovableCollateralRouter__factory.createInterface().encodeFunctionData('addRebalancer(address)', [rebalancerToAdd]),
565
+ }));
566
+ }
567
+ createRemoveRebalancersUpdateTxs(actualConfig, expectedConfig) {
568
+ if (!isMovableCollateralTokenConfig(expectedConfig) ||
569
+ !isMovableCollateralTokenConfig(actualConfig)) {
570
+ return [];
571
+ }
572
+ if (!expectedConfig.allowedRebalancers) {
573
+ return [];
574
+ }
575
+ const formattedExpectedRebalancers = new Set(expectedConfig.allowedRebalancers.map(normalizeAddressEvm));
576
+ const formattedActualRebalancers = new Set((actualConfig.allowedRebalancers ?? []).map(normalizeAddressEvm));
577
+ const rebalancersToRemove = Array.from(difference(formattedActualRebalancers, formattedExpectedRebalancers));
578
+ if (rebalancersToRemove.length === 0) {
579
+ return [];
580
+ }
581
+ return rebalancersToRemove.map((rebalancerToRemove) => ({
582
+ chainId: this.chainId,
583
+ annotation: `Removing rebalancer role from "${rebalancerToRemove}" on token "${this.args.addresses.deployedTokenRoute}" on chain "${this.chainName}"`,
584
+ to: this.args.addresses.deployedTokenRoute,
585
+ data: MovableCollateralRouter__factory.createInterface().encodeFunctionData('removeRebalancer(address)', [rebalancerToRemove]),
586
+ }));
587
+ }
588
+ /**
589
+ * Create transactions to enroll CrossCollateralRouter routers.
590
+ */
591
+ createEnrollCrossCollateralRoutersTxs(actualConfig, expectedConfig) {
592
+ if (!isCrossCollateralTokenConfig(expectedConfig) ||
593
+ !isCrossCollateralTokenConfig(actualConfig)) {
594
+ return [];
595
+ }
596
+ if (!expectedConfig.crossCollateralRouters) {
597
+ return [];
598
+ }
599
+ const actualEnrolled = resolveRouterMapConfig(this.multiProvider, actualConfig.crossCollateralRouters ?? {});
600
+ const expectedEnrolled = resolveRouterMapConfig(this.multiProvider, expectedConfig.crossCollateralRouters);
601
+ const domainsToEnroll = [];
602
+ const routersToEnroll = [];
603
+ for (const [domain, expectedRouters] of Object.entries(expectedEnrolled)) {
604
+ const domainId = Number(domain);
605
+ const actualRouters = new Set((actualEnrolled[domainId] ?? []).map((router) => this.toCanonicalRouterId(router)));
606
+ for (const router of expectedRouters) {
607
+ const canonicalRouter = this.toCanonicalRouterId(router);
608
+ if (!actualRouters.has(canonicalRouter)) {
609
+ domainsToEnroll.push(domainId);
610
+ routersToEnroll.push(canonicalRouter);
611
+ }
612
+ }
613
+ }
614
+ if (domainsToEnroll.length === 0) {
615
+ return [];
616
+ }
617
+ return [
618
+ {
619
+ chainId: this.chainId,
620
+ annotation: `Enrolling ${domainsToEnroll.length} CrossCollateralRouter routers on ${this.args.addresses.deployedTokenRoute} on ${this.chainName}`,
621
+ to: this.args.addresses.deployedTokenRoute,
622
+ data: CrossCollateralRouter__factory.createInterface().encodeFunctionData('enrollCrossCollateralRouters', [domainsToEnroll, routersToEnroll]),
623
+ },
624
+ ];
625
+ }
626
+ /**
627
+ * Create transactions to unenroll CrossCollateralRouter routers.
628
+ */
629
+ createUnenrollCrossCollateralRoutersTxs(actualConfig, expectedConfig) {
630
+ if (!isCrossCollateralTokenConfig(expectedConfig) ||
631
+ !isCrossCollateralTokenConfig(actualConfig)) {
632
+ return [];
633
+ }
634
+ const expectedCrossCollateralRouters = expectedConfig.crossCollateralRouters ?? {};
635
+ const actualEnrolled = resolveRouterMapConfig(this.multiProvider, actualConfig.crossCollateralRouters ?? {});
636
+ const expectedEnrolled = resolveRouterMapConfig(this.multiProvider, expectedCrossCollateralRouters);
637
+ const domainsToUnenroll = [];
638
+ const routersToUnenroll = [];
639
+ for (const [domain, actualRouters] of Object.entries(actualEnrolled)) {
640
+ const domainId = Number(domain);
641
+ const expectedRouters = new Set((expectedEnrolled[domainId] ?? []).map((router) => this.toCanonicalRouterId(router)));
642
+ for (const router of actualRouters) {
643
+ const canonicalRouter = this.toCanonicalRouterId(router);
644
+ if (!expectedRouters.has(canonicalRouter)) {
645
+ domainsToUnenroll.push(domainId);
646
+ routersToUnenroll.push(canonicalRouter);
647
+ }
648
+ }
649
+ }
650
+ if (domainsToUnenroll.length === 0) {
651
+ return [];
652
+ }
653
+ return [
654
+ {
655
+ chainId: this.chainId,
656
+ annotation: `Unenrolling ${domainsToUnenroll.length} CrossCollateralRouter routers on ${this.args.addresses.deployedTokenRoute} on ${this.chainName}`,
657
+ to: this.args.addresses.deployedTokenRoute,
658
+ data: CrossCollateralRouter__factory.createInterface().encodeFunctionData('unenrollCrossCollateralRouters', [domainsToUnenroll, routersToUnenroll]),
659
+ },
660
+ ];
661
+ }
662
+ toCanonicalRouterId(router) {
663
+ const lower = router.toLowerCase();
664
+ if (isAddressEvm(lower)) {
665
+ return addressToBytes32(lower);
666
+ }
667
+ return lower;
668
+ }
669
+ /**
670
+ * Grants standing ERC20 allowances declared in `allowedRebalancingBridges[].approvedTokens`.
671
+ *
672
+ * Only legacy (pre-atomic-rebalancing) routers need explicit grants: their
673
+ * `approveTokenForBridge` sets max allowance. New impls grant an exact temporary
674
+ * allowance per rebalance and the same selector REVOKES, so emitting grants there
675
+ * would be wrong. Gated on the on-chain version being legacy, mirroring
676
+ * `createRevokeStaleBridgeAllowancesTxs`.
677
+ */
678
+ async getAllowedBridgesApprovalTxs(actualConfig, expectedConfig) {
679
+ if (!isMovableCollateralTokenConfig(expectedConfig) ||
680
+ !isMovableCollateralTokenConfig(actualConfig)) {
681
+ return [];
682
+ }
683
+ if (!expectedConfig.allowedRebalancingBridges) {
684
+ return [];
685
+ }
686
+ // Only routers on a legacy impl grant max via `approveTokenForBridge`; on a new
687
+ // impl the same selector revokes, so there is nothing to grant ahead of time.
688
+ if (!actualConfig.contractVersion ||
689
+ !bridgeApprovalGrantsMaxAllowance(actualConfig.contractVersion)) {
690
+ return [];
691
+ }
692
+ const tokensToApproveByAllowedBridge = Object.values(expectedConfig.allowedRebalancingBridges).reduce((acc, allowedBridgesConfigs) => {
693
+ allowedBridgesConfigs.forEach((bridgeConfig) => {
694
+ acc[bridgeConfig.bridge] ??= [];
695
+ acc[bridgeConfig.bridge].push(...(bridgeConfig.approvedTokens ?? []));
696
+ });
697
+ return acc;
698
+ },
699
+ // allowed bridge -> tokens to approve
700
+ {});
701
+ const filteredTokensToApproveByAllowedBridge = await promiseObjAll(objMap(tokensToApproveByAllowedBridge, async (bridge, tokens) => {
702
+ const filteredApprovals = [];
703
+ for (const token of tokens) {
704
+ const instance = IERC20__factory.connect(token, this.multiProvider.getProvider(this.chainId));
705
+ const allowance = await instance.allowance(this.args.addresses.deployedTokenRoute, bridge);
706
+ if (!allowance.eq(constants.MaxUint256)) {
707
+ filteredApprovals.push(token);
708
+ }
709
+ }
710
+ return filteredApprovals;
711
+ }));
712
+ return Object.entries(filteredTokensToApproveByAllowedBridge).flatMap(([bridge, tokensToApprove]) => tokensToApprove.map((tokenToApprove) => ({
713
+ chainId: this.chainId,
714
+ annotation: `Approving allowed bridge "${bridge}" to spend token "${tokenToApprove}" on behalf of "${this.args.addresses.deployedTokenRoute}" on chain "${this.chainName}"`,
715
+ to: this.args.addresses.deployedTokenRoute,
716
+ data: MovableCollateralRouter__factory.createInterface().encodeFunctionData('approveTokenForBridge(address,address)', [tokenToApprove, bridge]),
717
+ })));
718
+ }
719
+ async createAddAllowedBridgesUpdateTxs(actualConfig, expectedConfig) {
720
+ if (!isMovableCollateralTokenConfig(expectedConfig) ||
721
+ !isMovableCollateralTokenConfig(actualConfig)) {
722
+ return [];
723
+ }
724
+ if (!expectedConfig.allowedRebalancingBridges) {
725
+ return [];
726
+ }
727
+ const actualAllowedBridges = getAllowedRebalancingBridgesByDomain(resolveRouterMapConfig(this.multiProvider, actualConfig.allowedRebalancingBridges ?? {}));
728
+ const expectedAllowedBridges = getAllowedRebalancingBridgesByDomain(resolveRouterMapConfig(this.multiProvider, expectedConfig.allowedRebalancingBridges));
729
+ const rebalancingBridgesToAddByDomain = objMap(expectedAllowedBridges, (domain, bridges) => {
730
+ const actualBridges = actualAllowedBridges[domain] ?? new Set();
731
+ return Array.from(difference(bridges, actualBridges));
732
+ });
733
+ const bridgesToAllow = Object.entries(rebalancingBridgesToAddByDomain).flatMap(([domain, allowedBridgesToAdd]) => {
734
+ return allowedBridgesToAdd.map((bridgeToAdd) => {
735
+ return {
736
+ chainId: this.chainId,
737
+ annotation: `Adding allowed bridge "${bridgeToAdd}" on token "${this.args.addresses.deployedTokenRoute}" on chain "${this.chainName}"`,
738
+ to: this.args.addresses.deployedTokenRoute,
739
+ data: MovableCollateralRouter__factory.createInterface().encodeFunctionData('addBridge(uint32,address)', [domain, bridgeToAdd]),
740
+ };
741
+ });
742
+ });
743
+ const approvalTxs = await this.getAllowedBridgesApprovalTxs(actualConfig, expectedConfig);
744
+ return [...bridgesToAllow, ...approvalTxs];
745
+ }
746
+ createRemoveBridgesTxs(actualConfig, expectedConfig) {
747
+ if (!isMovableCollateralTokenConfig(expectedConfig) ||
748
+ !isMovableCollateralTokenConfig(actualConfig)) {
749
+ return [];
750
+ }
751
+ if (!expectedConfig.allowedRebalancingBridges) {
752
+ return [];
753
+ }
754
+ const actualAllowedBridges = getAllowedRebalancingBridgesByDomain(resolveRouterMapConfig(this.multiProvider, actualConfig.allowedRebalancingBridges ?? {}));
755
+ const expectedAllowedBridges = getAllowedRebalancingBridgesByDomain(resolveRouterMapConfig(this.multiProvider, expectedConfig.allowedRebalancingBridges));
756
+ const rebalancingBridgesToAddByDomain = objMap(actualAllowedBridges, (domain, bridges) => {
757
+ const expectedBridges = expectedAllowedBridges[domain] ?? new Set();
758
+ return Array.from(difference(bridges, expectedBridges));
759
+ });
760
+ return Object.entries(rebalancingBridgesToAddByDomain).flatMap(([domain, allowedBridgesToAdd]) => {
761
+ return allowedBridgesToAdd.map((bridgeToAdd) => {
762
+ return {
763
+ chainId: this.chainId,
764
+ annotation: `Removing allowed bridge "${bridgeToAdd}" on token "${this.args.addresses.deployedTokenRoute}" on chain "${this.chainName}"`,
765
+ to: this.args.addresses.deployedTokenRoute,
766
+ data: MovableCollateralRouter__factory.createInterface().encodeFunctionData('removeBridge(uint32,address)', [domain, bridgeToAdd]),
767
+ };
768
+ });
769
+ });
770
+ }
771
+ createAddRebalanceTargetsUpdateTxs(actualConfig, expectedConfig) {
772
+ if (!isCrossCollateralTokenConfig(expectedConfig) ||
773
+ !isCrossCollateralTokenConfig(actualConfig)) {
774
+ return [];
775
+ }
776
+ if (!expectedConfig.rebalanceTargets) {
777
+ return [];
778
+ }
779
+ const actualTargets = getRebalanceTargetsByDomain(resolveRouterMapConfig(this.multiProvider, actualConfig.rebalanceTargets ?? {}));
780
+ const { rebalanceTargets } = resolveAndValidateRebalanceConfig(this.multiProvider, this.chainName, expectedConfig);
781
+ const expectedTargets = getRebalanceTargetsByDomain(rebalanceTargets);
782
+ const targetsToAddByDomain = objMap(expectedTargets, (domain, targets) => {
783
+ const actual = actualTargets[domain] ?? new Set();
784
+ return Array.from(difference(targets, actual));
785
+ });
786
+ return Object.entries(targetsToAddByDomain).flatMap(([domain, toAdd]) => toAdd.map((target) => ({
787
+ chainId: this.chainId,
788
+ annotation: `Adding rebalance target "${target}" for domain ${domain} on token "${this.args.addresses.deployedTokenRoute}" on chain "${this.chainName}"`,
789
+ to: this.args.addresses.deployedTokenRoute,
790
+ data: CrossCollateralRouter__factory.createInterface().encodeFunctionData('addRebalanceTarget(uint32,bytes32)', [domain, target]),
791
+ })));
792
+ }
793
+ createRemoveRebalanceTargetsTxs(actualConfig, expectedConfig) {
794
+ if (!isCrossCollateralTokenConfig(expectedConfig) ||
795
+ !isCrossCollateralTokenConfig(actualConfig)) {
796
+ return [];
797
+ }
798
+ const actualTargets = getRebalanceTargetsByDomain(resolveRouterMapConfig(this.multiProvider, actualConfig.rebalanceTargets ?? {}));
799
+ const { rebalanceTargets } = resolveAndValidateRebalanceConfig(this.multiProvider, this.chainName, expectedConfig);
800
+ const expectedTargets = getRebalanceTargetsByDomain(rebalanceTargets);
801
+ const targetsToRemoveByDomain = objMap(actualTargets, (domain, targets) => {
802
+ const expected = expectedTargets[domain] ?? new Set();
803
+ return Array.from(difference(targets, expected));
804
+ });
805
+ return Object.entries(targetsToRemoveByDomain).flatMap(([domain, toRemove]) => toRemove.map((target) => ({
806
+ chainId: this.chainId,
807
+ annotation: `Removing rebalance target "${target}" for domain ${domain} on token "${this.args.addresses.deployedTokenRoute}" on chain "${this.chainName}"`,
808
+ to: this.args.addresses.deployedTokenRoute,
809
+ data: CrossCollateralRouter__factory.createInterface().encodeFunctionData('removeRebalanceTarget(uint32,bytes32)', [domain, target]),
810
+ })));
811
+ }
812
+ createSetRecipientsUpdateTxs(actualConfig, expectedConfig) {
813
+ if (!isCrossCollateralTokenConfig(expectedConfig) ||
814
+ !isCrossCollateralTokenConfig(actualConfig)) {
815
+ return [];
816
+ }
817
+ if (!expectedConfig.rebalanceRecipients) {
818
+ return [];
819
+ }
820
+ const actualRecipients = getRebalanceRecipientsByDomain(resolveRouterMapConfig(this.multiProvider, actualConfig.rebalanceRecipients ?? {}));
821
+ const { rebalanceRecipients } = resolveAndValidateRebalanceConfig(this.multiProvider, this.chainName, expectedConfig);
822
+ const expectedRecipients = getRebalanceRecipientsByDomain(rebalanceRecipients);
823
+ const recipientsToSetByDomain = objDiff(expectedRecipients, actualRecipients);
824
+ return Object.entries(recipientsToSetByDomain).map(([domain, recipient]) => ({
825
+ chainId: this.chainId,
826
+ annotation: `Setting rebalance recipient "${recipient}" for domain ${domain} on token "${this.args.addresses.deployedTokenRoute}" on chain "${this.chainName}"`,
827
+ to: this.args.addresses.deployedTokenRoute,
828
+ data: CrossCollateralRouter__factory.createInterface().encodeFunctionData('setRecipient(uint32,bytes32)', [domain, recipient]),
829
+ }));
830
+ }
831
+ createRemoveRecipientsTxs(actualConfig, expectedConfig) {
832
+ if (!isCrossCollateralTokenConfig(expectedConfig) ||
833
+ !isCrossCollateralTokenConfig(actualConfig)) {
834
+ return [];
835
+ }
836
+ const actualRecipients = getRebalanceRecipientsByDomain(resolveRouterMapConfig(this.multiProvider, actualConfig.rebalanceRecipients ?? {}));
837
+ const { rebalanceRecipients } = resolveAndValidateRebalanceConfig(this.multiProvider, this.chainName, expectedConfig);
838
+ const expectedRecipients = getRebalanceRecipientsByDomain(rebalanceRecipients);
839
+ const recipientDomainsToRemove = Array.from(difference(new Set(Object.keys(actualRecipients)), new Set(Object.keys(expectedRecipients))));
840
+ return recipientDomainsToRemove.map((domain) => ({
841
+ chainId: this.chainId,
842
+ annotation: `Removing rebalance recipient for domain ${domain} on token "${this.args.addresses.deployedTokenRoute}" on chain "${this.chainName}"`,
843
+ to: this.args.addresses.deployedTokenRoute,
844
+ data: CrossCollateralRouter__factory.createInterface().encodeFunctionData('removeRecipient(uint32)', [domain]),
845
+ }));
846
+ }
847
+ /**
848
+ * Revokes legacy standing ERC20 allowances for bridges that remain allowlisted
849
+ * after an in-place upgrade.
850
+ *
851
+ * Pre-atomic-rebalancing routers granted `type(uint256).max` to every enrolled
852
+ * bridge in `_addBridge` (the collateral token) and, via the legacy
853
+ * `approvedTokens` grant path, to arbitrary tokens. After upgrading, bridges that
854
+ * are removed have their allowance revoked on-chain by `_removeBridge`, and
855
+ * newly-added bridges never received a legacy allowance. Bridges that REMAIN
856
+ * allowlisted, however, keep those stale max allowances until the next rebalance.
857
+ * This method emits txs that set the collateral token AND any configured
858
+ * `approvedTokens` allowances back to zero so an allowlisted bridge has no
859
+ * out-of-band transferFrom power over the router balance.
860
+ *
861
+ * `approveTokenForBridge` only has revoke semantics on the new implementation;
862
+ * on legacy impls the same selector GRANTS max. Revoke txs are therefore emitted
863
+ * unless the router is on a legacy impl that is not being upgraded this run, so
864
+ * they always execute against the new revoke-semantics impl — whether this run
865
+ * upgrades it in place or it was already upgraded (which keeps cleanup retryable
866
+ * if an earlier run upgraded but its revoke txs never executed).
867
+ */
868
+ async createRevokeStaleBridgeAllowancesTxs(actualConfig, expectedConfig, upgradeScheduled) {
869
+ if (!isMovableCollateralTokenConfig(expectedConfig) ||
870
+ !isMovableCollateralTokenConfig(actualConfig)) {
871
+ return [];
872
+ }
873
+ if (!expectedConfig.allowedRebalancingBridges) {
874
+ return [];
875
+ }
876
+ // `approveTokenForBridge` only revokes on the new implementation; on a legacy
877
+ // impl the same selector GRANTS max. Skip only when the router is on a legacy
878
+ // impl and is NOT being upgraded this run — emitting there would re-create the
879
+ // allowance. Otherwise the revoke executes against the new impl: either because
880
+ // this run upgrades it in place, or because it is already upgraded. The latter
881
+ // keeps cleanup retryable if a prior run upgraded but its revoke txs never
882
+ // executed; the non-zero on-chain allowance check below filters out routers
883
+ // with nothing stale left to clear.
884
+ if (!actualConfig.contractVersion ||
885
+ (bridgeApprovalGrantsMaxAllowance(actualConfig.contractVersion) &&
886
+ !upgradeScheduled)) {
887
+ return [];
888
+ }
889
+ const provider = this.multiProvider.getProvider(this.chainId);
890
+ // The collateral token backing the router. Native routes (address(0)) have no
891
+ // ERC20 collateral, but may still carry stale `approvedTokens` grants.
892
+ const collateralToken = await MovableCollateralRouter__factory.connect(this.args.addresses.deployedTokenRoute, provider).token();
893
+ // Bridge addresses currently allowlisted on-chain (across all domains).
894
+ // Allowances are keyed by (router, bridge) and are domain-agnostic, so we match
895
+ // bridges by address rather than per domain — this catches a bridge moved between
896
+ // domains, whose stale allowance a per-domain comparison would miss.
897
+ const actualBridges = new Set();
898
+ for (const bridges of Object.values(getAllowedRebalancingBridgesByDomain(resolveRouterMapConfig(this.multiProvider, actualConfig.allowedRebalancingBridges ?? {})))) {
899
+ for (const bridge of bridges) {
900
+ actualBridges.add(bridge);
901
+ }
902
+ }
903
+ // For each bridge that remains allowlisted (present in both configs by address),
904
+ // the tokens whose stale legacy allowance must be revoked: the collateral token
905
+ // plus any `approvedTokens` the legacy grant path could have approved. Removed
906
+ // bridges are revoked on-chain by `_removeBridge`; newly added bridges never held
907
+ // a legacy allowance. `actualConfig` does not derive approvedTokens, so the
908
+ // expected config is the signal of what was granted; each candidate is gated on a
909
+ // non-zero on-chain allowance below.
910
+ const tokensByBridge = new Map();
911
+ for (const bridgeConfigs of Object.values(resolveRouterMapConfig(this.multiProvider, expectedConfig.allowedRebalancingBridges))) {
912
+ for (const { bridge, approvedTokens } of bridgeConfigs) {
913
+ const normalizedBridge = normalizeAddressEvm(bridge);
914
+ if (!actualBridges.has(normalizedBridge)) {
915
+ continue;
916
+ }
917
+ const tokens = tokensByBridge.get(normalizedBridge) ?? new Set();
918
+ if (!isZeroishAddress(collateralToken)) {
919
+ tokens.add(normalizeAddressEvm(collateralToken));
920
+ }
921
+ for (const token of approvedTokens ?? []) {
922
+ tokens.add(normalizeAddressEvm(token));
923
+ }
924
+ tokensByBridge.set(normalizedBridge, tokens);
925
+ }
926
+ }
927
+ const revokeTxs = [];
928
+ for (const [bridge, tokensToRevoke] of tokensByBridge) {
929
+ for (const token of tokensToRevoke) {
930
+ const allowance = await IERC20__factory.connect(token, provider).allowance(this.args.addresses.deployedTokenRoute, bridge);
931
+ if (allowance.isZero()) {
932
+ continue;
933
+ }
934
+ revokeTxs.push({
935
+ chainId: this.chainId,
936
+ annotation: `Revoking legacy bridge allowance for token "${token}" and bridge "${bridge}" on "${this.args.addresses.deployedTokenRoute}" on chain "${this.chainName}"`,
937
+ to: this.args.addresses.deployedTokenRoute,
938
+ data: MovableCollateralRouter__factory.createInterface().encodeFunctionData('approveTokenForBridge(address,address)', [token, bridge]),
939
+ });
940
+ }
941
+ }
942
+ return revokeTxs;
943
+ }
944
+ createAddRemoteOutputAssetsTxs(actualConfig, expectedConfig) {
945
+ if (!isEverclearTokenBridgeConfig(expectedConfig) ||
946
+ !isEverclearTokenBridgeConfig(actualConfig)) {
947
+ return [];
948
+ }
949
+ const actualOutputAssets = resolveRouterMapConfig(this.multiProvider, actualConfig.outputAssets);
950
+ const expectedOutputAssets = resolveRouterMapConfig(this.multiProvider, expectedConfig.outputAssets);
951
+ const outputAssetsToAdd = objDiff(expectedOutputAssets, actualOutputAssets, (address, address2) => addressToBytes32(address) === addressToBytes32(address2));
952
+ if (isObjEmpty(outputAssetsToAdd)) {
953
+ return [];
954
+ }
955
+ const assets = Object.entries(outputAssetsToAdd).map(([domainId, outputAsset]) => ({
956
+ destination: parseInt(domainId),
957
+ outputAsset: addressToBytes32(outputAsset),
958
+ }));
959
+ return [
960
+ {
961
+ chainId: this.multiProvider.getEvmChainId(this.chainId),
962
+ to: this.args.addresses.deployedTokenRoute,
963
+ annotation: `Adding "${Object.keys(assets)}" output assets for token "${this.args.addresses.deployedTokenRoute}" on chain "${this.chainName}"`,
964
+ data: EverclearTokenBridge__factory.createInterface().encodeFunctionData('setOutputAssetsBatch((uint32,bytes32)[])', [assets]),
965
+ },
966
+ ];
967
+ }
968
+ createRemoveRemoteOutputAssetsTxs(actualConfig, expectedConfig) {
969
+ if (!isEverclearTokenBridgeConfig(expectedConfig) ||
970
+ !isEverclearTokenBridgeConfig(actualConfig)) {
971
+ return [];
972
+ }
973
+ const actualOutputAssets = resolveRouterMapConfig(this.multiProvider, actualConfig.outputAssets);
974
+ const expectedOutputAssets = resolveRouterMapConfig(this.multiProvider, expectedConfig.outputAssets);
975
+ const outputAssetsToRemove = Array.from(difference(new Set(objKeys(actualOutputAssets)), new Set(objKeys(expectedOutputAssets))));
976
+ if (outputAssetsToRemove.length === 0) {
977
+ return [];
978
+ }
979
+ const assets = outputAssetsToRemove.map((domainId) => ({
980
+ destination: domainId,
981
+ outputAsset: ZERO_ADDRESS_HEX_32,
982
+ }));
983
+ return [
984
+ {
985
+ chainId: this.multiProvider.getEvmChainId(this.chainId),
986
+ to: this.args.addresses.deployedTokenRoute,
987
+ annotation: `Removing "${outputAssetsToRemove}" output assets from token "${this.args.addresses.deployedTokenRoute}" on chain "${this.chainName}"`,
988
+ data: EverclearTokenBridge__factory.createInterface().encodeFunctionData('setOutputAssetsBatch((uint32,bytes32)[])', [assets]),
989
+ },
990
+ ];
991
+ }
992
+ createUpdateEverclearFeeParamsTxs(actualConfig, expectedConfig) {
993
+ if (!isEverclearTokenBridgeConfig(expectedConfig) ||
994
+ !isEverclearTokenBridgeConfig(actualConfig)) {
995
+ return [];
996
+ }
997
+ if (deepEquals(expectedConfig.everclearFeeParams, actualConfig.everclearFeeParams)) {
998
+ return [];
999
+ }
1000
+ const resolvedEverclearExpectedFeeConfig = resolveRouterMapConfig(this.multiProvider, expectedConfig.everclearFeeParams);
1001
+ const resolvedActualEverclearFeeConfig = resolveRouterMapConfig(this.multiProvider, actualConfig.everclearFeeParams);
1002
+ const feesToSet = objFilter(resolvedEverclearExpectedFeeConfig, (domainId, currentDomainConfig) => {
1003
+ return (isNullish(resolvedActualEverclearFeeConfig[Number(domainId)]) ||
1004
+ !deepEquals(currentDomainConfig, resolvedActualEverclearFeeConfig[Number(domainId)]));
1005
+ });
1006
+ return Object.entries(feesToSet).map(([domainId, feeConfig]) => {
1007
+ const { deadline, fee, signature } = feeConfig;
1008
+ // Deadline is in seconds
1009
+ const humanReadableDeadline = new Date(deadline * 1000).toISOString();
1010
+ return {
1011
+ annotation: `Setting Everclear fee params with deadline "${humanReadableDeadline}" for domain "${domainId}" on token "${this.args.addresses.deployedTokenRoute}" and chain "${this.chainName}"`,
1012
+ chainId: this.multiProvider.getEvmChainId(this.chainName),
1013
+ to: this.args.addresses.deployedTokenRoute,
1014
+ data: EverclearTokenBridge__factory.createInterface().encodeFunctionData('setFeeParams', [domainId, fee, deadline, signature]),
1015
+ };
1016
+ });
1017
+ }
1018
+ createRemoveEverclearFeeParamsTxs(actualConfig, expectedConfig) {
1019
+ if (!isEverclearTokenBridgeConfig(expectedConfig) ||
1020
+ !isEverclearTokenBridgeConfig(actualConfig)) {
1021
+ return [];
1022
+ }
1023
+ const resolvedEverclearExpectedFeeConfig = resolveRouterMapConfig(this.multiProvider, expectedConfig.everclearFeeParams);
1024
+ const resolvedActualEverclearFeeConfig = resolveRouterMapConfig(this.multiProvider, actualConfig.everclearFeeParams);
1025
+ const outputAssetsToRemove = Array.from(difference(new Set(objKeys(resolvedActualEverclearFeeConfig)), new Set(objKeys(resolvedEverclearExpectedFeeConfig))));
1026
+ if (outputAssetsToRemove.length === 0) {
1027
+ return [];
1028
+ }
1029
+ return outputAssetsToRemove.map((domainId) => {
1030
+ return {
1031
+ annotation: `Removing Everclear fee params for domain "${domainId}" on token "${this.args.addresses.deployedTokenRoute}" and chain "${this.chainName}"`,
1032
+ chainId: this.multiProvider.getEvmChainId(this.chainName),
1033
+ to: this.args.addresses.deployedTokenRoute,
1034
+ data: EverclearTokenBridge__factory.createInterface().encodeFunctionData('setFeeParams',
1035
+ // Setting default values to reset the config for the provided domain
1036
+ [domainId, 0, 0, '0x']),
1037
+ };
1038
+ });
1039
+ }
1040
+ /**
1041
+ * Create a transaction to update the remote routers for the Warp Route contract.
1042
+ *
1043
+ * @param actualConfig - The on-chain router configuration, including the remoteRouters array.
1044
+ * @param expectedConfig - The expected token router configuration.
1045
+ * @returns A array with a single Ethereum transaction that need to be executed to enroll the routers
1046
+ */
1047
+ createSetDestinationGasUpdateTxs(actualConfig, expectedConfig) {
1048
+ // OFT contracts don't have GasRouter interface — no destination gas config
1049
+ if (isOftTokenConfig(expectedConfig)) {
1050
+ return [];
1051
+ }
1052
+ const updateTransactions = [];
1053
+ if (!expectedConfig.destinationGas) {
1054
+ return [];
1055
+ }
1056
+ assert(actualConfig.destinationGas, 'actualDestinationGas is undefined');
1057
+ assert(expectedConfig.destinationGas, 'expectedDestinationGas is undefined');
1058
+ // Only set gas for domains that will have routers enrolled after the update.
1059
+ // For CrossCollateralRouter configs, also include domains from crossCollateralRouters.
1060
+ const resolvedExpectedRemoteRouters = resolveRouterMapConfig(this.multiProvider, expectedConfig.remoteRouters ?? {});
1061
+ const expectedRouterDomains = new Set(Object.keys(resolvedExpectedRemoteRouters).map(Number));
1062
+ // Include MC-enrolled router domains
1063
+ if (isCrossCollateralTokenConfig(expectedConfig) &&
1064
+ expectedConfig.crossCollateralRouters) {
1065
+ const localDomain = this.multiProvider.getDomainId(this.chainName);
1066
+ const resolvedEnrolled = resolveRouterMapConfig(this.multiProvider, expectedConfig.crossCollateralRouters);
1067
+ for (const domain of Object.keys(resolvedEnrolled).map(Number)) {
1068
+ if (domain === localDomain)
1069
+ continue;
1070
+ expectedRouterDomains.add(domain);
1071
+ }
1072
+ }
1073
+ if (expectedRouterDomains.size === 0 &&
1074
+ Object.keys(expectedConfig.destinationGas).length > 0) {
1075
+ throw new Error(`destinationGas is set but remoteRouters and crossCollateralRouters are empty. ` +
1076
+ `Cannot configure gas for domains without corresponding router enrollments.`);
1077
+ }
1078
+ const actualDestinationGas = resolveRouterMapConfig(this.multiProvider, actualConfig.destinationGas);
1079
+ const expectedDestinationGas = resolveRouterMapConfig(this.multiProvider, expectedConfig.destinationGas);
1080
+ // Filter to only domains that will have routers enrolled
1081
+ const filteredExpectedGas = Object.fromEntries(Object.entries(expectedDestinationGas).filter(([domain]) => expectedRouterDomains.has(Number(domain))));
1082
+ // Filter actual gas to the same domains for comparison
1083
+ const filteredActualGas = Object.fromEntries(Object.entries(actualDestinationGas).filter(([domain]) => expectedRouterDomains.has(Number(domain))));
1084
+ if (!deepEquals(filteredActualGas, filteredExpectedGas)) {
1085
+ // Convert { 1: 2, 2: 3, ... } to [{ 1: 2 }, { 2: 3 }]
1086
+ const gasRouterConfigs = [];
1087
+ objMap(filteredExpectedGas, (domain, gas) => {
1088
+ gasRouterConfigs.push({
1089
+ domain,
1090
+ gas,
1091
+ });
1092
+ });
1093
+ const contractToUpdate = GasRouter__factory.connect(this.args.addresses.deployedTokenRoute, this.multiProvider.getProvider(this.domainId));
1094
+ updateTransactions.push({
1095
+ chainId: this.chainId,
1096
+ annotation: `Setting destination gas for ${this.args.addresses.deployedTokenRoute} on ${this.args.chain}`,
1097
+ to: contractToUpdate.address,
1098
+ data: contractToUpdate.interface.encodeFunctionData('setDestinationGas((uint32,uint256)[])', [gasRouterConfigs]),
1099
+ });
1100
+ }
1101
+ return updateTransactions;
1102
+ }
1103
+ /**
1104
+ * Create transactions to update an existing ISM config, or deploy a new ISM and return a tx to setInterchainSecurityModule
1105
+ *
1106
+ * @param actualConfig - The on-chain router configuration, including the ISM configuration, and address.
1107
+ * @param expectedConfig - The expected token router configuration, including the ISM configuration.
1108
+ * @returns Ethereum transaction that need to be executed to update the ISM configuration.
1109
+ */
1110
+ async createIsmUpdateTxs(actualConfig, expectedConfig, opaqueHybridAddress) {
1111
+ const updateTransactions = [];
1112
+ if (!expectedConfig.interchainSecurityModule) {
1113
+ return [];
1114
+ }
1115
+ const actualDeployedIsm = derivedIsmAddress(actualConfig);
1116
+ // Try to update (may also deploy) Ism with the expected config
1117
+ const { deployedIsm: expectedDeployedIsm, updateTransactions: ismUpdateTransactions, } = await this.deployOrUpdateIsm(actualConfig, expectedConfig, opaqueHybridAddress);
1118
+ // If an ISM is updated in-place, push the update txs
1119
+ updateTransactions.push(...ismUpdateTransactions);
1120
+ // If a new ISM is deployed, push the setInterchainSecurityModule tx
1121
+ if (!eqAddress(actualDeployedIsm, expectedDeployedIsm)) {
1122
+ const contractToUpdate = MailboxClient__factory.connect(this.args.addresses.deployedTokenRoute, this.multiProvider.getProvider(this.domainId));
1123
+ updateTransactions.push({
1124
+ chainId: this.chainId,
1125
+ annotation: `Setting ISM for Warp Route to ${expectedDeployedIsm}`,
1126
+ to: contractToUpdate.address,
1127
+ data: contractToUpdate.interface.encodeFunctionData('setInterchainSecurityModule', [expectedDeployedIsm]),
1128
+ });
1129
+ }
1130
+ return updateTransactions;
1131
+ }
1132
+ async createHookUpdateTxs(actualConfig, expectedConfig) {
1133
+ return this.createHookAndPredicateUpdateTxs(actualConfig, expectedConfig);
1134
+ }
1135
+ /**
1136
+ * Deploys hook updates and predicate wrapper together so the post-update hook address
1137
+ * is available to deployAndConfigure without a stale on-chain read.
1138
+ */
1139
+ async createHookAndPredicateUpdateTxs(actualConfig, expectedConfig, opaqueHybridAddress) {
1140
+ let hookTransactions = [];
1141
+ let newHookAddress;
1142
+ // Explicit type annotation narrows away the undefined that TypeScript infers
1143
+ // from the RouterConfig & DerivedMailboxClientConfig intersection.
1144
+ const actualHook = actualConfig.hook;
1145
+ // Predicate removal: on-chain wrapper exists but expected config omits it.
1146
+ // When the user provides an explicit hook that differs from the underlying hook
1147
+ // (predicate stripped), the hook-diff path generates the setHook to the new hook.
1148
+ // Otherwise (no hook, or a stale aggregation from a warp read), the
1149
+ // needsPredicateRemoval block below clears the hook to zero so the router uses the
1150
+ // mailbox default — the user who removed predicateWrapper without supplying a
1151
+ // replacement hook wants the default behavior restored, not the underlying sub-hook
1152
+ // silently preserved.
1153
+ const actualPredicateWrapper = 'predicateWrapper' in actualConfig
1154
+ ? actualConfig.predicateWrapper
1155
+ : undefined;
1156
+ const expectedPredicateWrapper = 'predicateWrapper' in expectedConfig
1157
+ ? expectedConfig.predicateWrapper
1158
+ : undefined;
1159
+ const needsPredicateRemoval = actualPredicateWrapper != null && !expectedPredicateWrapper;
1160
+ const needsDelayedFlowRemoval = typeof expectedConfig.hook === 'string' &&
1161
+ isZeroishAddress(expectedConfig.hook) &&
1162
+ typeof actualHook === 'object' &&
1163
+ collectHybridHookNodes(actualHook).some(({ type }) => type === HookType.DELAYED_FLOW_ROUTER);
1164
+ // Treat a zero-address hook the same as "no explicit hook": expandWarpDeployConfig
1165
+ // sets hook: zeroAddress as a default when the user config omits the hook field.
1166
+ // EvmHookModule.update(zeroAddress) returns [] early without updating deployedHook,
1167
+ // so a zero-address target produces no setHook tx and the predicate removal branch
1168
+ // would never be reached. Exclude zero addresses so needsPredicateRemoval can fire.
1169
+ if (expectedConfig.hook &&
1170
+ (typeof expectedConfig.hook !== 'string' ||
1171
+ !isZeroishAddress(expectedConfig.hook))) {
1172
+ const proxyAdminAddress = expectedConfig.proxyAdmin?.address ?? actualConfig.proxyAdmin?.address;
1173
+ assert(proxyAdminAddress, 'ProxyAdmin address is undefined');
1174
+ // The reader leaves the PREDICATE sub-hook inside actualConfig.hook
1175
+ // (e.g. Agg([Predicate, IGP])). When expectedConfig is derived from
1176
+ // actualConfig (e.g. during the enrollment step after initial deploy, OR
1177
+ // during a read→edit→apply round-trip where the operator removed predicateWrapper
1178
+ // but kept the hook field unchanged), expectedConfig.hook carries the same
1179
+ // aggregation. Strip the predicate from BOTH sides so the hook diff sees the bare
1180
+ // hook (e.g. IGP) on both sides and doesn't generate a spurious setHook.
1181
+ // The needsPredicateRemoval block below then fires to clear the hook to zero.
1182
+ const shouldStripHookForComparison = !!expectedPredicateWrapper || needsPredicateRemoval;
1183
+ const actualHookForComparison = shouldStripHookForComparison
1184
+ ? stripPredicateSubHook(actualHook)
1185
+ : actualHook;
1186
+ const expectedHookForComparison = shouldStripHookForComparison && expectedConfig.hook
1187
+ ? stripPredicateSubHook(expectedConfig.hook)
1188
+ : expectedConfig.hook;
1189
+ const result = await getEvmHookUpdateTransactions(this.args.addresses.deployedTokenRoute, {
1190
+ actualConfig: actualHookForComparison,
1191
+ expectedConfig: expectedHookForComparison,
1192
+ ccipContractCache: this.ccipContractCache,
1193
+ contractVerifier: this.contractVerifier,
1194
+ evmChainName: this.chainName,
1195
+ hookAndIsmFactories: extractIsmAndHookFactoryAddresses(this.args.addresses),
1196
+ setHookFunctionCallEncoder: (addr) => MailboxClient__factory.createInterface().encodeFunctionData('setHook', [addr]),
1197
+ logger: this.logger,
1198
+ mailbox: actualConfig.mailbox,
1199
+ multiProvider: this.multiProvider,
1200
+ proxyAdminAddress,
1201
+ rateLimitedSender: this.args.addresses.deployedTokenRoute,
1202
+ opaqueHybridAddresses: opaqueHybridAddress
1203
+ ? [opaqueHybridAddress]
1204
+ : undefined,
1205
+ });
1206
+ hookTransactions = result.transactions;
1207
+ newHookAddress = result.newHookAddress;
1208
+ }
1209
+ // Predicate and delayed-flow removals clear the custom hook when no
1210
+ // replacement was deployed. Delayed flow requires an explicit zero target;
1211
+ // omission retains the existing hook like every ordinary update.
1212
+ if ((needsPredicateRemoval || needsDelayedFlowRemoval) && !newHookAddress) {
1213
+ const currentAddress = typeof actualHook === 'string' ? actualHook : actualHook.address;
1214
+ if (!isZeroishAddress(currentAddress)) {
1215
+ this.logger.debug({ chain: this.chainName }, 'Removing custom hook: generating setHook(zero)');
1216
+ hookTransactions.push({
1217
+ annotation: needsDelayedFlowRemoval
1218
+ ? 'Remove delayed-flow hook (router will use mailbox default)'
1219
+ : 'Remove predicate wrapper: clear custom hook (router will use mailbox default)',
1220
+ chainId: this.chainId,
1221
+ to: this.args.addresses.deployedTokenRoute,
1222
+ data: MailboxClient__factory.createInterface().encodeFunctionData('setHook', [constants.AddressZero]),
1223
+ });
1224
+ }
1225
+ }
1226
+ const { transactions: predicateTransactions, deploysNewWrapper } = await this.createPredicateWrapperUpdateTxs(actualConfig, expectedConfig, newHookAddress);
1227
+ // When predicate wrapper is being deployed, its setHook(aggregation) sets the final
1228
+ // router hook and already incorporates newHookAddress inside the aggregation.
1229
+ // Drop the intermediate setHook(newHookAddress) from hookTransactions to avoid a
1230
+ // redundant write that would be immediately overwritten.
1231
+ //
1232
+ // IMPORTANT: only drop when a NEW wrapper is being deployed. The ownership-only
1233
+ // path (deploysNewWrapper=false) must not suppress the hook update even though
1234
+ // predicateTransactions is non-empty.
1235
+ const effectiveHookTransactions = hookTransactions.length > 0 && deploysNewWrapper
1236
+ ? hookTransactions.filter((tx) => !(tx.to &&
1237
+ eqAddress(tx.to, this.args.addresses.deployedTokenRoute) &&
1238
+ tx.data?.startsWith(MailboxClient__factory.createInterface().getSighash('setHook'))))
1239
+ : hookTransactions;
1240
+ return [...effectiveHookTransactions, ...predicateTransactions];
1241
+ }
1242
+ /**
1243
+ * Searches the current on-chain hook tree for a PredicateRouterWrapper that
1244
+ * matches by registry and policyId. Returns the wrapper address and its current
1245
+ * on-chain owner when found, undefined otherwise.
1246
+ *
1247
+ * Uses unbounded recursion into aggregation hooks (consistent with
1248
+ * EvmTokenAdapter.findPredicateWrapperInHook and EvmWarpRouteReader.findPredicateAddressInHook).
1249
+ */
1250
+ async findDeployedPredicateWrapper(actualConfig, expectedPredicateConfig) {
1251
+ const hookAddress = derivedHookAddress(actualConfig);
1252
+ if (!hookAddress || isZeroishAddress(hookAddress))
1253
+ return undefined;
1254
+ try {
1255
+ const provider = this.multiProvider.getProvider(this.domainId);
1256
+ return await this.searchPredicateInHook(hookAddress, provider, expectedPredicateConfig);
1257
+ }
1258
+ catch (error) {
1259
+ this.logger.debug({ chain: this.chainName, error }, 'Error checking predicate wrapper deployment');
1260
+ }
1261
+ return undefined;
1262
+ }
1263
+ /**
1264
+ * Recursively searches a hook tree for a matching PredicateRouterWrapper.
1265
+ * Descends into StaticAggregationHook sub-hooks without depth limit.
1266
+ */
1267
+ async searchPredicateInHook(hookAddr, provider, expectedPredicateConfig) {
1268
+ const match = await this.matchPredicateWrapper(hookAddr, provider, expectedPredicateConfig);
1269
+ if (match)
1270
+ return match;
1271
+ let subHooks;
1272
+ try {
1273
+ subHooks = await StaticAggregationHook__factory.connect(hookAddr, provider).hooks('0x');
1274
+ }
1275
+ catch {
1276
+ // Any call failure means hookAddr is not a StaticAggregationHook.
1277
+ // HyperlaneSmartProvider wraps CALL_EXCEPTION as "Invalid response from provider"
1278
+ // with code: undefined, so checking error.code is insufficient.
1279
+ return undefined;
1280
+ }
1281
+ for (const subHook of subHooks) {
1282
+ const found = await this.searchPredicateInHook(subHook, provider, expectedPredicateConfig);
1283
+ if (found)
1284
+ return found;
1285
+ }
1286
+ return undefined;
1287
+ }
1288
+ /**
1289
+ * Checks whether a single hook address is a PredicateRouterWrapper matching
1290
+ * the warp route and expected config. Returns the match or undefined.
1291
+ */
1292
+ async matchPredicateWrapper(hookAddr, provider, expectedPredicateConfig) {
1293
+ try {
1294
+ const predicateWrapper = PredicateRouterWrapper__factory.connect(hookAddr, provider);
1295
+ // Verify identity: warpRoute + hookType confirm it's a PredicateRouterWrapper
1296
+ // for this route. Then compare registry + policyId so config rotations
1297
+ // (e.g. changing compliance policy) trigger a redeploy rather than silently no-op.
1298
+ const [warpRoute, hookType, onchainRegistry, onchainPolicyId, onchainOwner,] = await Promise.all([
1299
+ predicateWrapper.warpRoute(),
1300
+ predicateWrapper.hookType(),
1301
+ predicateWrapper.getRegistry(),
1302
+ predicateWrapper.getPolicyID(),
1303
+ predicateWrapper.owner(),
1304
+ ]);
1305
+ if (eqAddress(warpRoute, this.args.addresses.deployedTokenRoute) &&
1306
+ hookType === OnchainHookType.PREDICATE_ROUTER_WRAPPER &&
1307
+ eqAddress(onchainRegistry, expectedPredicateConfig.predicateRegistry) &&
1308
+ onchainPolicyId === expectedPredicateConfig.policyId) {
1309
+ return { address: hookAddr, onchainOwner };
1310
+ }
1311
+ }
1312
+ catch {
1313
+ // Any call failure means hookAddr is not a PredicateRouterWrapper.
1314
+ // HyperlaneSmartProvider wraps CALL_EXCEPTION as "Invalid response from provider"
1315
+ // with code: undefined, so checking error.code === 'CALL_EXCEPTION' is insufficient.
1316
+ return undefined;
1317
+ }
1318
+ return undefined;
1319
+ }
1320
+ /**
1321
+ * Check if predicate wrapper is already deployed with fully matching config
1322
+ * (registry, policyId, and owner).
1323
+ *
1324
+ * @param actualConfig - The on-chain router configuration.
1325
+ * @param expectedPredicateConfig - The expected predicate wrapper configuration.
1326
+ * @returns True if wrapper is deployed with all fields matching, false otherwise.
1327
+ */
1328
+ async isPredicateWrapperDeployed(actualConfig, expectedPredicateConfig) {
1329
+ const found = await this.findDeployedPredicateWrapper(actualConfig, expectedPredicateConfig);
1330
+ return (found !== undefined &&
1331
+ eqAddress(found.onchainOwner, expectedPredicateConfig.owner));
1332
+ }
1333
+ /**
1334
+ * Create transactions to deploy predicate wrapper and update hook.
1335
+ *
1336
+ * @param actualConfig - The on-chain router configuration.
1337
+ * @param expectedConfig - The expected token router configuration.
1338
+ * @returns transactions to execute and whether a new wrapper is being deployed.
1339
+ * deploysNewWrapper=true means the predicate emits its own setHook(aggregation)
1340
+ * that supersedes any hook update in the same batch.
1341
+ */
1342
+ async createPredicateWrapperUpdateTxs(actualConfig, expectedConfig, pendingHookAddress) {
1343
+ // Only proceed if expectedConfig has predicateWrapper
1344
+ if (!('predicateWrapper' in expectedConfig) ||
1345
+ !expectedConfig.predicateWrapper) {
1346
+ return { transactions: [], deploysNewWrapper: false };
1347
+ }
1348
+ const predicateWrapperConfig = PredicateWrapperConfigSchema.parse(expectedConfig.predicateWrapper);
1349
+ // Check if a wrapper matching by registry+policyId already exists on-chain.
1350
+ // If so, only a transferOwnership tx is needed (not a full redeploy).
1351
+ const existingWrapper = await this.findDeployedPredicateWrapper(actualConfig, predicateWrapperConfig);
1352
+ if (existingWrapper) {
1353
+ if (eqAddress(existingWrapper.onchainOwner, predicateWrapperConfig.owner)) {
1354
+ this.logger.debug({ chain: this.chainName }, 'Predicate wrapper already deployed with matching config, skipping');
1355
+ return { transactions: [], deploysNewWrapper: false };
1356
+ }
1357
+ // Owner changed — generate a transferOwnership tx without redeploying.
1358
+ this.logger.debug({ chain: this.chainName, wrapper: existingWrapper.address }, 'Predicate wrapper owner changed, generating transferOwnership transaction');
1359
+ const transferOwnershipTx = await PredicateRouterWrapper__factory.connect(existingWrapper.address, this.multiProvider.getProvider(this.chainName)).populateTransaction.transferOwnership(predicateWrapperConfig.owner);
1360
+ return {
1361
+ transactions: [
1362
+ {
1363
+ ...transferOwnershipTx,
1364
+ chainId: this.chainId,
1365
+ annotation: `Transferring predicate wrapper ownership to ${predicateWrapperConfig.owner}`,
1366
+ },
1367
+ ],
1368
+ deploysNewWrapper: false,
1369
+ };
1370
+ }
1371
+ const staticAggregationHookFactory = this.args.addresses.staticAggregationHookFactory;
1372
+ if (!staticAggregationHookFactory) {
1373
+ throw new Error(`staticAggregationHookFactory not found for ${this.chainName}. Ensure proxy factories are deployed.`);
1374
+ }
1375
+ const signer = this.multiProvider.getSigner(this.chainName);
1376
+ const factory = StaticAggregationHookFactory__factory.connect(staticAggregationHookFactory, signer);
1377
+ const predicateDeployer = new PredicateWrapperDeployer(this.multiProvider, factory, this.logger);
1378
+ // Deploy predicate wrapper and get addresses.
1379
+ // Pass token type to deploy the appropriate wrapper.
1380
+ // Pass pendingHookAddress (if any) so deployAndConfigure uses the post-update hook
1381
+ // instead of reading the stale on-chain value when hook and predicate wrapper are
1382
+ // both being changed in the same update() call.
1383
+ const result = await predicateDeployer.deployAndConfigure(this.chainName, this.args.addresses.deployedTokenRoute, predicateWrapperConfig, expectedConfig.type, pendingHookAddress);
1384
+ this.logger.info({
1385
+ chain: this.chainName,
1386
+ wrapper: result.wrapperAddress,
1387
+ aggregationHook: result.aggregationHookAddress,
1388
+ }, 'Predicate wrapper deployed, returning setHook transaction');
1389
+ return {
1390
+ transactions: [
1391
+ {
1392
+ annotation: 'Set aggregation hook wrapping PredicateRouterWrapper on warp route',
1393
+ chainId: this.chainId,
1394
+ ...result.setHookTx,
1395
+ },
1396
+ ],
1397
+ deploysNewWrapper: true,
1398
+ };
1399
+ }
1400
+ createFeeHookUpdateTxs(actualConfig, expectedConfig) {
1401
+ if (isOftTokenConfig(expectedConfig))
1402
+ return [];
1403
+ const expectedFeeHook = expectedConfig.feeHook;
1404
+ const actualFeeHook = actualConfig.feeHook;
1405
+ // No change needed
1406
+ if (!expectedFeeHook && !actualFeeHook)
1407
+ return [];
1408
+ // Unset in expected config → leave the on-chain feeHook unchanged.
1409
+ // Clearing an existing feeHook requires an explicit address(0) in the config.
1410
+ if (!expectedFeeHook && actualFeeHook)
1411
+ return [];
1412
+ if (expectedFeeHook &&
1413
+ actualFeeHook &&
1414
+ eqAddress(expectedFeeHook, actualFeeHook))
1415
+ return [];
1416
+ const newFeeHook = expectedFeeHook ?? constants.AddressZero;
1417
+ return [
1418
+ {
1419
+ chainId: this.chainId,
1420
+ annotation: `Setting feeHook to ${newFeeHook}`,
1421
+ to: this.args.addresses.deployedTokenRoute,
1422
+ data: TokenRouter__factory.createInterface().encodeFunctionData('setFeeHook', [newFeeHook]),
1423
+ },
1424
+ ];
1425
+ }
1426
+ /**
1427
+ * Create transactions to update token fee configuration.
1428
+ *
1429
+ * @param actualConfig - The on-chain router configuration.
1430
+ * @param expectedConfig - The expected token router configuration.
1431
+ * @returns Ethereum transactions that need to be executed to update the token fee.
1432
+ *
1433
+ * @remarks
1434
+ * The returned transactions may include both `setFeeRecipient` (gated by the
1435
+ * token-router owner) and fee-contract config calls (gated by the fee-contract
1436
+ * owner). When routing these to a dedicated `feeSubmitter`, that submitter
1437
+ * must own both the token router and the fee contract.
1438
+ */
1439
+ async createTokenFeeUpdateTxs(actualConfig, expectedConfig, tokenReaderParams) {
1440
+ if (!expectedConfig.tokenFee) {
1441
+ if (actualConfig.tokenFee) {
1442
+ return [
1443
+ {
1444
+ annotation: 'Removing fee recipient...',
1445
+ chainId: this.chainId,
1446
+ to: this.args.addresses.deployedTokenRoute,
1447
+ data: TokenRouter__factory.createInterface().encodeFunctionData('setFeeRecipient(address)', [constants.AddressZero]),
1448
+ },
1449
+ ];
1450
+ }
1451
+ return [];
1452
+ }
1453
+ const routerAddress = this.args.addresses.deployedTokenRoute;
1454
+ const resolvedTokenFee = await resolveTokenFeeAddress(expectedConfig.tokenFee, routerAddress, expectedConfig, this.multiProvider.getProvider(this.chainId));
1455
+ const currentTokenFee = actualConfig.tokenFee;
1456
+ if (!currentTokenFee) {
1457
+ this.logger.info('No existing token fee found, creating new one');
1458
+ const expandedExpectedConfig = await EvmTokenFeeModule.expandConfig({
1459
+ config: resolvedTokenFee,
1460
+ multiProvider: this.multiProvider,
1461
+ chainName: this.chainName,
1462
+ });
1463
+ const tokenFeeModule = await EvmTokenFeeModule.create({
1464
+ multiProvider: this.multiProvider,
1465
+ chain: this.chainName,
1466
+ config: expandedExpectedConfig,
1467
+ contractVerifier: this.contractVerifier,
1468
+ });
1469
+ const { deployedFee } = tokenFeeModule.serialize();
1470
+ // Check if fee recipient is already set correctly on-chain
1471
+ const tokenRouter = TokenRouter__factory.connect(routerAddress, this.multiProvider.getProvider(this.chainId));
1472
+ const currentFeeRecipient = await tokenRouter
1473
+ .feeRecipient()
1474
+ .catch((error) => {
1475
+ this.logger.warn(`Failed to read feeRecipient, defaulting to generate setFeeRecipient tx`, error);
1476
+ return constants.AddressZero;
1477
+ });
1478
+ if (eqAddress(currentFeeRecipient, deployedFee)) {
1479
+ return [];
1480
+ }
1481
+ return [
1482
+ {
1483
+ annotation: 'Setting new routing fee...',
1484
+ chainId: this.chainId,
1485
+ to: this.args.addresses.deployedTokenRoute,
1486
+ data: TokenRouter__factory.createInterface().encodeFunctionData('setFeeRecipient(address)', [deployedFee]),
1487
+ },
1488
+ ];
1489
+ }
1490
+ this.logger.info('Updating existing token fee configuration');
1491
+ const tokenFeeModule = new EvmTokenFeeModule(this.multiProvider, {
1492
+ chain: this.chainName,
1493
+ config: currentTokenFee,
1494
+ addresses: {
1495
+ deployedFee: currentTokenFee.address,
1496
+ },
1497
+ }, this.contractVerifier);
1498
+ // For CCR fee updates, forward the on-chain enrolled router keys as hints so the
1499
+ // reader can observe orphan feeContracts entries not present in the target config.
1500
+ // Without these hints, the removal loop in EvmTokenFeeModule.update() never sees
1501
+ // stale (dest, router) entries and the on-chain pointer stays wired.
1502
+ let effectiveTokenReaderParams = tokenReaderParams;
1503
+ if (isCrossCollateralTokenConfig(actualConfig) &&
1504
+ actualConfig.crossCollateralRouters &&
1505
+ resolvedTokenFee.type === TokenFeeType.CrossCollateralRoutingFee) {
1506
+ const onchainRoutersByDomain = resolveRouterMapConfig(this.multiProvider, actualConfig.crossCollateralRouters);
1507
+ effectiveTokenReaderParams = {
1508
+ ...tokenReaderParams,
1509
+ crossCollateralRouters: mergeCrossCollateralRouters(tokenReaderParams?.crossCollateralRouters, onchainRoutersByDomain),
1510
+ };
1511
+ }
1512
+ const updateTransactions = await tokenFeeModule.update(resolvedTokenFee, effectiveTokenReaderParams);
1513
+ const { deployedFee } = tokenFeeModule.serialize();
1514
+ // Only call setFeeRecipient if the fee recipient address has changed
1515
+ if (!eqAddress(currentTokenFee.address, deployedFee)) {
1516
+ updateTransactions.push({
1517
+ annotation: 'Updating routing fee...',
1518
+ chainId: this.chainId,
1519
+ to: this.args.addresses.deployedTokenRoute,
1520
+ data: TokenRouter__factory.createInterface().encodeFunctionData('setFeeRecipient(address)', [deployedFee]),
1521
+ });
1522
+ }
1523
+ return updateTransactions;
1524
+ }
1525
+ /**
1526
+ * Transfer ownership of an existing Warp route with a given config.
1527
+ *
1528
+ * @param actualConfig - The on-chain router configuration.
1529
+ * @param expectedConfig - The expected token router configuration.
1530
+ * @returns Ethereum transaction that need to be executed to update the owner.
1531
+ */
1532
+ createOwnershipUpdateTxs(actualConfig, expectedConfig) {
1533
+ return transferOwnershipTransactions(this.multiProvider.getEvmChainId(this.args.chain), this.args.addresses.deployedTokenRoute, actualConfig, expectedConfig, `${expectedConfig.type} Warp Route`);
1534
+ }
1535
+ /**
1536
+ * Updates or deploys the ISM using the provided configuration.
1537
+ *
1538
+ * @returns Object with deployedIsm address, and update Transactions
1539
+ */
1540
+ async deployOrUpdateIsm(actualConfig, expectedConfig, opaqueHybridAddress) {
1541
+ assert(expectedConfig.interchainSecurityModule, 'Ism derived incorrectly');
1542
+ if (typeof expectedConfig.interchainSecurityModule === 'string' &&
1543
+ isZeroishAddress(expectedConfig.interchainSecurityModule)) {
1544
+ return {
1545
+ deployedIsm: expectedConfig.interchainSecurityModule,
1546
+ updateTransactions: [],
1547
+ };
1548
+ }
1549
+ // Always override recipient for any RateLimitedIsm node — it must be the
1550
+ // token address. Any user-supplied value is silently wrong (it would wire
1551
+ // the ISM to the wrong chain), so we always set it from the deployed token
1552
+ // route. Handles both top-level and nested (e.g. inside aggregation) nodes.
1553
+ // Thread the owner through so that an omitted ism.owner in expectedConfig
1554
+ // doesn't look like an owner diff to EvmIsmModule.update (which would redeploy
1555
+ // the ISM and reset the rate-limit bucket).
1556
+ // Primary default: the warp-route owner (matches deploy path in token/deploy.ts).
1557
+ // Fallback: the current on-chain ISM owner (same-type, same-owner in-place update).
1558
+ let expectedIsm = expectedConfig.interchainSecurityModule;
1559
+ if (typeof expectedIsm === 'object') {
1560
+ const actualIsm = actualConfig.interchainSecurityModule;
1561
+ const onChainOwner = typeof actualIsm === 'object' && 'owner' in actualIsm
1562
+ ? actualIsm.owner
1563
+ : undefined;
1564
+ const defaultOwner = expectedConfig.owner ??
1565
+ (typeof onChainOwner === 'string' ? onChainOwner : undefined);
1566
+ if (ismTreeContainsRateLimited(expectedIsm)) {
1567
+ expectedIsm = setRateLimitedIsmRecipient(expectedIsm, this.args.addresses.deployedTokenRoute, defaultOwner);
1568
+ }
1569
+ // Hybrid hook/ISMs need the paired warp router, which in warp-route
1570
+ // context is always this token — configs routinely omit it (it is only
1571
+ // required for standalone ISM deploys). Injected independently of the
1572
+ // owner: an unresolvable owner would otherwise leave `warpRouter`
1573
+ // missing and the update would plan against an incomplete config.
1574
+ // `remoteIsms` is deferred: cross-chain enrollment needs every chain's
1575
+ // instance address, so it is reconciled by a separate pass that must
1576
+ // stay its only writer.
1577
+ if (ismTreeContainsHybridHookIsm(expectedIsm)) {
1578
+ expectedIsm = completeHybridIsmNodes(expectedIsm, this.args.addresses.deployedTokenRoute, { type: DelayedFlowRemoteIsmsSourceType.Deferred }, defaultOwner, this.multiProvider);
1579
+ }
1580
+ }
1581
+ const ismModule = new EvmIsmModule(this.multiProvider, {
1582
+ chain: this.args.chain,
1583
+ config: actualConfig.interchainSecurityModule,
1584
+ addresses: {
1585
+ ...this.args.addresses,
1586
+ mailbox: actualConfig.mailbox,
1587
+ deployedIsm: derivedIsmAddress(actualConfig),
1588
+ },
1589
+ }, this.ccipContractCache, this.contractVerifier);
1590
+ this.logger.info(`Comparing target ISM config with ${this.args.chain} chain`);
1591
+ const updateTransactions = await ismModule.update(expectedIsm, opaqueHybridAddress ? [opaqueHybridAddress] : []);
1592
+ const { deployedIsm } = ismModule.serialize();
1593
+ return { deployedIsm, updateTransactions };
1594
+ }
1595
+ /**
1596
+ * Creates a transaction to upgrade the Warp Route implementation if the package version is below specified version.
1597
+ *
1598
+ * @param actualConfig - The current on-chain configuration
1599
+ * @param expectedConfig - The expected configuration
1600
+ * @returns An array of transactions to upgrade the implementation if needed
1601
+ */
1602
+ async upgradeWarpRouteImplementationTx(actualConfig, expectedConfig) {
1603
+ const updateTransactions = [];
1604
+ assert(expectedConfig.type !== TokenType.unknown, 'Cannot upgrade warp route with unknown token type');
1605
+ // Older contracts without PACKAGE_VERSION fall back to a legacy version in
1606
+ // EvmWarpRouteReader.fetchPackageVersion.
1607
+ assert(actualConfig.contractVersion, 'Actual contract version is undefined');
1608
+ // Only upgrade if the user specifies a version
1609
+ if (!expectedConfig.contractVersion) {
1610
+ return [];
1611
+ }
1612
+ const comparisonValue = compareVersions(expectedConfig.contractVersion, actualConfig.contractVersion);
1613
+ // Expected version is lower than actual version, no upgrade is possible
1614
+ if (comparisonValue === -1) {
1615
+ throw new Error(`Expected contract version ${expectedConfig.contractVersion} is lower than actual contract version ${actualConfig.contractVersion}`);
1616
+ }
1617
+ // Versions are the same, no upgrade needed
1618
+ if (comparisonValue === 0) {
1619
+ return [];
1620
+ }
1621
+ // You can only upgrade to the contract version (see `PackageVersioned`)
1622
+ // defined by the @recoillink/core package
1623
+ assert(contractVersionMatchesDependency(expectedConfig.contractVersion), VERSION_ERROR_MESSAGE);
1624
+ // Scale values are immutables baked into the implementation bytecode.
1625
+ // Changing the effective scale during an upgrade would cause in-flight
1626
+ // messages to be decoded with incorrect scaling.
1627
+ assert(scalesEqual(actualConfig.scale, expectedConfig.scale), `Scale change detected during upgrade. ` +
1628
+ `Changing scale on an existing deployment may cause in-flight messages to be decoded incorrectly.`);
1629
+ this.logger.info(`Upgrading Warp Route implementation on ${this.args.chain} from ${actualConfig.contractVersion} to ${expectedConfig.contractVersion}`);
1630
+ const deployer = new HypERC20Deployer(this.multiProvider);
1631
+ const constructorArgs = await deployer.constructorArgs(this.chainName, expectedConfig);
1632
+ const tokenType = expectedConfig.type;
1633
+ const implementation = await deployer.deployContractWithName(this.chainName, tokenType, hypERC20contracts[tokenType], constructorArgs, undefined, false);
1634
+ const provider = this.multiProvider.getProvider(this.domainId);
1635
+ const proxyAddress = this.args.addresses.deployedTokenRoute;
1636
+ const proxyAdminAddress = await proxyAdmin(provider, proxyAddress);
1637
+ assert(await isInitialized(provider, proxyAddress), 'Proxy is not initialized');
1638
+ updateTransactions.push({
1639
+ chainId: this.chainId,
1640
+ annotation: `Upgrading Warp Route implementation on ${this.args.chain}`,
1641
+ to: proxyAdminAddress,
1642
+ data: ProxyAdmin__factory.createInterface().encodeFunctionData('upgrade', [proxyAddress, implementation.address]),
1643
+ });
1644
+ return updateTransactions;
1645
+ }
1646
+ async createAddCctpDomainsTxs(expectedConfig, domains) {
1647
+ if (!isCctpTokenConfig(expectedConfig) ||
1648
+ expectedConfig.cctpVersion !== 'V2') {
1649
+ return [];
1650
+ }
1651
+ const remoteDomains = domains.filter(({ hyperlane }) => hyperlane !== this.domainId);
1652
+ if (remoteDomains.length === 0)
1653
+ return [];
1654
+ const tokenBridge = TokenBridgeCctpBase__factory.connect(this.args.addresses.deployedTokenRoute, this.multiProvider.getProvider(this.chainName));
1655
+ const missingDomainSelector = tokenBridge.interface.getSighash('CircleDomainNotConfigured()');
1656
+ const missingHyperlaneDomainSelector = tokenBridge.interface.getSighash('HyperlaneDomainNotConfigured()');
1657
+ const encodeErrorString = (reason) => `0x08c379a0${utils.defaultAbiCoder
1658
+ .encode(['string'], [reason])
1659
+ .slice(2)}`;
1660
+ const missingDomainErrors = [
1661
+ missingDomainSelector,
1662
+ missingHyperlaneDomainSelector,
1663
+ encodeErrorString('Circle domain not configured'),
1664
+ encodeErrorString('Hyperlane domain not configured'),
1665
+ ];
1666
+ const isMissingDomainError = (error) => missingDomainErrors.some((data) => isRevertData(error, data));
1667
+ const concurrency = this.multiProvider.tryGetRpcConcurrency(this.chainName) ??
1668
+ DEFAULT_CONTRACT_READ_CONCURRENCY;
1669
+ const needsUpdate = await concurrentMap(concurrency, remoteDomains, async (domain) => {
1670
+ const [circleResult] = await Promise.allSettled([
1671
+ tokenBridge.hyperlaneDomainToCircleDomain(domain.hyperlane),
1672
+ ]);
1673
+ const [hyperlaneResult] = await Promise.allSettled([
1674
+ tokenBridge.circleDomainToHyperlaneDomain(domain.circle),
1675
+ ]);
1676
+ for (const result of [circleResult, hyperlaneResult]) {
1677
+ if (result.status === 'rejected' &&
1678
+ !isMissingDomainError(result.reason)) {
1679
+ throw result.reason;
1680
+ }
1681
+ }
1682
+ if (circleResult.status === 'rejected' ||
1683
+ hyperlaneResult.status === 'rejected') {
1684
+ return true;
1685
+ }
1686
+ return (circleResult.value !== domain.circle ||
1687
+ hyperlaneResult.value !== domain.hyperlane);
1688
+ });
1689
+ const missingDomains = remoteDomains.filter((_, index) => needsUpdate[index]);
1690
+ if (missingDomains.length === 0)
1691
+ return [];
1692
+ return [
1693
+ {
1694
+ chainId: this.chainId,
1695
+ annotation: `Adding ${missingDomains.length} CCTP domain mapping(s) on ${this.args.chain}`,
1696
+ to: this.args.addresses.deployedTokenRoute,
1697
+ data: tokenBridge.interface.encodeFunctionData('addDomains', [
1698
+ missingDomains,
1699
+ ]),
1700
+ },
1701
+ ];
1702
+ }
1703
+ createSetMaxFeePpmTxs(actualConfig, expectedConfig) {
1704
+ if (!isCctpTokenConfig(expectedConfig) ||
1705
+ expectedConfig.cctpVersion !== 'V2' ||
1706
+ expectedConfig.maxFeeBps === undefined) {
1707
+ return [];
1708
+ }
1709
+ const actualMaxFeeBps = isCctpTokenConfig(actualConfig)
1710
+ ? actualConfig.maxFeeBps
1711
+ : undefined;
1712
+ // When upgrading across the CCTP_PPM_STORAGE_VERSION boundary, the
1713
+ // pre-upgrade contract stores the fee in integer bps while the
1714
+ // post-upgrade contract expects ppm. The reader normalises to bps so the
1715
+ // values look equal, but the raw on-chain slot will be wrong after the
1716
+ // proxy upgrade. Always emit setMaxFeePpm in this case.
1717
+ const crossingPpmBoundary = actualConfig.contractVersion &&
1718
+ expectedConfig.contractVersion &&
1719
+ compareVersions(actualConfig.contractVersion, CCTP_PPM_STORAGE_VERSION) <
1720
+ 0 &&
1721
+ compareVersions(expectedConfig.contractVersion, CCTP_PPM_STORAGE_VERSION) >= 0;
1722
+ if (!crossingPpmBoundary && actualMaxFeeBps === expectedConfig.maxFeeBps) {
1723
+ return [];
1724
+ }
1725
+ const maxFeePpm = Math.round(expectedConfig.maxFeeBps * 100);
1726
+ return [
1727
+ {
1728
+ chainId: this.chainId,
1729
+ annotation: `Setting maxFeePpm to ${maxFeePpm} on ${this.args.chain}`,
1730
+ to: this.args.addresses.deployedTokenRoute,
1731
+ data: TokenBridgeCctpV2__factory.createInterface().encodeFunctionData('setMaxFeePpm', [maxFeePpm]),
1732
+ },
1733
+ ];
1734
+ }
1735
+ /**
1736
+ * Deploys the Warp Route.
1737
+ *
1738
+ * @param chain - The chain to deploy the module on.
1739
+ * @param config - The configuration for the token router.
1740
+ * @param multiProvider - The multi-provider instance to use.
1741
+ * @returns A new instance of the EvmERC20WarpHyperlaneModule.
1742
+ */
1743
+ static async create(params) {
1744
+ const { chain, config, multiProvider, ccipContractCache, contractVerifier, proxyFactoryFactories, } = params;
1745
+ const chainName = multiProvider.getChainName(chain);
1746
+ const deployer = new HypERC20Deployer(multiProvider);
1747
+ const deployedContracts = await deployer.deployContracts(chainName, config);
1748
+ const warpModule = new EvmWarpModule(multiProvider, {
1749
+ addresses: {
1750
+ ...proxyFactoryFactories,
1751
+ deployedTokenRoute: deployedContracts[config.type].address,
1752
+ },
1753
+ chain,
1754
+ config,
1755
+ }, ccipContractCache, contractVerifier);
1756
+ const actualConfig = await warpModule.read();
1757
+ if (config.remoteRouters && !isObjEmpty(config.remoteRouters)) {
1758
+ const enrollRemoteTxs = await warpModule.createEnrollRemoteRoutersUpdateTxs(actualConfig, config); // @TODO Remove when EvmWarpModule.create can be used
1759
+ const onlyTxIndex = 0;
1760
+ await multiProvider.sendTransaction(chain, enrollRemoteTxs[onlyTxIndex]);
1761
+ }
1762
+ if (isMovableCollateralTokenConfig(config) &&
1763
+ config.allowedRebalancers &&
1764
+ config.allowedRebalancers.length !== 0) {
1765
+ const addRebalancerTxs = await warpModule.createAddRebalancersUpdateTxs(actualConfig, config); // @TODO Remove when EvmWarpModule.create can be used
1766
+ for (const tx of addRebalancerTxs) {
1767
+ await multiProvider.sendTransaction(chain, tx);
1768
+ }
1769
+ }
1770
+ if (isMovableCollateralTokenConfig(config) &&
1771
+ config.allowedRebalancingBridges &&
1772
+ !isObjEmpty(config.allowedRebalancingBridges)) {
1773
+ const addBridgesTxs = await warpModule.createAddAllowedBridgesUpdateTxs(actualConfig, config); // @TODO Remove when EvmWarpModule.create can be used
1774
+ for (const tx of addBridgesTxs) {
1775
+ await multiProvider.sendTransaction(chain, tx);
1776
+ }
1777
+ }
1778
+ if (isEverclearTokenBridgeConfig(config)) {
1779
+ const addRemoteOutputTokens = warpModule.createAddRemoteOutputAssetsTxs(actualConfig, config);
1780
+ const updateEverclearFeeParamsTxs = warpModule.createUpdateEverclearFeeParamsTxs(actualConfig, config);
1781
+ const everclearTxs = [
1782
+ ...addRemoteOutputTokens,
1783
+ ...updateEverclearFeeParamsTxs,
1784
+ ];
1785
+ for (const tx of everclearTxs) {
1786
+ await multiProvider.sendTransaction(chain, tx);
1787
+ }
1788
+ }
1789
+ if (isCrossCollateralTokenConfig(config) &&
1790
+ config.crossCollateralRouters &&
1791
+ Object.keys(config.crossCollateralRouters).length > 0) {
1792
+ const enrollTxs = warpModule.createEnrollCrossCollateralRoutersTxs(actualConfig, config);
1793
+ for (const tx of enrollTxs) {
1794
+ await multiProvider.sendTransaction(chain, tx);
1795
+ }
1796
+ }
1797
+ return warpModule;
1798
+ }
1799
+ }
1800
+ //# sourceMappingURL=EvmWarpModule.js.map