@hyperlane-xyz/sdk 35.1.0 → 36.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/dist/block-explorer/utils.d.ts +8 -0
  2. package/dist/block-explorer/utils.d.ts.map +1 -1
  3. package/dist/block-explorer/utils.js +16 -3
  4. package/dist/block-explorer/utils.js.map +1 -1
  5. package/dist/ccip/consts.d.ts.map +1 -1
  6. package/dist/ccip/consts.js +0 -40
  7. package/dist/ccip/consts.js.map +1 -1
  8. package/dist/consts/multisigIsm.d.ts.map +1 -1
  9. package/dist/consts/multisigIsm.js +39 -241
  10. package/dist/consts/multisigIsm.js.map +1 -1
  11. package/dist/contracts/contracts.d.ts.map +1 -1
  12. package/dist/contracts/contracts.js +6 -1
  13. package/dist/contracts/contracts.js.map +1 -1
  14. package/dist/core/CoreDeployer.hardhat-test.js +9 -0
  15. package/dist/core/CoreDeployer.hardhat-test.js.map +1 -1
  16. package/dist/core/EvmCoreModule.d.ts.map +1 -1
  17. package/dist/core/EvmCoreModule.hardhat-test.js +23 -0
  18. package/dist/core/EvmCoreModule.hardhat-test.js.map +1 -1
  19. package/dist/core/EvmCoreModule.js +8 -5
  20. package/dist/core/EvmCoreModule.js.map +1 -1
  21. package/dist/core/EvmCoreReader.d.ts.map +1 -1
  22. package/dist/core/EvmCoreReader.js +34 -15
  23. package/dist/core/EvmCoreReader.js.map +1 -1
  24. package/dist/core/HyperlaneCoreDeployer.d.ts.map +1 -1
  25. package/dist/core/HyperlaneCoreDeployer.js +34 -13
  26. package/dist/core/HyperlaneCoreDeployer.js.map +1 -1
  27. package/dist/core/TestCoreApp.d.ts +1 -1
  28. package/dist/core/contracts.d.ts +5 -2
  29. package/dist/core/contracts.d.ts.map +1 -1
  30. package/dist/core/contracts.js +4 -1
  31. package/dist/core/contracts.js.map +1 -1
  32. package/dist/core/types.d.ts +1092 -627
  33. package/dist/core/types.d.ts.map +1 -1
  34. package/dist/core/types.js +30 -2
  35. package/dist/core/types.js.map +1 -1
  36. package/dist/core/types.test.d.ts +2 -0
  37. package/dist/core/types.test.d.ts.map +1 -0
  38. package/dist/core/types.test.js +50 -0
  39. package/dist/core/types.test.js.map +1 -0
  40. package/dist/deploy/HyperlaneDeployer.d.ts +1 -0
  41. package/dist/deploy/HyperlaneDeployer.d.ts.map +1 -1
  42. package/dist/deploy/HyperlaneDeployer.js +17 -8
  43. package/dist/deploy/HyperlaneDeployer.js.map +1 -1
  44. package/dist/deploy/proxy.d.ts.map +1 -1
  45. package/dist/deploy/proxy.js +9 -5
  46. package/dist/deploy/proxy.js.map +1 -1
  47. package/dist/deploy/warp.d.ts.map +1 -1
  48. package/dist/deploy/warp.js +5 -0
  49. package/dist/deploy/warp.js.map +1 -1
  50. package/dist/fee/EvmTokenFeeDeployer.d.ts +1 -0
  51. package/dist/fee/EvmTokenFeeDeployer.d.ts.map +1 -1
  52. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js +40 -0
  53. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js.map +1 -1
  54. package/dist/fee/EvmTokenFeeDeployer.js +8 -0
  55. package/dist/fee/EvmTokenFeeDeployer.js.map +1 -1
  56. package/dist/fee/EvmTokenFeeReader.d.ts.map +1 -1
  57. package/dist/fee/EvmTokenFeeReader.js +3 -13
  58. package/dist/fee/EvmTokenFeeReader.js.map +1 -1
  59. package/dist/fee/feeConfigMapping.d.ts +9 -0
  60. package/dist/fee/feeConfigMapping.d.ts.map +1 -0
  61. package/dist/fee/feeConfigMapping.js +86 -0
  62. package/dist/fee/feeConfigMapping.js.map +1 -0
  63. package/dist/fee/feeConfigMapping.test.d.ts +2 -0
  64. package/dist/fee/feeConfigMapping.test.d.ts.map +1 -0
  65. package/dist/fee/feeConfigMapping.test.js +204 -0
  66. package/dist/fee/feeConfigMapping.test.js.map +1 -0
  67. package/dist/fee/types.d.ts +185 -113
  68. package/dist/fee/types.d.ts.map +1 -1
  69. package/dist/fee/types.js +13 -11
  70. package/dist/fee/types.js.map +1 -1
  71. package/dist/fee/utils.d.ts +1 -32
  72. package/dist/fee/utils.d.ts.map +1 -1
  73. package/dist/fee/utils.js +1 -47
  74. package/dist/fee/utils.js.map +1 -1
  75. package/dist/gas/HyperlaneIgpChecker.d.ts +1 -0
  76. package/dist/gas/HyperlaneIgpChecker.d.ts.map +1 -1
  77. package/dist/gas/HyperlaneIgpChecker.js +43 -1
  78. package/dist/gas/HyperlaneIgpChecker.js.map +1 -1
  79. package/dist/gas/HyperlaneIgpDeployer.d.ts +17 -0
  80. package/dist/gas/HyperlaneIgpDeployer.d.ts.map +1 -1
  81. package/dist/gas/HyperlaneIgpDeployer.js +124 -4
  82. package/dist/gas/HyperlaneIgpDeployer.js.map +1 -1
  83. package/dist/gas/oracle/configure-gas-oracles.hardhat-test.js +33 -2
  84. package/dist/gas/oracle/configure-gas-oracles.hardhat-test.js.map +1 -1
  85. package/dist/gas/types.d.ts +17 -3
  86. package/dist/gas/types.d.ts.map +1 -1
  87. package/dist/gas/types.js +19 -0
  88. package/dist/gas/types.js.map +1 -1
  89. package/dist/gas/utils.d.ts +5 -1
  90. package/dist/gas/utils.d.ts.map +1 -1
  91. package/dist/gas/utils.js +92 -31
  92. package/dist/gas/utils.js.map +1 -1
  93. package/dist/gas/utils.test.d.ts +2 -0
  94. package/dist/gas/utils.test.d.ts.map +1 -0
  95. package/dist/gas/utils.test.js +132 -0
  96. package/dist/gas/utils.test.js.map +1 -0
  97. package/dist/hook/EvmHookModule.d.ts +21 -1
  98. package/dist/hook/EvmHookModule.d.ts.map +1 -1
  99. package/dist/hook/EvmHookModule.hardhat-test.js +125 -2
  100. package/dist/hook/EvmHookModule.hardhat-test.js.map +1 -1
  101. package/dist/hook/EvmHookModule.js +191 -17
  102. package/dist/hook/EvmHookModule.js.map +1 -1
  103. package/dist/hook/EvmHookReader.d.ts +4 -4
  104. package/dist/hook/EvmHookReader.d.ts.map +1 -1
  105. package/dist/hook/EvmHookReader.js +67 -16
  106. package/dist/hook/EvmHookReader.js.map +1 -1
  107. package/dist/hook/EvmHookReader.test.js +128 -2
  108. package/dist/hook/EvmHookReader.test.js.map +1 -1
  109. package/dist/hook/HyperlaneHookDeployer.d.ts +10 -5
  110. package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -1
  111. package/dist/hook/types.d.ts +338 -264
  112. package/dist/hook/types.d.ts.map +1 -1
  113. package/dist/hook/types.js +30 -6
  114. package/dist/hook/types.js.map +1 -1
  115. package/dist/hook/types.test.d.ts +2 -0
  116. package/dist/hook/types.test.d.ts.map +1 -0
  117. package/dist/hook/types.test.js +184 -0
  118. package/dist/hook/types.test.js.map +1 -0
  119. package/dist/hook/utils.d.ts +1 -0
  120. package/dist/hook/utils.d.ts.map +1 -1
  121. package/dist/hook/utils.js +16 -10
  122. package/dist/hook/utils.js.map +1 -1
  123. package/dist/ica/types.d.ts +380 -188
  124. package/dist/ica/types.d.ts.map +1 -1
  125. package/dist/index.d.ts +8 -6
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +5 -3
  128. package/dist/index.js.map +1 -1
  129. package/dist/ism/EvmIsmModule.d.ts +7 -1
  130. package/dist/ism/EvmIsmModule.d.ts.map +1 -1
  131. package/dist/ism/EvmIsmModule.hardhat-test.js +4 -0
  132. package/dist/ism/EvmIsmModule.hardhat-test.js.map +1 -1
  133. package/dist/ism/EvmIsmModule.js +152 -4
  134. package/dist/ism/EvmIsmModule.js.map +1 -1
  135. package/dist/ism/EvmIsmReader.d.ts.map +1 -1
  136. package/dist/ism/EvmIsmReader.js +1 -2
  137. package/dist/ism/EvmIsmReader.js.map +1 -1
  138. package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
  139. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js +17 -0
  140. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js.map +1 -1
  141. package/dist/ism/HyperlaneIsmFactory.js +35 -9
  142. package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
  143. package/dist/ism/types.d.ts +88 -3
  144. package/dist/ism/types.d.ts.map +1 -1
  145. package/dist/ism/types.js +4 -0
  146. package/dist/ism/types.js.map +1 -1
  147. package/dist/metadata/ChainMetadataManager.d.ts.map +1 -1
  148. package/dist/metadata/ChainMetadataManager.js +2 -2
  149. package/dist/metadata/ChainMetadataManager.js.map +1 -1
  150. package/dist/metadata/ChainMetadataManager.test.js +71 -0
  151. package/dist/metadata/ChainMetadataManager.test.js.map +1 -1
  152. package/dist/metadata/agentConfig.d.ts +937 -168
  153. package/dist/metadata/agentConfig.d.ts.map +1 -1
  154. package/dist/metadata/agentConfig.js +68 -1
  155. package/dist/metadata/agentConfig.js.map +1 -1
  156. package/dist/metadata/agentConfig.test.js +67 -1
  157. package/dist/metadata/agentConfig.test.js.map +1 -1
  158. package/dist/middleware/account/InterchainAccount.d.ts.map +1 -1
  159. package/dist/middleware/account/InterchainAccount.js +10 -0
  160. package/dist/middleware/account/InterchainAccount.js.map +1 -1
  161. package/dist/middleware/account/InterchainAccount.test.js +26 -0
  162. package/dist/middleware/account/InterchainAccount.test.js.map +1 -1
  163. package/dist/providers/MultiProvider.d.ts +6 -0
  164. package/dist/providers/MultiProvider.d.ts.map +1 -1
  165. package/dist/providers/MultiProvider.js +28 -2
  166. package/dist/providers/MultiProvider.js.map +1 -1
  167. package/dist/providers/SeismicSigner.d.ts +54 -0
  168. package/dist/providers/SeismicSigner.d.ts.map +1 -0
  169. package/dist/providers/SeismicSigner.js +89 -0
  170. package/dist/providers/SeismicSigner.js.map +1 -0
  171. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.d.ts.map +1 -1
  172. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.js +8 -0
  173. package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.js.map +1 -1
  174. package/dist/providers/SmartProvider/SmartProvider.d.ts.map +1 -1
  175. package/dist/providers/SmartProvider/SmartProvider.js +69 -23
  176. package/dist/providers/SmartProvider/SmartProvider.js.map +1 -1
  177. package/dist/providers/SmartProvider/SmartProvider.test.js +34 -5
  178. package/dist/providers/SmartProvider/SmartProvider.test.js.map +1 -1
  179. package/dist/providers/builders/starknet.d.ts.map +1 -1
  180. package/dist/providers/builders/starknet.js +6 -1
  181. package/dist/providers/builders/starknet.js.map +1 -1
  182. package/dist/providers/transactions/submitter/IcaTxSubmitter.d.ts.map +1 -1
  183. package/dist/providers/transactions/submitter/IcaTxSubmitter.js +23 -8
  184. package/dist/providers/transactions/submitter/IcaTxSubmitter.js.map +1 -1
  185. package/dist/providers/transactions/submitter/IcaTxSubmitter.test.js +45 -0
  186. package/dist/providers/transactions/submitter/IcaTxSubmitter.test.js.map +1 -1
  187. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxBuilder.d.ts +1 -1
  188. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxBuilder.d.ts.map +1 -1
  189. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.d.ts +1 -1
  190. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.d.ts.map +1 -1
  191. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.js.map +1 -1
  192. package/dist/providers/transactions/submitter/ethersV5/types.d.ts +6 -0
  193. package/dist/providers/transactions/submitter/ethersV5/types.d.ts.map +1 -1
  194. package/dist/providers/transactions/submitter/ethersV5/types.js +26 -5
  195. package/dist/providers/transactions/submitter/ethersV5/types.js.map +1 -1
  196. package/dist/providers/transactions/submitter/submitterBuilderGetter.d.ts.map +1 -1
  197. package/dist/providers/transactions/submitter/submitterBuilderGetter.js +11 -1
  198. package/dist/providers/transactions/submitter/submitterBuilderGetter.js.map +1 -1
  199. package/dist/providers/transactions/submitter/submitterBuilderGetter.test.d.ts +2 -0
  200. package/dist/providers/transactions/submitter/submitterBuilderGetter.test.d.ts.map +1 -0
  201. package/dist/providers/transactions/submitter/submitterBuilderGetter.test.js +38 -0
  202. package/dist/providers/transactions/submitter/submitterBuilderGetter.test.js.map +1 -0
  203. package/dist/router/types.d.ts +481 -236
  204. package/dist/router/types.d.ts.map +1 -1
  205. package/dist/router/types.js +1 -0
  206. package/dist/router/types.js.map +1 -1
  207. package/dist/router/types.test.d.ts +2 -0
  208. package/dist/router/types.test.d.ts.map +1 -0
  209. package/dist/router/types.test.js +32 -0
  210. package/dist/router/types.test.js.map +1 -0
  211. package/dist/test/testUtils.d.ts.map +1 -1
  212. package/dist/test/testUtils.js +3 -0
  213. package/dist/test/testUtils.js.map +1 -1
  214. package/dist/token/EvmWarpModule.d.ts +18 -1
  215. package/dist/token/EvmWarpModule.d.ts.map +1 -1
  216. package/dist/token/EvmWarpModule.hardhat-test.js +30 -0
  217. package/dist/token/EvmWarpModule.hardhat-test.js.map +1 -1
  218. package/dist/token/EvmWarpModule.js +67 -5
  219. package/dist/token/EvmWarpModule.js.map +1 -1
  220. package/dist/token/EvmWarpModule.test.d.ts +2 -0
  221. package/dist/token/EvmWarpModule.test.d.ts.map +1 -0
  222. package/dist/token/EvmWarpModule.test.js +77 -0
  223. package/dist/token/EvmWarpModule.test.js.map +1 -0
  224. package/dist/token/EvmWarpRouteReader.d.ts +1 -0
  225. package/dist/token/EvmWarpRouteReader.d.ts.map +1 -1
  226. package/dist/token/EvmWarpRouteReader.js +17 -0
  227. package/dist/token/EvmWarpRouteReader.js.map +1 -1
  228. package/dist/token/EvmXERC20Module.d.ts +31 -26
  229. package/dist/token/EvmXERC20Module.d.ts.map +1 -1
  230. package/dist/token/EvmXERC20Module.js +46 -3
  231. package/dist/token/EvmXERC20Module.js.map +1 -1
  232. package/dist/token/EvmXERC20Module.test.js +162 -1
  233. package/dist/token/EvmXERC20Module.test.js.map +1 -1
  234. package/dist/token/EvmXERC20Reader.d.ts +17 -0
  235. package/dist/token/EvmXERC20Reader.d.ts.map +1 -1
  236. package/dist/token/EvmXERC20Reader.js +37 -1
  237. package/dist/token/EvmXERC20Reader.js.map +1 -1
  238. package/dist/token/adapters/EvmHypSyntheticAdapter.test.d.ts +2 -0
  239. package/dist/token/adapters/EvmHypSyntheticAdapter.test.d.ts.map +1 -0
  240. package/dist/token/adapters/EvmHypSyntheticAdapter.test.js +96 -0
  241. package/dist/token/adapters/EvmHypSyntheticAdapter.test.js.map +1 -0
  242. package/dist/token/adapters/EvmTokenAdapter.d.ts.map +1 -1
  243. package/dist/token/adapters/EvmTokenAdapter.js +25 -12
  244. package/dist/token/adapters/EvmTokenAdapter.js.map +1 -1
  245. package/dist/token/configUtils.test.js.map +1 -1
  246. package/dist/token/deploy.d.ts +1 -0
  247. package/dist/token/deploy.d.ts.map +1 -1
  248. package/dist/token/deploy.js +13 -0
  249. package/dist/token/deploy.js.map +1 -1
  250. package/dist/token/tokenMetadataUtils.d.ts.map +1 -1
  251. package/dist/token/tokenMetadataUtils.js +1 -0
  252. package/dist/token/tokenMetadataUtils.js.map +1 -1
  253. package/dist/token/types.d.ts +1373 -699
  254. package/dist/token/types.d.ts.map +1 -1
  255. package/dist/token/types.test.js +11 -0
  256. package/dist/token/types.test.js.map +1 -1
  257. package/dist/token/xerc20.d.ts.map +1 -1
  258. package/dist/token/xerc20.js +10 -2
  259. package/dist/token/xerc20.js.map +1 -1
  260. package/dist/token/xerc20.test.d.ts +2 -0
  261. package/dist/token/xerc20.test.d.ts.map +1 -0
  262. package/dist/token/xerc20.test.js +143 -0
  263. package/dist/token/xerc20.test.js.map +1 -0
  264. package/dist/utils/contract.d.ts +6 -0
  265. package/dist/utils/contract.d.ts.map +1 -1
  266. package/dist/utils/contract.js +11 -0
  267. package/dist/utils/contract.js.map +1 -1
  268. package/dist/utils/contract.test.js +2 -1
  269. package/dist/utils/contract.test.js.map +1 -1
  270. package/dist/utils/gas.d.ts +1 -0
  271. package/dist/utils/gas.d.ts.map +1 -1
  272. package/dist/utils/gas.js +1 -0
  273. package/dist/utils/gas.js.map +1 -1
  274. package/dist/utils/gnosisSafe.d.ts +4 -1
  275. package/dist/utils/gnosisSafe.d.ts.map +1 -1
  276. package/dist/utils/gnosisSafe.js +20 -7
  277. package/dist/utils/gnosisSafe.js.map +1 -1
  278. package/dist/utils/gnosisSafe.test.js +44 -1
  279. package/dist/utils/gnosisSafe.test.js.map +1 -1
  280. package/dist/utils/ism.d.ts.map +1 -1
  281. package/dist/utils/ism.js +4 -2
  282. package/dist/utils/ism.js.map +1 -1
  283. package/dist/warp/WarpCore.d.ts.map +1 -1
  284. package/dist/warp/WarpCore.js +4 -3
  285. package/dist/warp/WarpCore.js.map +1 -1
  286. package/package.json +14 -14
