@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.
- package/dist/block-explorer/utils.d.ts +8 -0
- package/dist/block-explorer/utils.d.ts.map +1 -1
- package/dist/block-explorer/utils.js +16 -3
- package/dist/block-explorer/utils.js.map +1 -1
- package/dist/ccip/consts.d.ts.map +1 -1
- package/dist/ccip/consts.js +0 -40
- package/dist/ccip/consts.js.map +1 -1
- package/dist/consts/multisigIsm.d.ts.map +1 -1
- package/dist/consts/multisigIsm.js +39 -241
- package/dist/consts/multisigIsm.js.map +1 -1
- package/dist/contracts/contracts.d.ts.map +1 -1
- package/dist/contracts/contracts.js +6 -1
- package/dist/contracts/contracts.js.map +1 -1
- package/dist/core/CoreDeployer.hardhat-test.js +9 -0
- package/dist/core/CoreDeployer.hardhat-test.js.map +1 -1
- package/dist/core/EvmCoreModule.d.ts.map +1 -1
- package/dist/core/EvmCoreModule.hardhat-test.js +23 -0
- package/dist/core/EvmCoreModule.hardhat-test.js.map +1 -1
- package/dist/core/EvmCoreModule.js +8 -5
- package/dist/core/EvmCoreModule.js.map +1 -1
- package/dist/core/EvmCoreReader.d.ts.map +1 -1
- package/dist/core/EvmCoreReader.js +34 -15
- package/dist/core/EvmCoreReader.js.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.d.ts.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.js +34 -13
- package/dist/core/HyperlaneCoreDeployer.js.map +1 -1
- package/dist/core/TestCoreApp.d.ts +1 -1
- package/dist/core/contracts.d.ts +5 -2
- package/dist/core/contracts.d.ts.map +1 -1
- package/dist/core/contracts.js +4 -1
- package/dist/core/contracts.js.map +1 -1
- package/dist/core/types.d.ts +1092 -627
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +30 -2
- package/dist/core/types.js.map +1 -1
- package/dist/core/types.test.d.ts +2 -0
- package/dist/core/types.test.d.ts.map +1 -0
- package/dist/core/types.test.js +50 -0
- package/dist/core/types.test.js.map +1 -0
- package/dist/deploy/HyperlaneDeployer.d.ts +1 -0
- package/dist/deploy/HyperlaneDeployer.d.ts.map +1 -1
- package/dist/deploy/HyperlaneDeployer.js +17 -8
- package/dist/deploy/HyperlaneDeployer.js.map +1 -1
- package/dist/deploy/proxy.d.ts.map +1 -1
- package/dist/deploy/proxy.js +9 -5
- package/dist/deploy/proxy.js.map +1 -1
- package/dist/deploy/warp.d.ts.map +1 -1
- package/dist/deploy/warp.js +5 -0
- package/dist/deploy/warp.js.map +1 -1
- package/dist/fee/EvmTokenFeeDeployer.d.ts +1 -0
- package/dist/fee/EvmTokenFeeDeployer.d.ts.map +1 -1
- package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js +40 -0
- package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js.map +1 -1
- package/dist/fee/EvmTokenFeeDeployer.js +8 -0
- package/dist/fee/EvmTokenFeeDeployer.js.map +1 -1
- package/dist/fee/EvmTokenFeeReader.d.ts.map +1 -1
- package/dist/fee/EvmTokenFeeReader.js +3 -13
- package/dist/fee/EvmTokenFeeReader.js.map +1 -1
- package/dist/fee/feeConfigMapping.d.ts +9 -0
- package/dist/fee/feeConfigMapping.d.ts.map +1 -0
- package/dist/fee/feeConfigMapping.js +86 -0
- package/dist/fee/feeConfigMapping.js.map +1 -0
- package/dist/fee/feeConfigMapping.test.d.ts +2 -0
- package/dist/fee/feeConfigMapping.test.d.ts.map +1 -0
- package/dist/fee/feeConfigMapping.test.js +204 -0
- package/dist/fee/feeConfigMapping.test.js.map +1 -0
- package/dist/fee/types.d.ts +185 -113
- package/dist/fee/types.d.ts.map +1 -1
- package/dist/fee/types.js +13 -11
- package/dist/fee/types.js.map +1 -1
- package/dist/fee/utils.d.ts +1 -32
- package/dist/fee/utils.d.ts.map +1 -1
- package/dist/fee/utils.js +1 -47
- package/dist/fee/utils.js.map +1 -1
- package/dist/gas/HyperlaneIgpChecker.d.ts +1 -0
- package/dist/gas/HyperlaneIgpChecker.d.ts.map +1 -1
- package/dist/gas/HyperlaneIgpChecker.js +43 -1
- package/dist/gas/HyperlaneIgpChecker.js.map +1 -1
- package/dist/gas/HyperlaneIgpDeployer.d.ts +17 -0
- package/dist/gas/HyperlaneIgpDeployer.d.ts.map +1 -1
- package/dist/gas/HyperlaneIgpDeployer.js +124 -4
- package/dist/gas/HyperlaneIgpDeployer.js.map +1 -1
- package/dist/gas/oracle/configure-gas-oracles.hardhat-test.js +33 -2
- package/dist/gas/oracle/configure-gas-oracles.hardhat-test.js.map +1 -1
- package/dist/gas/types.d.ts +17 -3
- package/dist/gas/types.d.ts.map +1 -1
- package/dist/gas/types.js +19 -0
- package/dist/gas/types.js.map +1 -1
- package/dist/gas/utils.d.ts +5 -1
- package/dist/gas/utils.d.ts.map +1 -1
- package/dist/gas/utils.js +92 -31
- package/dist/gas/utils.js.map +1 -1
- package/dist/gas/utils.test.d.ts +2 -0
- package/dist/gas/utils.test.d.ts.map +1 -0
- package/dist/gas/utils.test.js +132 -0
- package/dist/gas/utils.test.js.map +1 -0
- package/dist/hook/EvmHookModule.d.ts +21 -1
- package/dist/hook/EvmHookModule.d.ts.map +1 -1
- package/dist/hook/EvmHookModule.hardhat-test.js +125 -2
- package/dist/hook/EvmHookModule.hardhat-test.js.map +1 -1
- package/dist/hook/EvmHookModule.js +191 -17
- package/dist/hook/EvmHookModule.js.map +1 -1
- package/dist/hook/EvmHookReader.d.ts +4 -4
- package/dist/hook/EvmHookReader.d.ts.map +1 -1
- package/dist/hook/EvmHookReader.js +67 -16
- package/dist/hook/EvmHookReader.js.map +1 -1
- package/dist/hook/EvmHookReader.test.js +128 -2
- package/dist/hook/EvmHookReader.test.js.map +1 -1
- package/dist/hook/HyperlaneHookDeployer.d.ts +10 -5
- package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -1
- package/dist/hook/types.d.ts +338 -264
- package/dist/hook/types.d.ts.map +1 -1
- package/dist/hook/types.js +30 -6
- package/dist/hook/types.js.map +1 -1
- package/dist/hook/types.test.d.ts +2 -0
- package/dist/hook/types.test.d.ts.map +1 -0
- package/dist/hook/types.test.js +184 -0
- package/dist/hook/types.test.js.map +1 -0
- package/dist/hook/utils.d.ts +1 -0
- package/dist/hook/utils.d.ts.map +1 -1
- package/dist/hook/utils.js +16 -10
- package/dist/hook/utils.js.map +1 -1
- package/dist/ica/types.d.ts +380 -188
- package/dist/ica/types.d.ts.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/ism/EvmIsmModule.d.ts +7 -1
- package/dist/ism/EvmIsmModule.d.ts.map +1 -1
- package/dist/ism/EvmIsmModule.hardhat-test.js +4 -0
- package/dist/ism/EvmIsmModule.hardhat-test.js.map +1 -1
- package/dist/ism/EvmIsmModule.js +152 -4
- package/dist/ism/EvmIsmModule.js.map +1 -1
- package/dist/ism/EvmIsmReader.d.ts.map +1 -1
- package/dist/ism/EvmIsmReader.js +1 -2
- package/dist/ism/EvmIsmReader.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.hardhat-test.js +17 -0
- package/dist/ism/HyperlaneIsmFactory.hardhat-test.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.js +35 -9
- package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
- package/dist/ism/types.d.ts +88 -3
- package/dist/ism/types.d.ts.map +1 -1
- package/dist/ism/types.js +4 -0
- package/dist/ism/types.js.map +1 -1
- package/dist/metadata/ChainMetadataManager.d.ts.map +1 -1
- package/dist/metadata/ChainMetadataManager.js +2 -2
- package/dist/metadata/ChainMetadataManager.js.map +1 -1
- package/dist/metadata/ChainMetadataManager.test.js +71 -0
- package/dist/metadata/ChainMetadataManager.test.js.map +1 -1
- package/dist/metadata/agentConfig.d.ts +937 -168
- package/dist/metadata/agentConfig.d.ts.map +1 -1
- package/dist/metadata/agentConfig.js +68 -1
- package/dist/metadata/agentConfig.js.map +1 -1
- package/dist/metadata/agentConfig.test.js +67 -1
- package/dist/metadata/agentConfig.test.js.map +1 -1
- package/dist/middleware/account/InterchainAccount.d.ts.map +1 -1
- package/dist/middleware/account/InterchainAccount.js +10 -0
- package/dist/middleware/account/InterchainAccount.js.map +1 -1
- package/dist/middleware/account/InterchainAccount.test.js +26 -0
- package/dist/middleware/account/InterchainAccount.test.js.map +1 -1
- package/dist/providers/MultiProvider.d.ts +6 -0
- package/dist/providers/MultiProvider.d.ts.map +1 -1
- package/dist/providers/MultiProvider.js +28 -2
- package/dist/providers/MultiProvider.js.map +1 -1
- package/dist/providers/SeismicSigner.d.ts +54 -0
- package/dist/providers/SeismicSigner.d.ts.map +1 -0
- package/dist/providers/SeismicSigner.js +89 -0
- package/dist/providers/SeismicSigner.js.map +1 -0
- package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.d.ts.map +1 -1
- package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.js +8 -0
- package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.js.map +1 -1
- package/dist/providers/SmartProvider/SmartProvider.d.ts.map +1 -1
- package/dist/providers/SmartProvider/SmartProvider.js +69 -23
- package/dist/providers/SmartProvider/SmartProvider.js.map +1 -1
- package/dist/providers/SmartProvider/SmartProvider.test.js +34 -5
- package/dist/providers/SmartProvider/SmartProvider.test.js.map +1 -1
- package/dist/providers/builders/starknet.d.ts.map +1 -1
- package/dist/providers/builders/starknet.js +6 -1
- package/dist/providers/builders/starknet.js.map +1 -1
- package/dist/providers/transactions/submitter/IcaTxSubmitter.d.ts.map +1 -1
- package/dist/providers/transactions/submitter/IcaTxSubmitter.js +23 -8
- package/dist/providers/transactions/submitter/IcaTxSubmitter.js.map +1 -1
- package/dist/providers/transactions/submitter/IcaTxSubmitter.test.js +45 -0
- package/dist/providers/transactions/submitter/IcaTxSubmitter.test.js.map +1 -1
- package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxBuilder.d.ts +1 -1
- package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxBuilder.d.ts.map +1 -1
- package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.d.ts +1 -1
- package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.d.ts.map +1 -1
- package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.js.map +1 -1
- package/dist/providers/transactions/submitter/ethersV5/types.d.ts +6 -0
- package/dist/providers/transactions/submitter/ethersV5/types.d.ts.map +1 -1
- package/dist/providers/transactions/submitter/ethersV5/types.js +26 -5
- package/dist/providers/transactions/submitter/ethersV5/types.js.map +1 -1
- package/dist/providers/transactions/submitter/submitterBuilderGetter.d.ts.map +1 -1
- package/dist/providers/transactions/submitter/submitterBuilderGetter.js +11 -1
- package/dist/providers/transactions/submitter/submitterBuilderGetter.js.map +1 -1
- package/dist/providers/transactions/submitter/submitterBuilderGetter.test.d.ts +2 -0
- package/dist/providers/transactions/submitter/submitterBuilderGetter.test.d.ts.map +1 -0
- package/dist/providers/transactions/submitter/submitterBuilderGetter.test.js +38 -0
- package/dist/providers/transactions/submitter/submitterBuilderGetter.test.js.map +1 -0
- package/dist/router/types.d.ts +481 -236
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/types.js +1 -0
- package/dist/router/types.js.map +1 -1
- package/dist/router/types.test.d.ts +2 -0
- package/dist/router/types.test.d.ts.map +1 -0
- package/dist/router/types.test.js +32 -0
- package/dist/router/types.test.js.map +1 -0
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +3 -0
- package/dist/test/testUtils.js.map +1 -1
- package/dist/token/EvmWarpModule.d.ts +18 -1
- package/dist/token/EvmWarpModule.d.ts.map +1 -1
- package/dist/token/EvmWarpModule.hardhat-test.js +30 -0
- package/dist/token/EvmWarpModule.hardhat-test.js.map +1 -1
- package/dist/token/EvmWarpModule.js +67 -5
- package/dist/token/EvmWarpModule.js.map +1 -1
- package/dist/token/EvmWarpModule.test.d.ts +2 -0
- package/dist/token/EvmWarpModule.test.d.ts.map +1 -0
- package/dist/token/EvmWarpModule.test.js +77 -0
- package/dist/token/EvmWarpModule.test.js.map +1 -0
- package/dist/token/EvmWarpRouteReader.d.ts +1 -0
- package/dist/token/EvmWarpRouteReader.d.ts.map +1 -1
- package/dist/token/EvmWarpRouteReader.js +17 -0
- package/dist/token/EvmWarpRouteReader.js.map +1 -1
- package/dist/token/EvmXERC20Module.d.ts +31 -26
- package/dist/token/EvmXERC20Module.d.ts.map +1 -1
- package/dist/token/EvmXERC20Module.js +46 -3
- package/dist/token/EvmXERC20Module.js.map +1 -1
- package/dist/token/EvmXERC20Module.test.js +162 -1
- package/dist/token/EvmXERC20Module.test.js.map +1 -1
- package/dist/token/EvmXERC20Reader.d.ts +17 -0
- package/dist/token/EvmXERC20Reader.d.ts.map +1 -1
- package/dist/token/EvmXERC20Reader.js +37 -1
- package/dist/token/EvmXERC20Reader.js.map +1 -1
- package/dist/token/adapters/EvmHypSyntheticAdapter.test.d.ts +2 -0
- package/dist/token/adapters/EvmHypSyntheticAdapter.test.d.ts.map +1 -0
- package/dist/token/adapters/EvmHypSyntheticAdapter.test.js +96 -0
- package/dist/token/adapters/EvmHypSyntheticAdapter.test.js.map +1 -0
- package/dist/token/adapters/EvmTokenAdapter.d.ts.map +1 -1
- package/dist/token/adapters/EvmTokenAdapter.js +25 -12
- package/dist/token/adapters/EvmTokenAdapter.js.map +1 -1
- package/dist/token/configUtils.test.js.map +1 -1
- package/dist/token/deploy.d.ts +1 -0
- package/dist/token/deploy.d.ts.map +1 -1
- package/dist/token/deploy.js +13 -0
- package/dist/token/deploy.js.map +1 -1
- package/dist/token/tokenMetadataUtils.d.ts.map +1 -1
- package/dist/token/tokenMetadataUtils.js +1 -0
- package/dist/token/tokenMetadataUtils.js.map +1 -1
- package/dist/token/types.d.ts +1373 -699
- package/dist/token/types.d.ts.map +1 -1
- package/dist/token/types.test.js +11 -0
- package/dist/token/types.test.js.map +1 -1
- package/dist/token/xerc20.d.ts.map +1 -1
- package/dist/token/xerc20.js +10 -2
- package/dist/token/xerc20.js.map +1 -1
- package/dist/token/xerc20.test.d.ts +2 -0
- package/dist/token/xerc20.test.d.ts.map +1 -0
- package/dist/token/xerc20.test.js +143 -0
- package/dist/token/xerc20.test.js.map +1 -0
- package/dist/utils/contract.d.ts +6 -0
- package/dist/utils/contract.d.ts.map +1 -1
- package/dist/utils/contract.js +11 -0
- package/dist/utils/contract.js.map +1 -1
- package/dist/utils/contract.test.js +2 -1
- package/dist/utils/contract.test.js.map +1 -1
- package/dist/utils/gas.d.ts +1 -0
- package/dist/utils/gas.d.ts.map +1 -1
- package/dist/utils/gas.js +1 -0
- package/dist/utils/gas.js.map +1 -1
- package/dist/utils/gnosisSafe.d.ts +4 -1
- package/dist/utils/gnosisSafe.d.ts.map +1 -1
- package/dist/utils/gnosisSafe.js +20 -7
- package/dist/utils/gnosisSafe.js.map +1 -1
- package/dist/utils/gnosisSafe.test.js +44 -1
- package/dist/utils/gnosisSafe.test.js.map +1 -1
- package/dist/utils/ism.d.ts.map +1 -1
- package/dist/utils/ism.js +4 -2
- package/dist/utils/ism.js.map +1 -1
- package/dist/warp/WarpCore.d.ts.map +1 -1
- package/dist/warp/WarpCore.js +4 -3
- package/dist/warp/WarpCore.js.map +1 -1
- 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":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;
|
|
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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"}
|
package/dist/gas/types.d.ts
CHANGED
|
@@ -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
|
package/dist/gas/types.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
package/dist/gas/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gas/types.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/gas/utils.d.ts
CHANGED
|
@@ -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
|
package/dist/gas/utils.d.ts.map
CHANGED
|
@@ -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,
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
132
|
-
|
|
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,
|
|
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),
|
|
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
|
-
|
|
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)
|
|
164
|
-
//
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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
|
-
|
|
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:
|
|
181
|
-
gasPrice: newGasPriceInteger.
|
|
241
|
+
tokenExchangeRate: newExchangeRateInteger.toFixed(0),
|
|
242
|
+
gasPrice: newGasPriceInteger.toFixed(0),
|
|
182
243
|
tokenDecimals: remoteDecimals,
|
|
183
244
|
};
|
|
184
245
|
}
|
package/dist/gas/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/gas/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/gas/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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":"AACA,OAAO,EAAa,MAAM,EAAE,MAAM,QAAQ,CAAC;AAI3C,OAAO,EACL,iBAAiB,EACjB,aAAa,EAEb,QAAQ,EAER,iBAAiB,EAKjB,sBAAsB,EAEtB,WAAW,EAIX,YAAY,EAGZ,WAAW,EAEX,eAAe,EAEf,qBAAqB,EAGrB,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,OAAO,EACP,MAAM,EACN,UAAU,EACV,YAAY,EASb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,qBAAqB,EACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,
|
|
1
|
+
{"version":3,"file":"EvmHookModule.d.ts","sourceRoot":"","sources":["../../src/hook/EvmHookModule.ts"],"names":[],"mappings":"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"}
|