@@ -1,9 +1,11 @@
1
1
  import { expect } from 'chai';
2
- import { utils } from 'ethers';
2
+ import { constants, utils } from 'ethers';
3
3
  import hre from 'hardhat';
4
+ import { StorageGasOracle__factory, } from '@hyperlane-xyz/core';
5
+ import { eqAddress } from '@hyperlane-xyz/utils';
4
6
  import { TestChainName } from '../../consts/testChains.js';
5
7
  import { MultiProvider } from '../../providers/MultiProvider.js';
6
- import { testIgpConfig } from '../../test/testUtils.js';
8
+ import { randomAddress, testIgpConfig } from '../../test/testUtils.js';
7
9
  import { HyperlaneIgpDeployer } from '../HyperlaneIgpDeployer.js';
8
10
  import { oracleConfigToOracleData } from './types.js';
9
11
  describe('HyperlaneIgpDeployer', () => {
@@ -47,5 +49,34 @@ describe('HyperlaneIgpDeployer', () => {
47
49
  expect(modifiedConfig.gasPrice.eq(expected.gasPrice), `gasPrice mismatch: expected ${expected.gasPrice.toString()}, got ${modifiedConfig.gasPrice.toString()}`).to.be.true;
48
50
  expect(modifiedConfig.tokenExchangeRate.eq(expected.tokenExchangeRate), `tokenExchangeRate mismatch: expected ${expected.tokenExchangeRate.toString()}, got ${modifiedConfig.tokenExchangeRate.toString()}`).to.be.true;
49
51
  });
52
+ it('should wire a per-fee-token gas oracle via setTokenGasOracles', async () => {
53
+ const feeToken = randomAddress();
54
+ const tokenOracle = {
55
+ tokenExchangeRate: utils.parseUnits('5', 'gwei').toString(),
56
+ gasPrice: utils.parseUnits('7', 'gwei').toString(),
57
+ tokenDecimals: 18,
58
+ };
59
+ testConfig[local].tokenOracleConfig = {
60
+ [feeToken]: { [remote]: tokenOracle },
61
+ };
62
+ const localContracts = await deployer.deployContracts(local, testConfig[local]);
63
+ igp = localContracts.interchainGasPaymaster;
64
+ // A dedicated oracle is wired for the fee token, distinct from the native one.
65
+ const oracleAddress = await igp.tokenGasOracles(feeToken, remoteId);
66
+ expect(eqAddress(oracleAddress, constants.AddressZero)).to.be.false;
67
+ const nativeOracle = (await igp.destinationGasConfigs(remoteId)).gasOracle;
68
+ expect(eqAddress(oracleAddress, nativeOracle)).to.be.false;
69
+ // The oracle returns the configured token rates.
70
+ const oracle = StorageGasOracle__factory.connect(oracleAddress, multiProvider.getProvider(local));
71
+ const data = await oracle.getExchangeRateAndGasPrice(remoteId);
72
+ const expected = oracleConfigToOracleData(tokenOracle);
73
+ expect(data.gasPrice.eq(expected.gasPrice)).to.be.true;
74
+ expect(data.tokenExchangeRate.eq(expected.tokenExchangeRate)).to.be.true;
75
+ // Re-deploying with the same config is idempotent (oracle resolved on-chain).
76
+ const oracleBefore = oracleAddress;
77
+ await deployer.deployContracts(local, testConfig[local]);
78
+ const oracleAfter = await igp.tokenGasOracles(feeToken, remoteId);
79
+ expect(eqAddress(oracleAfter, oracleBefore)).to.be.true;
80
+ });
50
81
  });
51
82
  //# sourceMappingURL=configure-gas-oracles.hardhat-test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configure-gas-oracles.hardhat-test.js","sourceRoot":"","sources":["../../../src/gas/oracle/configure-gas-oracles.hardhat-test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configure-gas-oracles.hardhat-test.js","sourceRoot":"","sources":["../../../src/gas/oracle/configure-gas-oracles.hardhat-test.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,20 @@ import { z } from 'zod';
3
3
  import { InterchainGasPaymaster } from '@hyperlane-xyz/core';
4
4
  import type { Address } from '@hyperlane-xyz/utils';
5
5
  import type { CheckerViolation } from '../deploy/types.js';
6
- import { IgpSchema } from '../hook/types.js';
7
- import { ChainMap } from '../types.js';
6
+ import { IgpSchema, IgpVersion } from '../hook/types.js';
7
+ import { ChainMap, ChainName } from '../types.js';
8
8
  export type IgpConfig = z.infer<typeof IgpSchema>;
9
+ export declare function igpSupportsOffchainFeeQuoting({ igpVersion, contractVersion, quoteSigners, }: {
10
+ igpVersion?: IgpVersion;
11
+ contractVersion?: string;
12
+ quoteSigners?: string[];
13
+ }): boolean;
14
+ export declare function assertTokenOracleConfigHasNativeRemotes(chain: ChainName, config: Pick<IgpConfig, 'overhead' | 'tokenOracleConfig'>): void;
9
15
  export declare enum IgpViolationType {
10
16
  Beneficiary = "Beneficiary",
11
17
  GasOracles = "GasOracles",
12
- Overhead = "Overhead"
18
+ Overhead = "Overhead",
19
+ TokenGasOracles = "TokenGasOracles"
13
20
  }
14
21
  export interface IgpViolation extends CheckerViolation {
15
22
  type: 'InterchainGasPaymaster';
@@ -33,4 +40,11 @@ export interface IgpOverheadViolation extends IgpViolation {
33
40
  actual: ChainMap<BigNumber>;
34
41
  expected: ChainMap<BigNumber>;
35
42
  }
43
+ export interface IgpTokenGasOraclesViolation extends IgpViolation {
44
+ subType: IgpViolationType.TokenGasOracles;
45
+ contract: InterchainGasPaymaster;
46
+ actual: ChainMap<Address>;
47
+ expected: ChainMap<Address>;
48
+ feeToken: Address;
49
+ }
36
50
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gas/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAElD,oBAAY,gBAAgB;IAC1B,WAAW,gBAAgB;IAC3B,UAAU,eAAe;IACzB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC3D,OAAO,EAAE,gBAAgB,CAAC,WAAW,CAAC;IACtC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAC1D,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC;IACrC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC;IACnC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;CAC/B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gas/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,SAAS,EACT,UAAU,EAEX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAElD,wBAAgB,6BAA6B,CAAC,EAC5C,UAAU,EACV,eAAe,EACf,YAAY,GACb,EAAE;IACD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,GAAG,OAAO,CAOV;AAED,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,mBAAmB,CAAC,GACxD,IAAI,CAiBN;AAED,oBAAY,gBAAgB;IAC1B,WAAW,gBAAgB;IAC3B,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,eAAe,oBAAoB;CACpC;AAED,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC3D,OAAO,EAAE,gBAAgB,CAAC,WAAW,CAAC;IACtC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAC1D,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC;IACrC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC;IACnC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,2BAA4B,SAAQ,YAAY;IAC/D,OAAO,EAAE,gBAAgB,CAAC,eAAe,CAAC;IAC1C,QAAQ,EAAE,sBAAsB,CAAC;IACjC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;CACnB"}
package/dist/gas/types.js CHANGED
@@ -1,7 +1,26 @@
1
+ import { assert } from '@hyperlane-xyz/utils';
2
+ import { compareVersions } from 'compare-versions';
3
+ import { IgpVersion, OFFCHAIN_QUOTED_IGP_VERSION, } from '../hook/types.js';
4
+ export function igpSupportsOffchainFeeQuoting({ igpVersion, contractVersion, quoteSigners, }) {
5
+ return (igpVersion !== IgpVersion.Legacy &&
6
+ (quoteSigners !== undefined ||
7
+ (contractVersion !== undefined &&
8
+ compareVersions(contractVersion, OFFCHAIN_QUOTED_IGP_VERSION) >= 0)));
9
+ }
10
+ export function assertTokenOracleConfigHasNativeRemotes(chain, config) {
11
+ if (!config.tokenOracleConfig)
12
+ return;
13
+ const configuredNativeRemotes = new Set(Object.keys(config.overhead));
14
+ for (const [feeToken, oracleConfig] of Object.entries(config.tokenOracleConfig)) {
15
+ const missingNativeRemotes = Object.keys(oracleConfig).filter((remote) => !configuredNativeRemotes.has(remote));
16
+ assert(missingNativeRemotes.length === 0, `Token gas oracle config for ${feeToken} on ${chain} includes remotes without native gas oracle config: ${missingNativeRemotes.join(', ')}`);
17
+ }
18
+ }
1
19
  export var IgpViolationType;
2
20
  (function (IgpViolationType) {
3
21
  IgpViolationType["Beneficiary"] = "Beneficiary";
4
22
  IgpViolationType["GasOracles"] = "GasOracles";
5
23
  IgpViolationType["Overhead"] = "Overhead";
24
+ IgpViolationType["TokenGasOracles"] = "TokenGasOracles";
6
25
  })(IgpViolationType || (IgpViolationType = {}));
7
26
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gas/types.ts"],"names":[],"mappings":"AAYA,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,+CAA2B,CAAA;IAC3B,6CAAyB,CAAA;IACzB,yCAAqB,CAAA;AACvB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gas/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAInD,OAAO,EAEL,UAAU,EACV,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAK1B,MAAM,UAAU,6BAA6B,CAAC,EAC5C,UAAU,EACV,eAAe,EACf,YAAY,GAKb;IACC,OAAO,CACL,UAAU,KAAK,UAAU,CAAC,MAAM;QAChC,CAAC,YAAY,KAAK,SAAS;YACzB,CAAC,eAAe,KAAK,SAAS;gBAC5B,eAAe,CAAC,eAAe,EAAE,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,CACzE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,KAAgB,EAChB,MAAyD;IAEzD,IAAI,CAAC,MAAM,CAAC,iBAAiB;QAAE,OAAO;IAEtC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,KAAK,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CACnD,MAAM,CAAC,iBAAiB,CACzB,EAAE,CAAC;QACF,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAC3D,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CACjD,CAAC;QACF,MAAM,CACJ,oBAAoB,CAAC,MAAM,KAAK,CAAC,EACjC,+BAA+B,QAAQ,OAAO,KAAK,uDAAuD,oBAAoB,CAAC,IAAI,CACjI,IAAI,CACL,EAAE,CACJ,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,+CAA2B,CAAA;IAC3B,6CAAyB,CAAA;IACzB,yCAAqB,CAAA;IACrB,uDAAmC,CAAA;AACrC,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B"}
@@ -19,12 +19,16 @@ export interface ChainGasOracleParams {
19
19
  }
20
20
  export declare function getGasPrice(mpp: MultiProviderAdapter, chain: string): Promise<GasPriceConfig>;
21
21
  export declare function getCosmosChainGasPrice(chain: ChainName, chainMetadataManager: ChainMetadataManager): Promise<AgentCosmosGasPrice>;
22
- export declare function getLocalStorageGasOracleConfig({ local, localProtocolType, gasOracleParams, exchangeRateMarginPct, gasPriceModifier, typicalCostGetter, }: {
22
+ export declare function getLocalStorageGasOracleConfig({ local, localProtocolType, gasOracleParams, exchangeRateMarginPct, gasPriceModifier, typicalCostGetter, onPrecisionFallback, }: {
23
23
  local: ChainName;
24
24
  localProtocolType: ProtocolType;
25
25
  gasOracleParams: ChainMap<ChainGasOracleParams>;
26
26
  exchangeRateMarginPct: number;
27
27
  gasPriceModifier?: (local: ChainName, remote: ChainName, gasOracleConfig: ProtocolAgnositicGasOracleConfig) => Parameters<typeof BigNumberJs>[0];
28
28
  typicalCostGetter?: (local: ChainName, remote: ChainName, gasOracleConfig: ProtocolAgnositicGasOracleConfig) => IgpCostData;
29
+ onPrecisionFallback?: (ctx: {
30
+ local: ChainName;
31
+ remote: ChainName;
32
+ }) => void;
29
33
  }): ChainMap<ProtocolAgnositicGasOracleConfig>;
30
34
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/gas/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAGxD,OAAO,EACL,YAAY,EAIb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EACL,WAAW,EACX,gCAAgC,EAEjC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CA6BzB;AAGD,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,SAAS,EAChB,oBAAoB,EAAE,oBAAoB,GACzC,OAAO,CAAC,mBAAmB,CAAC,CAoD9B;AA0DD,wBAAgB,8BAA8B,CAAC,EAC7C,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,GAClB,EAAE;IACD,KAAK,EAAE,SAAS,CAAC;IACjB,iBAAiB,EAAE,YAAY,CAAC;IAChC,eAAe,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAChD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,CACjB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,gCAAgC,KAC9C,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,iBAAiB,CAAC,EAAE,CAClB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,gCAAgC,KAC9C,WAAW,CAAC;CAClB,GAAG,QAAQ,CAAC,gCAAgC,CAAC,CA0E7C"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/gas/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAGxD,OAAO,EACL,YAAY,EAKb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EACL,WAAW,EACX,gCAAgC,EAEjC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CA6BzB;AAGD,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,SAAS,EAChB,oBAAoB,EAAE,oBAAoB,GACzC,OAAO,CAAC,mBAAmB,CAAC,CAoD9B;AAuDD,wBAAgB,8BAA8B,CAAC,EAC7C,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,GACpB,EAAE;IACD,KAAK,EAAE,SAAS,CAAC;IACjB,iBAAiB,EAAE,YAAY,CAAC;IAChC,eAAe,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAChD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,CACjB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,gCAAgC,KAC9C,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,iBAAiB,CAAC,EAAE,CAClB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,gCAAgC,KAC9C,WAAW,CAAC;IAIjB,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,KAAK,IAAI,CAAC;CAC9E,GAAG,QAAQ,CAAC,gCAAgC,CAAC,CAiF7C"}
package/dist/gas/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { BigNumber as BigNumberJs } from 'bignumber.js';
2
- import { BigNumber, ethers } from 'ethers';
3
- import { ProtocolType, assert, convertDecimals, objMap, } from '@hyperlane-xyz/utils';
2
+ import { ethers } from 'ethers';
3
+ import { ProtocolType, assert, convertDecimals, objMap, rootLogger, } from '@hyperlane-xyz/utils';
4
4
  import { getProtocolExchangeRateDecimals } from '../consts/igp.js';
5
5
  import { getCosmosRegistryChain } from '../utils/cosmos.js';
6
6
  export async function getGasPrice(mpp, chain) {
@@ -90,16 +90,14 @@ function getTokenExchangeRate({ local, remote, tokenPrices, exchangeRateMarginPc
90
90
  assert(exchangeRate.isGreaterThan(0), 'Exchange rate must be greater than 0, possible loss of precision');
91
91
  return exchangeRate;
92
92
  }
93
- function getProtocolExchangeRate(localProtocolType, exchangeRate) {
93
+ // Scales the (decimal-adjusted) exchange rate by the protocol's fixed-point
94
+ // multiplier. Returns a float that may be < 1 (e.g. for a low-decimal fee token
95
+ // paying for a high-decimal native chain); rounding to an integer and any
96
+ // precision rebalancing against the gas price happen later in
97
+ // adjustForPrecisionLoss.
98
+ function scaleProtocolExchangeRate(localProtocolType, exchangeRate) {
94
99
  const multiplierDecimals = getProtocolExchangeRateDecimals(localProtocolType);
95
- const multiplier = new BigNumberJs(10).pow(multiplierDecimals);
96
- const integer = exchangeRate
97
- .times(multiplier)
98
- .integerValue(BigNumberJs.ROUND_FLOOR)
99
- .toString(10);
100
- const result = BigNumber.from(integer);
101
- // Ensure exchange rate is at least 1
102
- return result.lt(1) ? BigNumber.from(1) : result;
100
+ return exchangeRate.times(new BigNumberJs(10).pow(multiplierDecimals));
103
101
  }
104
102
  // Gets the StorageGasOracleConfig for each remote chain for a particular local chain.
105
103
  // Accommodates small non-integer gas prices by scaling up the gas price
@@ -110,7 +108,7 @@ function getProtocolExchangeRate(localProtocolType, exchangeRate) {
110
108
  // e.g. the expected decimals of the token exchange rate, or whether to account for
111
109
  // a native token decimal difference in the exchange rate.
112
110
  // Therefore the values here can be applied directly to the chain's gas oracle.
113
- export function getLocalStorageGasOracleConfig({ local, localProtocolType, gasOracleParams, exchangeRateMarginPct, gasPriceModifier, typicalCostGetter, }) {
111
+ export function getLocalStorageGasOracleConfig({ local, localProtocolType, gasOracleParams, exchangeRateMarginPct, gasPriceModifier, typicalCostGetter, onPrecisionFallback, }) {
114
112
  const remotes = Object.keys(gasOracleParams).filter((remote) => remote !== local);
115
113
  const tokenPrices = objMap(gasOracleParams, (chain) => gasOracleParams[chain].nativeToken.price);
116
114
  const localDecimals = gasOracleParams[local].nativeToken.decimals;
@@ -128,8 +126,10 @@ export function getLocalStorageGasOracleConfig({ local, localProtocolType, gasOr
128
126
  // On all chains other than Sealevel, we need to adjust the exchange rate for decimals.
129
127
  exchangeRateFloat = convertDecimals(remoteDecimals, localDecimals, exchangeRateFloat);
130
128
  }
131
- // Make the exchange rate an integer by scaling it up by the appropriate factor for the protocol.
132
- const exchangeRate = getProtocolExchangeRate(localProtocolType, exchangeRateFloat);
129
+ // Scale the exchange rate by the protocol's fixed-point factor. Kept as a
130
+ // float here; adjustForPrecisionLoss does the final integer rounding (and
131
+ // rebalances against the gas price if it would otherwise underflow).
132
+ const scaledExchangeRate = scaleProtocolExchangeRate(localProtocolType, exchangeRateFloat);
133
133
  // First parse the gas price as a number, so we have floating point precision.
134
134
  // Recall it's possible to have gas prices that are not integers, even
135
135
  // after converting to the "wei" version of the token.
@@ -139,11 +139,15 @@ export function getLocalStorageGasOracleConfig({ local, localProtocolType, gasOr
139
139
  }
140
140
  // Get a prospective gasOracleConfig, adjusting the gas price and exchange rate
141
141
  // as needed to account for precision loss (e.g. if the gas price is super small).
142
- let gasOracleConfig = adjustForPrecisionLoss(gasPrice, exchangeRate, remoteDecimals);
142
+ let gasOracleConfig = adjustForPrecisionLoss(gasPrice, scaledExchangeRate, remoteDecimals, {
143
+ local,
144
+ remote,
145
+ onFallback: onPrecisionFallback,
146
+ });
143
147
  // Apply the modifier if provided.
144
148
  if (gasPriceModifier) {
145
149
  // Once again adjust for precision loss after applying the modifier.
146
- gasOracleConfig = adjustForPrecisionLoss(gasPriceModifier(local, remote, gasOracleConfig), BigNumber.from(gasOracleConfig.tokenExchangeRate), remoteDecimals);
150
+ gasOracleConfig = adjustForPrecisionLoss(gasPriceModifier(local, remote, gasOracleConfig), new BigNumberJs(gasOracleConfig.tokenExchangeRate), remoteDecimals, { local, remote, onFallback: onPrecisionFallback });
147
151
  }
148
152
  if (typicalCostGetter) {
149
153
  gasOracleConfig.typicalCost = typicalCostGetter(local, remote, gasOracleConfig);
@@ -154,31 +158,88 @@ export function getLocalStorageGasOracleConfig({ local, localProtocolType, gasOr
154
158
  };
155
159
  }, {});
156
160
  }
157
- function adjustForPrecisionLoss(gasPrice, exchangeRate, remoteDecimals) {
161
+ // Floor for the gas price after rebalancing a sub-unit exchange rate. Because
162
+ // the final gas price is ceiled, keeping the rebalanced value at least 1000
163
+ // bounds the relative quote error from that ceil to < 1 / 1000 = 0.1%.
164
+ const MIN_REBALANCED_GAS_PRICE = 1000;
165
+ function decimalMagnitude(value) {
166
+ if (value.lt(1))
167
+ return 0;
168
+ return value.integerValue(BigNumberJs.ROUND_FLOOR).toFixed(0).length - 1;
169
+ }
170
+ function adjustForPrecisionLoss(gasPrice, exchangeRate, remoteDecimals,
171
+ // Optional chain context. `local`/`remote` name the pair that underflowed so
172
+ // the warning is actionable. If `onFallback` is supplied, it is invoked
173
+ // instead of logging per-pair — letting callers aggregate the fallbacks into a
174
+ // single summary rather than emitting one warning per chain pair.
175
+ context) {
158
176
  let newGasPrice = new BigNumberJs(gasPrice);
159
177
  let newExchangeRate = exchangeRate;
178
+ // When the fee token has fewer decimals than the remote native token (e.g. a
179
+ // 6-decimal ERC20 fee token paying for an 18-decimal native chain), decimal
180
+ // conversion can push the scaled exchange rate below 1, where rounding to an
181
+ // integer would badly misprice (or zero out) the quote. The quote is the
182
+ // product gasPrice * exchangeRate, so shift magnitude from the gas price into
183
+ // the exchange rate by a power of ten: the product (and thus the quote) is
184
+ // preserved while the on-chain exchange rate keeps its precision. No-op for
185
+ // same-decimal native pairs, where the scaled rate is already >> 1.
186
+ if (newExchangeRate.lt(1)) {
187
+ const shiftMagnitude = decimalMagnitude(newGasPrice.div(MIN_REBALANCED_GAS_PRICE));
188
+ if (shiftMagnitude > 0) {
189
+ const factor = new BigNumberJs(10).pow(shiftMagnitude);
190
+ newExchangeRate = newExchangeRate.times(factor);
191
+ newGasPrice = newGasPrice.div(factor);
192
+ }
193
+ if (newExchangeRate.lt(1)) {
194
+ // Known limitation: gas prices below 10 * MIN_REBALANCED_GAS_PRICE do
195
+ // not have a full decimal digit of headroom to shift while preserving the
196
+ // final ceil rounding-error bound. In that no-headroom band, keep the
197
+ // original gas price and fall back to the minimum representable exchange
198
+ // rate instead of introducing a larger ceil error.
199
+ // When a caller wants to aggregate these (they can be many for a full
200
+ // chain matrix), hand off to its callback instead of logging per-pair.
201
+ if (context?.onFallback) {
202
+ context.onFallback({ local: context.local, remote: context.remote });
203
+ }
204
+ else {
205
+ rootLogger.warn(`Token exchange rate remains below 1 after precision rebalance${context ? ` for ${context.local} -> ${context.remote}` : ''}; falling back to minimum on-chain exchange rate. Original gas price: ${new BigNumberJs(gasPrice).toString()}, original exchange rate: ${exchangeRate.toString()}`);
206
+ }
207
+ }
208
+ }
160
209
  // We may have very little precision, and ultimately need an integer value for
161
210
  // the gas price that will be set on-chain. If this is the case, we scale up the
162
211
  // gas price and scale down the exchange rate by the same factor.
163
- if (newGasPrice.lt(10) && newGasPrice.mod(1) !== new BigNumberJs(0)) {
164
- // Scale up the gas price by 1e4 (arbitrary choice)
165
- const gasPriceScalingFactor = 1e4;
166
- // Check that there's no significant underflow when applying
167
- // this to the exchange rate:
168
- const adjustedExchangeRate = newExchangeRate.div(gasPriceScalingFactor);
169
- const recoveredExchangeRate = adjustedExchangeRate.mul(gasPriceScalingFactor);
170
- // Ensure we recover at least 99% of the original exchange rate
171
- if (recoveredExchangeRate.mul(100).div(newExchangeRate).gte(99)) {
172
- newGasPrice = newGasPrice.times(gasPriceScalingFactor);
173
- newExchangeRate = adjustedExchangeRate;
212
+ if (newGasPrice.lt(10) && !newGasPrice.mod(1).isZero()) {
213
+ // Use the largest decimal scale that preserves the integer exchange rate
214
+ // that will actually be set on-chain.
215
+ for (let scalingMagnitude = 4; scalingMagnitude > 0; scalingMagnitude--) {
216
+ const gasPriceScalingFactor = new BigNumberJs(10).pow(scalingMagnitude);
217
+ const adjustedExchangeRate = newExchangeRate.div(gasPriceScalingFactor);
218
+ const adjustedExchangeRateInteger = adjustedExchangeRate.integerValue(BigNumberJs.ROUND_FLOOR);
219
+ const recoveredExchangeRate = adjustedExchangeRateInteger.times(gasPriceScalingFactor);
220
+ // Ensure the integer value recovers at least 99% of the original
221
+ // exchange rate. If it floors to zero, the final floor-to-one clamp would
222
+ // overquote, so try a smaller scale.
223
+ if (adjustedExchangeRateInteger.gt(0) &&
224
+ recoveredExchangeRate.times(100).div(newExchangeRate).gte(99)) {
225
+ newGasPrice = newGasPrice.times(gasPriceScalingFactor);
226
+ newExchangeRate = adjustedExchangeRate;
227
+ break;
228
+ }
174
229
  }
175
230
  }
176
231
  const newGasPriceInteger = newGasPrice.integerValue(BigNumberJs.ROUND_CEIL);
177
232
  assert(newGasPriceInteger.gt(0), 'Gas price must be greater than 0, possible loss of precision');
178
- assert(newExchangeRate.gt(0), `Token exchange rate must be greater than 0, possible loss of precision. Original exchange rate: ${exchangeRate.toString()}`);
233
+ // Round the (possibly rebalanced) exchange rate to an integer, keeping a
234
+ // floor of 1 so a tiny-but-nonzero rate never collapses to 0.
235
+ let newExchangeRateInteger = newExchangeRate.integerValue(BigNumberJs.ROUND_FLOOR);
236
+ if (newExchangeRateInteger.lt(1)) {
237
+ newExchangeRateInteger = new BigNumberJs(1);
238
+ }
239
+ assert(newExchangeRateInteger.gt(0), `Token exchange rate must be greater than 0, possible loss of precision. Original exchange rate: ${exchangeRate.toString()}`);
179
240
  return {
180
- tokenExchangeRate: newExchangeRate.toString(),
181
- gasPrice: newGasPriceInteger.toString(),
241
+ tokenExchangeRate: newExchangeRateInteger.toFixed(0),
242
+ gasPrice: newGasPriceInteger.toFixed(0),
182
243
  tokenDecimals: remoteDecimals,
183
244
  };
184
245
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/gas/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/gas/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../src/gas/utils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,132 @@
1
+ import { expect } from 'chai';
2
+ import { ProtocolType } from '@hyperlane-xyz/utils';
3
+ import { getLocalStorageGasOracleConfig, } from './utils.js';
4
+ // Fee quote the IGP computes for a message, in the local (fee-token) base unit:
5
+ // quote = gasAmount * gasPrice * tokenExchangeRate / 1e10
6
+ const EXCHANGE_RATE_SCALE = 1e10;
7
+ const MAX_REBALANCED_QUOTE_ROUNDING_ERROR = 1 / 1000;
8
+ function quote(config, gasAmount) {
9
+ return ((gasAmount * Number(config.gasPrice) * Number(config.tokenExchangeRate)) /
10
+ EXCHANGE_RATE_SCALE);
11
+ }
12
+ describe('getLocalStorageGasOracleConfig', () => {
13
+ it('leaves same-decimal native pairs unchanged (no rebalance)', () => {
14
+ // local + remote both 18-decimal native tokens; remote worth 2x local.
15
+ const gasOracleParams = {
16
+ local: {
17
+ gasPrice: { amount: '1', decimals: 9 },
18
+ nativeToken: { price: '1', decimals: 18 },
19
+ },
20
+ remote: {
21
+ gasPrice: { amount: '1', decimals: 9 }, // 1 gwei = 1e9 wei
22
+ nativeToken: { price: '2', decimals: 18 },
23
+ },
24
+ };
25
+ const config = getLocalStorageGasOracleConfig({
26
+ local: 'local',
27
+ localProtocolType: ProtocolType.Ethereum,
28
+ gasOracleParams,
29
+ exchangeRateMarginPct: 0,
30
+ });
31
+ // exchangeRate = (2/1) * 1e10 ; gasPrice = 1e9 ; both pass through as-is.
32
+ expect(config.remote.tokenExchangeRate).to.equal('20000000000');
33
+ expect(config.remote.gasPrice).to.equal('1000000000');
34
+ });
35
+ it('rebalances a sub-unit exchange rate for a low-decimal fee token', () => {
36
+ // 6-decimal fee token paying for an 18-decimal remote, remote worth 10x.
37
+ // Naively the scaled exchange rate is (10) * 10^(6-18) * 1e10 = 0.1, which
38
+ // would floor to 1 and overprice the quote 10x. The rebalance must keep it
39
+ // representable while preserving the quote.
40
+ const gasOracleParams = {
41
+ feeToken: {
42
+ gasPrice: { amount: '1', decimals: 9 },
43
+ nativeToken: { price: '1', decimals: 6 },
44
+ },
45
+ remote: {
46
+ gasPrice: { amount: '50', decimals: 9 }, // 50 gwei = 5e10 wei
47
+ nativeToken: { price: '10', decimals: 18 },
48
+ },
49
+ };
50
+ const config = getLocalStorageGasOracleConfig({
51
+ local: 'feeToken',
52
+ localProtocolType: ProtocolType.Ethereum,
53
+ gasOracleParams,
54
+ exchangeRateMarginPct: 0,
55
+ }).remote;
56
+ // Exchange rate must be representable before integer rounding.
57
+ expect(Number(config.tokenExchangeRate)).to.be.at.least(1);
58
+ // The quote (gasPrice * exchangeRate product) must match the intended value:
59
+ // intended per-gas = 5e10 * 0.1 / 1e10 = 0.5 base units per unit gas.
60
+ const gasAmount = 200_000;
61
+ expect(quote(config, gasAmount)).to.be.approximately(0.5 * gasAmount, 0.5 * gasAmount * MAX_REBALANCED_QUOTE_ROUNDING_ERROR);
62
+ });
63
+ it('preserves precision for non-power-of-ten exchange rates', () => {
64
+ // 6-decimal fee token paying for an 18-decimal remote, remote worth 15x.
65
+ // Naively the scaled exchange rate is 0.15. Shifting only one digit makes
66
+ // this 1.5, which floors to 1 and underquotes by 33%; using all safe
67
+ // gas-price headroom keeps the floor rounding error negligible.
68
+ const gasOracleParams = {
69
+ feeToken: {
70
+ gasPrice: { amount: '1', decimals: 9 },
71
+ nativeToken: { price: '1', decimals: 6 },
72
+ },
73
+ remote: {
74
+ gasPrice: { amount: '50', decimals: 9 }, // 50 gwei = 5e10 wei
75
+ nativeToken: { price: '15', decimals: 18 },
76
+ },
77
+ };
78
+ const config = getLocalStorageGasOracleConfig({
79
+ local: 'feeToken',
80
+ localProtocolType: ProtocolType.Ethereum,
81
+ gasOracleParams,
82
+ exchangeRateMarginPct: 0,
83
+ }).remote;
84
+ const gasAmount = 200_000;
85
+ expect(quote(config, gasAmount)).to.be.approximately(0.75 * gasAmount, 0.75 * gasAmount * MAX_REBALANCED_QUOTE_ROUNDING_ERROR);
86
+ });
87
+ it('falls back to the floor when there is no gas price headroom to rebalance', () => {
88
+ // gasPrice in wei (5) is below MIN_REBALANCED_GAS_PRICE, so shifting any
89
+ // magnitude into the exchange rate would exceed the rounding-error bound.
90
+ // This documents the known fallback limitation: the quote is overpriced by
91
+ // the sub-1 exchange rate factor rather than preserving precision.
92
+ const gasOracleParams = {
93
+ feeToken: {
94
+ gasPrice: { amount: '1', decimals: 9 },
95
+ nativeToken: { price: '1', decimals: 6 },
96
+ },
97
+ remote: {
98
+ gasPrice: { amount: '5', decimals: 0 }, // <10 wei
99
+ nativeToken: { price: '10', decimals: 18 },
100
+ },
101
+ };
102
+ const config = getLocalStorageGasOracleConfig({
103
+ local: 'feeToken',
104
+ localProtocolType: ProtocolType.Ethereum,
105
+ gasOracleParams,
106
+ exchangeRateMarginPct: 0,
107
+ }).remote;
108
+ expect(config.tokenExchangeRate).to.equal('1');
109
+ expect(config.gasPrice).to.equal('5');
110
+ });
111
+ it('uses a smaller gas price scale when the exchange rate would floor to zero', () => {
112
+ const gasOracleParams = {
113
+ local: {
114
+ gasPrice: { amount: '1', decimals: 0 },
115
+ nativeToken: { price: '1', decimals: 18 },
116
+ },
117
+ remote: {
118
+ gasPrice: { amount: '0.5', decimals: 0 },
119
+ nativeToken: { price: '0.0000001', decimals: 18 },
120
+ },
121
+ };
122
+ const config = getLocalStorageGasOracleConfig({
123
+ local: 'local',
124
+ localProtocolType: ProtocolType.Ethereum,
125
+ gasOracleParams,
126
+ exchangeRateMarginPct: 0,
127
+ }).remote;
128
+ expect(config.tokenExchangeRate).to.equal('1');
129
+ expect(config.gasPrice).to.equal('500');
130
+ });
131
+ });
132
+ //# sourceMappingURL=utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../src/gas/utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAEL,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AAEpB,gFAAgF;AAChF,4DAA4D;AAC5D,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,mCAAmC,GAAG,CAAC,GAAG,IAAI,CAAC;AACrD,SAAS,KAAK,CACZ,MAAuD,EACvD,SAAiB;IAEjB,OAAO,CACL,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACxE,mBAAmB,CACpB,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,uEAAuE;QACvE,MAAM,eAAe,GAAyC;YAC5D,KAAK,EAAE;gBACL,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE;gBACtC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;aAC1C;YACD,MAAM,EAAE;gBACN,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,mBAAmB;gBAC3D,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;aAC1C;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,8BAA8B,CAAC;YAC5C,KAAK,EAAE,OAAO;YACd,iBAAiB,EAAE,YAAY,CAAC,QAAQ;YACxC,eAAe;YACf,qBAAqB,EAAE,CAAC;SACzB,CAAC,CAAC;QAEH,0EAA0E;QAC1E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,yEAAyE;QACzE,2EAA2E;QAC3E,2EAA2E;QAC3E,4CAA4C;QAC5C,MAAM,eAAe,GAAyC;YAC5D,QAAQ,EAAE;gBACR,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE;gBACtC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE;aACzC;YACD,MAAM,EAAE;gBACN,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,qBAAqB;gBAC9D,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;aAC3C;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,8BAA8B,CAAC;YAC5C,KAAK,EAAE,UAAU;YACjB,iBAAiB,EAAE,YAAY,CAAC,QAAQ;YACxC,eAAe;YACf,qBAAqB,EAAE,CAAC;SACzB,CAAC,CAAC,MAAM,CAAC;QAEV,+DAA+D;QAC/D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE3D,6EAA6E;QAC7E,sEAAsE;QACtE,MAAM,SAAS,GAAG,OAAO,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAClD,GAAG,GAAG,SAAS,EACf,GAAG,GAAG,SAAS,GAAG,mCAAmC,CACtD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,yEAAyE;QACzE,0EAA0E;QAC1E,qEAAqE;QACrE,gEAAgE;QAChE,MAAM,eAAe,GAAyC;YAC5D,QAAQ,EAAE;gBACR,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE;gBACtC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE;aACzC;YACD,MAAM,EAAE;gBACN,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,qBAAqB;gBAC9D,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;aAC3C;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,8BAA8B,CAAC;YAC5C,KAAK,EAAE,UAAU;YACjB,iBAAiB,EAAE,YAAY,CAAC,QAAQ;YACxC,eAAe;YACf,qBAAqB,EAAE,CAAC;SACzB,CAAC,CAAC,MAAM,CAAC;QAEV,MAAM,SAAS,GAAG,OAAO,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAClD,IAAI,GAAG,SAAS,EAChB,IAAI,GAAG,SAAS,GAAG,mCAAmC,CACvD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,yEAAyE;QACzE,0EAA0E;QAC1E,2EAA2E;QAC3E,mEAAmE;QACnE,MAAM,eAAe,GAAyC;YAC5D,QAAQ,EAAE;gBACR,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE;gBACtC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE;aACzC;YACD,MAAM,EAAE;gBACN,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU;gBAClD,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;aAC3C;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,8BAA8B,CAAC;YAC5C,KAAK,EAAE,UAAU;YACjB,iBAAiB,EAAE,YAAY,CAAC,QAAQ;YACxC,eAAe;YACf,qBAAqB,EAAE,CAAC;SACzB,CAAC,CAAC,MAAM,CAAC;QAEV,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,eAAe,GAAyC;YAC5D,KAAK,EAAE;gBACL,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE;gBACtC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;aAC1C;YACD,MAAM,EAAE;gBACN,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;gBACxC,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE;aAClD;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,8BAA8B,CAAC;YAC5C,KAAK,EAAE,OAAO;YACd,iBAAiB,EAAE,YAAY,CAAC,QAAQ;YACxC,eAAe;YACf,qBAAqB,EAAE,CAAC;SACzB,CAAC,CAAC,MAAM,CAAC;QAEV,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -72,6 +72,25 @@ export declare class EvmHookModule extends HyperlaneModule<ProtocolType.Ethereum
72
72
  currentConfig: IgpHookConfig;
73
73
  targetConfig: IgpHookConfig;
74
74
  }): Promise<AnnotatedEV5Transaction[]>;
75
+ /**
76
+ * Diffs and applies per-fee-token gas oracles on the IGP. Target-driven: the
77
+ * configured fee tokens are the only enumeration source (the on-chain
78
+ * tokenGasOracles mapping is not enumerable), so removals are intentionally
79
+ * unsupported and old fee-token mappings remain live until cleared by a
80
+ * dedicated teardown flow. Each configured token's current oracle is read back
81
+ * from chain, so no off-chain address bookkeeping is needed for additions and
82
+ * updates.
83
+ *
84
+ * For each fee token: resolve the oracle already wired on chain (reused across
85
+ * that token's destinations), or deploy a fresh StorageGasOracle if none is
86
+ * set yet; reconcile the oracle's remote gas data; then point any unmapped
87
+ * destinations at it via setTokenGasOracles.
88
+ */
89
+ protected updateIgpTokenGasOracles({ interchainGasPaymaster, targetTokenOracleConfig, config, }: {
90
+ interchainGasPaymaster: Address;
91
+ targetTokenOracleConfig: NonNullable<IgpConfig['tokenOracleConfig']>;
92
+ config: IgpConfig;
93
+ }): Promise<AnnotatedEV5Transaction[]>;
75
94
  protected updateIgpQuoteSigners({ currentSigners, targetSigners, }: {
76
95
  currentSigners: string[];
77
96
  targetSigners: string[];
@@ -133,8 +152,9 @@ export declare class EvmHookModule extends HyperlaneModule<ProtocolType.Ethereum
133
152
  protected deployAmountRoutingHook({ config, }: {
134
153
  config: AmountRoutingHookConfig;
135
154
  }): Promise<AmountRoutingHook>;
136
- protected deployStorageGasOracle({ config, }: {
155
+ protected deployStorageGasOracle({ config, oracleConfig, }: {
137
156
  config: IgpConfig;
157
+ oracleConfig?: IgpConfig['oracleConfig'];
138
158
  }): Promise<StorageGasOracle>;
139
159
  }
140
160
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"EvmHookModule.d.ts","sourceRoot":"","sources":["../../src/hook/EvmHookModule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EvmHookModule.d.ts","sourceRoot":"","sources":["../../src/hook/EvmHookModule.ts"],"names":[],"mappings":"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"}