@hyperlane-xyz/sdk 19.5.0 → 19.7.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 (177) hide show
  1. package/dist/consts/multisigIsm.d.ts.map +1 -1
  2. package/dist/consts/multisigIsm.js +0 -10
  3. package/dist/consts/multisigIsm.js.map +1 -1
  4. package/dist/core/adapters/SealevelCoreAdapter.d.ts +17 -1
  5. package/dist/core/adapters/SealevelCoreAdapter.d.ts.map +1 -1
  6. package/dist/core/adapters/SealevelCoreAdapter.js +69 -1
  7. package/dist/core/adapters/SealevelCoreAdapter.js.map +1 -1
  8. package/dist/core/types.d.ts +430 -0
  9. package/dist/core/types.d.ts.map +1 -1
  10. package/dist/deploy/HyperlaneAppChecker.d.ts.map +1 -1
  11. package/dist/deploy/HyperlaneAppChecker.js +2 -2
  12. package/dist/deploy/HyperlaneAppChecker.js.map +1 -1
  13. package/dist/deploy/proxy.d.ts.map +1 -1
  14. package/dist/deploy/proxy.js +9 -0
  15. package/dist/deploy/proxy.js.map +1 -1
  16. package/dist/deploy/warp.d.ts.map +1 -1
  17. package/dist/deploy/warp.js +3 -1
  18. package/dist/deploy/warp.js.map +1 -1
  19. package/dist/fee/EvmTokenFeeDeployer.d.ts +16 -0
  20. package/dist/fee/EvmTokenFeeDeployer.d.ts.map +1 -0
  21. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.d.ts +2 -0
  22. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.d.ts.map +1 -0
  23. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js +133 -0
  24. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js.map +1 -0
  25. package/dist/fee/EvmTokenFeeDeployer.js +75 -0
  26. package/dist/fee/EvmTokenFeeDeployer.js.map +1 -0
  27. package/dist/fee/EvmTokenFeeModule.d.ts +40 -0
  28. package/dist/fee/EvmTokenFeeModule.d.ts.map +1 -0
  29. package/dist/fee/EvmTokenFeeModule.hardhat-test.d.ts +2 -0
  30. package/dist/fee/EvmTokenFeeModule.hardhat-test.d.ts.map +1 -0
  31. package/dist/fee/EvmTokenFeeModule.hardhat-test.js +215 -0
  32. package/dist/fee/EvmTokenFeeModule.hardhat-test.js.map +1 -0
  33. package/dist/fee/EvmTokenFeeModule.js +182 -0
  34. package/dist/fee/EvmTokenFeeModule.js.map +1 -0
  35. package/dist/fee/EvmTokenFeeReader.d.ts +25 -0
  36. package/dist/fee/EvmTokenFeeReader.d.ts.map +1 -0
  37. package/dist/fee/EvmTokenFeeReader.hardhat-test.d.ts +4 -0
  38. package/dist/fee/EvmTokenFeeReader.hardhat-test.d.ts.map +1 -0
  39. package/dist/fee/EvmTokenFeeReader.hardhat-test.js +133 -0
  40. package/dist/fee/EvmTokenFeeReader.hardhat-test.js.map +1 -0
  41. package/dist/fee/EvmTokenFeeReader.js +116 -0
  42. package/dist/fee/EvmTokenFeeReader.js.map +1 -0
  43. package/dist/fee/contracts.d.ts +9 -0
  44. package/dist/fee/contracts.d.ts.map +1 -0
  45. package/dist/fee/contracts.js +9 -0
  46. package/dist/fee/contracts.js.map +1 -0
  47. package/dist/fee/types.d.ts +386 -0
  48. package/dist/fee/types.d.ts.map +1 -0
  49. package/dist/fee/types.js +107 -0
  50. package/dist/fee/types.js.map +1 -0
  51. package/dist/fee/utils.d.ts +10 -0
  52. package/dist/fee/utils.d.ts.map +1 -0
  53. package/dist/fee/utils.js +16 -0
  54. package/dist/fee/utils.js.map +1 -0
  55. package/dist/fork/types.d.ts +15 -15
  56. package/dist/gas/token-prices.d.ts +3 -0
  57. package/dist/gas/token-prices.d.ts.map +1 -1
  58. package/dist/gas/token-prices.js +20 -9
  59. package/dist/gas/token-prices.js.map +1 -1
  60. package/dist/ica/types.d.ts +322 -0
  61. package/dist/ica/types.d.ts.map +1 -1
  62. package/dist/index.d.ts +11 -5
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +10 -3
  65. package/dist/index.js.map +1 -1
  66. package/dist/ism/adapters/SealevelMultisigAdapter.d.ts +59 -0
  67. package/dist/ism/adapters/SealevelMultisigAdapter.d.ts.map +1 -0
  68. package/dist/ism/adapters/SealevelMultisigAdapter.js +133 -0
  69. package/dist/ism/adapters/SealevelMultisigAdapter.js.map +1 -0
  70. package/dist/ism/serialization.d.ts +74 -0
  71. package/dist/ism/serialization.d.ts.map +1 -0
  72. package/dist/ism/serialization.js +177 -0
  73. package/dist/ism/serialization.js.map +1 -0
  74. package/dist/mailbox/serialization.d.ts +41 -0
  75. package/dist/mailbox/serialization.d.ts.map +1 -0
  76. package/dist/mailbox/serialization.js +104 -0
  77. package/dist/mailbox/serialization.js.map +1 -0
  78. package/dist/metadata/agentConfig.d.ts +4 -4
  79. package/dist/router/HyperlaneRouterDeployer.d.ts +1 -0
  80. package/dist/router/HyperlaneRouterDeployer.d.ts.map +1 -1
  81. package/dist/router/HyperlaneRouterDeployer.js +12 -0
  82. package/dist/router/HyperlaneRouterDeployer.js.map +1 -1
  83. package/dist/router/types.d.ts +326 -1
  84. package/dist/router/types.d.ts.map +1 -1
  85. package/dist/router/types.js +2 -0
  86. package/dist/router/types.js.map +1 -1
  87. package/dist/token/EvmERC20WarpModule.d.ts +14 -1
  88. package/dist/token/EvmERC20WarpModule.d.ts.map +1 -1
  89. package/dist/token/EvmERC20WarpModule.hardhat-test.js +415 -25
  90. package/dist/token/EvmERC20WarpModule.hardhat-test.js.map +1 -1
  91. package/dist/token/EvmERC20WarpModule.js +172 -5
  92. package/dist/token/EvmERC20WarpModule.js.map +1 -1
  93. package/dist/token/EvmERC20WarpRouteReader.d.ts +8 -0
  94. package/dist/token/EvmERC20WarpRouteReader.d.ts.map +1 -1
  95. package/dist/token/EvmERC20WarpRouteReader.hardhat-test.js +185 -3
  96. package/dist/token/EvmERC20WarpRouteReader.hardhat-test.js.map +1 -1
  97. package/dist/token/EvmERC20WarpRouteReader.js +169 -36
  98. package/dist/token/EvmERC20WarpRouteReader.js.map +1 -1
  99. package/dist/token/Token.d.ts +7 -0
  100. package/dist/token/Token.d.ts.map +1 -1
  101. package/dist/token/Token.js +38 -5
  102. package/dist/token/Token.js.map +1 -1
  103. package/dist/token/Token.test.js +7 -0
  104. package/dist/token/Token.test.js.map +1 -1
  105. package/dist/token/TokenStandard.d.ts +3 -0
  106. package/dist/token/TokenStandard.d.ts.map +1 -1
  107. package/dist/token/TokenStandard.js +9 -1
  108. package/dist/token/TokenStandard.js.map +1 -1
  109. package/dist/token/adapters/CosmWasmTokenAdapter.d.ts +3 -3
  110. package/dist/token/adapters/CosmWasmTokenAdapter.d.ts.map +1 -1
  111. package/dist/token/adapters/CosmWasmTokenAdapter.js +7 -7
  112. package/dist/token/adapters/CosmWasmTokenAdapter.js.map +1 -1
  113. package/dist/token/adapters/CosmosModuleTokenAdapter.d.ts +2 -2
  114. package/dist/token/adapters/CosmosModuleTokenAdapter.d.ts.map +1 -1
  115. package/dist/token/adapters/CosmosModuleTokenAdapter.js +13 -7
  116. package/dist/token/adapters/CosmosModuleTokenAdapter.js.map +1 -1
  117. package/dist/token/adapters/CosmosTokenAdapter.d.ts +4 -3
  118. package/dist/token/adapters/CosmosTokenAdapter.d.ts.map +1 -1
  119. package/dist/token/adapters/CosmosTokenAdapter.js +26 -9
  120. package/dist/token/adapters/CosmosTokenAdapter.js.map +1 -1
  121. package/dist/token/adapters/EvmTokenAdapter.d.ts +28 -9
  122. package/dist/token/adapters/EvmTokenAdapter.d.ts.map +1 -1
  123. package/dist/token/adapters/EvmTokenAdapter.js +137 -46
  124. package/dist/token/adapters/EvmTokenAdapter.js.map +1 -1
  125. package/dist/token/adapters/ITokenAdapter.d.ts +14 -3
  126. package/dist/token/adapters/ITokenAdapter.d.ts.map +1 -1
  127. package/dist/token/adapters/M0PortalLiteTokenAdapter.d.ts +2 -2
  128. package/dist/token/adapters/M0PortalLiteTokenAdapter.d.ts.map +1 -1
  129. package/dist/token/adapters/M0PortalLiteTokenAdapter.js +10 -4
  130. package/dist/token/adapters/M0PortalLiteTokenAdapter.js.map +1 -1
  131. package/dist/token/adapters/RadixTokenAdapter.d.ts +8 -4
  132. package/dist/token/adapters/RadixTokenAdapter.d.ts.map +1 -1
  133. package/dist/token/adapters/RadixTokenAdapter.js +44 -14
  134. package/dist/token/adapters/RadixTokenAdapter.js.map +1 -1
  135. package/dist/token/adapters/SealevelTokenAdapter.d.ts +2 -2
  136. package/dist/token/adapters/SealevelTokenAdapter.d.ts.map +1 -1
  137. package/dist/token/adapters/SealevelTokenAdapter.js +44 -13
  138. package/dist/token/adapters/SealevelTokenAdapter.js.map +1 -1
  139. package/dist/token/adapters/StarknetTokenAdapter.d.ts +24 -3
  140. package/dist/token/adapters/StarknetTokenAdapter.d.ts.map +1 -1
  141. package/dist/token/adapters/StarknetTokenAdapter.js +75 -9
  142. package/dist/token/adapters/StarknetTokenAdapter.js.map +1 -1
  143. package/dist/token/config.d.ts +7 -2
  144. package/dist/token/config.d.ts.map +1 -1
  145. package/dist/token/config.js +6 -2
  146. package/dist/token/config.js.map +1 -1
  147. package/dist/token/contracts.d.ts +7 -2
  148. package/dist/token/contracts.d.ts.map +1 -1
  149. package/dist/token/contracts.js +13 -2
  150. package/dist/token/contracts.js.map +1 -1
  151. package/dist/token/deploy.d.ts +7 -3
  152. package/dist/token/deploy.d.ts.map +1 -1
  153. package/dist/token/deploy.js +143 -16
  154. package/dist/token/deploy.js.map +1 -1
  155. package/dist/token/sealevel/metadata.d.ts +33 -0
  156. package/dist/token/sealevel/metadata.d.ts.map +1 -0
  157. package/dist/token/sealevel/metadata.js +90 -0
  158. package/dist/token/sealevel/metadata.js.map +1 -0
  159. package/dist/token/types.d.ts +21610 -3712
  160. package/dist/token/types.d.ts.map +1 -1
  161. package/dist/token/types.js +100 -6
  162. package/dist/token/types.js.map +1 -1
  163. package/dist/token/types.test.js +47 -1
  164. package/dist/token/types.test.js.map +1 -1
  165. package/dist/utils/contract.d.ts +2 -0
  166. package/dist/utils/contract.d.ts.map +1 -0
  167. package/dist/utils/contract.js +5 -0
  168. package/dist/utils/contract.js.map +1 -0
  169. package/dist/warp/WarpCore.d.ts +20 -10
  170. package/dist/warp/WarpCore.d.ts.map +1 -1
  171. package/dist/warp/WarpCore.js +111 -38
  172. package/dist/warp/WarpCore.js.map +1 -1
  173. package/dist/warp/WarpCore.test.js +17 -8
  174. package/dist/warp/WarpCore.test.js.map +1 -1
  175. package/dist/warp/types.d.ts +1 -0
  176. package/dist/warp/types.d.ts.map +1 -1
  177. package/package.json +6 -6
@@ -0,0 +1,182 @@
1
+ import { constants } from 'ethers';
2
+ import { RoutingFee__factory } from '@hyperlane-xyz/core';
3
+ import { assert, deepEquals, eqAddress, isZeroishAddress, objMap, objMerge, objOmit, promiseObjAll, rootLogger, } from '@hyperlane-xyz/utils';
4
+ import { transferOwnershipTransactions } from '../contracts/contracts.js';
5
+ import { HyperlaneModule, } from '../core/AbstractHyperlaneModule.js';
6
+ import { normalizeConfig } from '../utils/ism.js';
7
+ import { EvmTokenFeeDeployer } from './EvmTokenFeeDeployer.js';
8
+ import { EvmTokenFeeReader, } from './EvmTokenFeeReader.js';
9
+ import { ImmutableTokenFeeType, TokenFeeConfigSchema, TokenFeeType, } from './types.js';
10
+ export class EvmTokenFeeModule extends HyperlaneModule {
11
+ multiProvider;
12
+ contractVerifier;
13
+ logger = rootLogger.child({ module: 'EvmTokenFeeModule' });
14
+ deployer;
15
+ reader;
16
+ chainName;
17
+ chainId;
18
+ constructor(multiProvider, params, contractVerifier) {
19
+ super(params);
20
+ this.multiProvider = multiProvider;
21
+ this.contractVerifier = contractVerifier;
22
+ this.chainName = multiProvider.getChainName(params.chain);
23
+ this.chainId = multiProvider.getDomainId(this.chainName);
24
+ this.deployer = new EvmTokenFeeDeployer(multiProvider, this.chainName, {
25
+ logger: this.logger,
26
+ contractVerifier: contractVerifier,
27
+ });
28
+ this.reader = new EvmTokenFeeReader(multiProvider, this.chainName);
29
+ }
30
+ static async create({ multiProvider, chain, config, contractVerifier, }) {
31
+ const chainName = multiProvider.getChainName(chain);
32
+ const module = new EvmTokenFeeModule(multiProvider, {
33
+ addresses: {
34
+ deployedFee: constants.AddressZero,
35
+ },
36
+ chain,
37
+ config,
38
+ }, contractVerifier);
39
+ const contracts = await module.deploy({
40
+ multiProvider,
41
+ chainName,
42
+ contractVerifier,
43
+ config,
44
+ });
45
+ module.args.addresses.deployedFee =
46
+ contracts[chainName][config.type].address;
47
+ return module;
48
+ }
49
+ // Processes the Input config to the Final config
50
+ // For LinearFee, it converts the bps to maxFee and halfAmount
51
+ static async expandConfig(params) {
52
+ const { config, multiProvider, chainName } = params;
53
+ let intermediaryConfig;
54
+ if (config.type === TokenFeeType.LinearFee) {
55
+ const reader = new EvmTokenFeeReader(params.multiProvider, params.chainName);
56
+ let { maxFee, halfAmount } = config;
57
+ if (!isZeroishAddress(config.token)) {
58
+ const { maxFee: convertedMaxFee, halfAmount: convertedHalfAmount } = await reader.convertFromBps(config.bps, config.token);
59
+ maxFee = convertedMaxFee;
60
+ halfAmount = convertedHalfAmount;
61
+ }
62
+ assert(maxFee && halfAmount, 'Config properties "maxFee" and "halfAmount" must be supplied when "token" is not supplied');
63
+ intermediaryConfig = {
64
+ type: TokenFeeType.LinearFee,
65
+ token: config.token,
66
+ owner: config.owner,
67
+ bps: config.bps,
68
+ maxFee,
69
+ halfAmount,
70
+ };
71
+ }
72
+ else if (config.type === TokenFeeType.RoutingFee) {
73
+ const feeContracts = config.feeContracts
74
+ ? await promiseObjAll(objMap(config.feeContracts, async (_, innerConfig) => {
75
+ return EvmTokenFeeModule.expandConfig({
76
+ config: innerConfig,
77
+ multiProvider,
78
+ chainName,
79
+ });
80
+ }))
81
+ : undefined;
82
+ intermediaryConfig = {
83
+ type: TokenFeeType.RoutingFee,
84
+ token: config.token,
85
+ owner: config.owner,
86
+ maxFee: constants.MaxUint256.toBigInt(),
87
+ halfAmount: constants.MaxUint256.toBigInt(),
88
+ feeContracts,
89
+ };
90
+ }
91
+ else {
92
+ intermediaryConfig = config;
93
+ }
94
+ return TokenFeeConfigSchema.parse(intermediaryConfig);
95
+ }
96
+ async deploy(params) {
97
+ const deployer = new EvmTokenFeeDeployer(params.multiProvider, params.chainName, {
98
+ contractVerifier: params.contractVerifier,
99
+ });
100
+ return deployer.deploy({ [params.chainName]: params.config });
101
+ }
102
+ async read(params) {
103
+ const address = params?.address ?? this.args.addresses.deployedFee;
104
+ const routingDestinations = params?.routingDestinations;
105
+ return this.reader.deriveTokenFeeConfig({
106
+ address: address,
107
+ routingDestinations,
108
+ });
109
+ }
110
+ async update(targetConfig, params) {
111
+ let updateTransactions = [];
112
+ const normalizedTargetConfig = normalizeConfig(await EvmTokenFeeModule.expandConfig({
113
+ config: targetConfig,
114
+ multiProvider: this.multiProvider,
115
+ chainName: this.chainName,
116
+ }));
117
+ const actualConfig = await this.read(params);
118
+ const normalizedActualConfig = normalizeConfig(actualConfig);
119
+ //If configs are the same, return empty array
120
+ if (deepEquals(normalizedActualConfig, normalizedTargetConfig)) {
121
+ this.logger.debug(`Same config for ${normalizedTargetConfig.type}, no update needed`);
122
+ return [];
123
+ }
124
+ // Redeploy immutable fee types, if owner is the same, but the rest of the config is different
125
+ const nonOwnerDiffers = !deepEquals(objOmit(normalizedActualConfig, { owner: true }), objOmit(normalizedTargetConfig, { owner: true }));
126
+ if (ImmutableTokenFeeType.includes(normalizedTargetConfig.type) &&
127
+ nonOwnerDiffers) {
128
+ this.logger.info(`Immutable fee type ${normalizedTargetConfig.type}, redeploying`);
129
+ const contracts = await this.deploy({
130
+ config: normalizedTargetConfig,
131
+ multiProvider: this.multiProvider,
132
+ chainName: this.chainName,
133
+ contractVerifier: this.contractVerifier,
134
+ });
135
+ this.args.addresses.deployedFee =
136
+ contracts[this.chainName][normalizedTargetConfig.type].address;
137
+ return [];
138
+ }
139
+ // if the type is a mutable (for now, only routing fee), then update
140
+ updateTransactions = [
141
+ ...(await this.updateRoutingFee(objMerge(actualConfig, normalizedTargetConfig, 10, true))),
142
+ ...this.createOwnershipUpdateTxs(normalizedActualConfig, normalizedTargetConfig),
143
+ ];
144
+ return updateTransactions;
145
+ }
146
+ async updateRoutingFee(targetConfig) {
147
+ const updateTransactions = [];
148
+ if (!targetConfig.feeContracts)
149
+ return [];
150
+ const currentRoutingAddress = this.args.addresses.deployedFee;
151
+ await promiseObjAll(objMap(targetConfig.feeContracts, async (chainName, config) => {
152
+ const address = config.address;
153
+ const subFeeModule = new EvmTokenFeeModule(this.multiProvider, {
154
+ addresses: {
155
+ deployedFee: address,
156
+ },
157
+ chain: this.chainName,
158
+ config,
159
+ }, this.contractVerifier);
160
+ const subFeeUpdateTransactions = await subFeeModule.update(config, {
161
+ address,
162
+ });
163
+ const { deployedFee: deployedSubFee } = subFeeModule.serialize();
164
+ updateTransactions.push(...subFeeUpdateTransactions);
165
+ if (!eqAddress(deployedSubFee, address)) {
166
+ const annotation = `Sub fee contract redeployed. Updating contract for ${chainName} to ${deployedSubFee}`;
167
+ this.logger.debug(annotation);
168
+ updateTransactions.push({
169
+ annotation: annotation,
170
+ chainId: this.chainId,
171
+ to: currentRoutingAddress,
172
+ data: RoutingFee__factory.createInterface().encodeFunctionData('setFeeContract(uint32,address)', [this.multiProvider.getDomainId(chainName), deployedSubFee]),
173
+ });
174
+ }
175
+ }));
176
+ return updateTransactions;
177
+ }
178
+ createOwnershipUpdateTxs(actualConfig, expectedConfig) {
179
+ return transferOwnershipTransactions(this.multiProvider.getEvmChainId(this.args.chain), this.args.addresses.deployedFee, actualConfig, expectedConfig, `${expectedConfig.type} Warp Route`);
180
+ }
181
+ }
182
+ //# sourceMappingURL=EvmTokenFeeModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmTokenFeeModule.js","sourceRoot":"","sources":["../../src/fee/EvmTokenFeeModule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { Address, WithAddress } from '@hyperlane-xyz/utils';
2
+ import { MultiProvider } from '../providers/MultiProvider.js';
3
+ import { ChainName, ChainNameOrId } from '../types.js';
4
+ import { HyperlaneReader } from '../utils/HyperlaneReader.js';
5
+ import { FeeParameters, RoutingFeeConfig, TokenFeeConfig } from './types.js';
6
+ export type DerivedTokenFeeConfig = WithAddress<TokenFeeConfig>;
7
+ export type DerivedRoutingFeeConfig = WithAddress<RoutingFeeConfig> & {
8
+ feeContracts: Record<ChainName, DerivedTokenFeeConfig>;
9
+ };
10
+ export type TokenFeeReaderParams = {
11
+ address: Address;
12
+ routingDestinations?: number[];
13
+ };
14
+ export declare class EvmTokenFeeReader extends HyperlaneReader {
15
+ protected readonly multiProvider: MultiProvider;
16
+ protected readonly chain: ChainNameOrId;
17
+ constructor(multiProvider: MultiProvider, chain: ChainNameOrId);
18
+ deriveTokenFeeConfig(params: TokenFeeReaderParams): Promise<DerivedTokenFeeConfig>;
19
+ private deriveLinearFeeConfig;
20
+ private deriveProgressiveFeeConfig;
21
+ private deriveRegressiveFeeConfig;
22
+ private deriveRoutingFeeConfig;
23
+ convertFromBps(bps: bigint, tokenAddress: Address): Promise<FeeParameters>;
24
+ }
25
+ //# sourceMappingURL=EvmTokenFeeReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmTokenFeeReader.d.ts","sourceRoot":"","sources":["../../src/fee/EvmTokenFeeReader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAU,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EACL,aAAa,EAEb,gBAAgB,EAChB,cAAc,EAGf,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,qBAAqB,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;AAEhE,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,gBAAgB,CAAC,GAAG;IACpE,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,qBAAa,iBAAkB,SAAQ,eAAe;IAElD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAC/C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa;gBADpB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,aAAa;IAKnC,oBAAoB,CACxB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,qBAAqB,CAAC;YAiCnB,qBAAqB;YAyBrB,0BAA0B;YAM1B,yBAAyB;YAMzB,sBAAsB;IA2C9B,cAAc,CAClB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,aAAa,CAAC;CAY1B"}
@@ -0,0 +1,4 @@
1
+ export declare const MAX_FEE = 1157920892373161954235709850086879078532699846656405640394n;
2
+ export declare const HALF_AMOUNT = 5789604461865809771178549250434395392663499233282028201970n;
3
+ export declare const BPS: bigint;
4
+ //# sourceMappingURL=EvmTokenFeeReader.hardhat-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmTokenFeeReader.hardhat-test.d.ts","sourceRoot":"","sources":["../../src/fee/EvmTokenFeeReader.hardhat-test.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,OAAO,8DACyC,CAAC;AAC9D,eAAO,MAAM,WAAW,8DACqC,CAAC;AAC9D,eAAO,MAAM,GAAG,QAAqC,CAAC"}
@@ -0,0 +1,133 @@
1
+ import { expect } from 'chai';
2
+ import { constants } from 'ethers';
3
+ import hre from 'hardhat';
4
+ import { ERC20Test__factory } from '@hyperlane-xyz/core';
5
+ import { TestChainName } from '../consts/testChains.js';
6
+ import { MultiProvider } from '../providers/MultiProvider.js';
7
+ import { randomInt } from '../test/testUtils.js';
8
+ import { normalizeConfig } from '../utils/ism.js';
9
+ import { EvmTokenFeeDeployer } from './EvmTokenFeeDeployer.js';
10
+ import { EvmTokenFeeReader } from './EvmTokenFeeReader.js';
11
+ import { TokenFeeConfigSchema, TokenFeeType } from './types.js';
12
+ import { convertToBps } from './utils.js';
13
+ export const MAX_FEE = 1157920892373161954235709850086879078532699846656405640394n;
14
+ export const HALF_AMOUNT = 5789604461865809771178549250434395392663499233282028201970n;
15
+ export const BPS = convertToBps(MAX_FEE, HALF_AMOUNT);
16
+ describe('EvmTokenFeeReader', () => {
17
+ let multiProvider;
18
+ let signer;
19
+ let token;
20
+ const TOKEN_TOTAL_SUPPLY = '100000000000000000000';
21
+ before(async () => {
22
+ [signer] = await hre.ethers.getSigners();
23
+ multiProvider = MultiProvider.createTestMultiProvider({ signer });
24
+ const factory = new ERC20Test__factory(signer);
25
+ token = await factory.deploy('fake', 'FAKE', TOKEN_TOTAL_SUPPLY, 18);
26
+ await token.deployed();
27
+ });
28
+ describe('LinearFee', () => {
29
+ it('should read the token fee config', async () => {
30
+ const config = TokenFeeConfigSchema.parse({
31
+ type: TokenFeeType.LinearFee,
32
+ maxFee: MAX_FEE,
33
+ halfAmount: HALF_AMOUNT,
34
+ bps: BPS,
35
+ token: token.address,
36
+ owner: signer.address,
37
+ });
38
+ const deployer = new EvmTokenFeeDeployer(multiProvider, TestChainName.test2);
39
+ const deployedContracts = await deployer.deploy({
40
+ [TestChainName.test2]: config,
41
+ });
42
+ const reader = new EvmTokenFeeReader(multiProvider, TestChainName.test2);
43
+ const tokenFee = deployedContracts[TestChainName.test2][TokenFeeType.LinearFee];
44
+ const onchainConfig = await reader.deriveTokenFeeConfig({
45
+ address: tokenFee.address,
46
+ });
47
+ expect(normalizeConfig(onchainConfig)).to.deep.equal(normalizeConfig({
48
+ ...config,
49
+ maxFee: MAX_FEE,
50
+ halfAmount: HALF_AMOUNT,
51
+ bps: BPS,
52
+ }));
53
+ });
54
+ it('should convert maxFee and halfAmount to bps', async () => {
55
+ const maxFee = BigInt(randomInt(2, 100000000));
56
+ const halfAmount = maxFee * 5n;
57
+ const config = {
58
+ type: TokenFeeType.LinearFee,
59
+ owner: signer.address,
60
+ token: token.address,
61
+ maxFee,
62
+ halfAmount,
63
+ bps: convertToBps(maxFee, halfAmount),
64
+ };
65
+ const parsedConfig = TokenFeeConfigSchema.parse(config);
66
+ const deployer = new EvmTokenFeeDeployer(multiProvider, TestChainName.test2);
67
+ await deployer.deploy({
68
+ [TestChainName.test3]: parsedConfig,
69
+ });
70
+ const convertedBps = convertToBps(maxFee, halfAmount);
71
+ expect(convertedBps).to.equal(BPS);
72
+ });
73
+ it('should be able to convert bps to maxFee and halfAmount, and back', async () => {
74
+ const bps = BigInt(randomInt(1, 10000));
75
+ const config = {
76
+ type: TokenFeeType.LinearFee,
77
+ owner: signer.address,
78
+ token: token.address,
79
+ bps,
80
+ };
81
+ const reader = new EvmTokenFeeReader(multiProvider, TestChainName.test2);
82
+ const { maxFee: convertedMaxFee, halfAmount: convertedHalfAmount } = await reader.convertFromBps(config.bps, config.token);
83
+ // Get bps using helper function
84
+ const convertedBps = convertToBps(convertedMaxFee, convertedHalfAmount);
85
+ expect(convertedBps).to.equal(bps);
86
+ });
87
+ });
88
+ describe('RoutingFee', () => {
89
+ it('should be able to derive a routing fee config and its sub fees', async () => {
90
+ const routingFeeConfig = {
91
+ type: TokenFeeType.RoutingFee,
92
+ owner: signer.address,
93
+ token: token.address,
94
+ maxFee: constants.MaxUint256.toBigInt(),
95
+ halfAmount: constants.MaxUint256.toBigInt(),
96
+ feeContracts: {
97
+ [TestChainName.test2]: {
98
+ owner: signer.address,
99
+ token: token.address,
100
+ type: TokenFeeType.LinearFee,
101
+ maxFee: MAX_FEE,
102
+ halfAmount: HALF_AMOUNT,
103
+ bps: BPS,
104
+ },
105
+ [TestChainName.test3]: {
106
+ owner: signer.address,
107
+ token: token.address,
108
+ type: TokenFeeType.LinearFee,
109
+ maxFee: MAX_FEE,
110
+ halfAmount: HALF_AMOUNT,
111
+ bps: BPS,
112
+ },
113
+ },
114
+ };
115
+ const deployer = new EvmTokenFeeDeployer(multiProvider, TestChainName.test2);
116
+ const deployedContracts = await deployer.deploy({
117
+ [TestChainName.test2]: routingFeeConfig,
118
+ });
119
+ const reader = new EvmTokenFeeReader(multiProvider, TestChainName.test2);
120
+ const destinations = [
121
+ multiProvider.getDomainId(TestChainName.test2),
122
+ multiProvider.getDomainId(TestChainName.test3),
123
+ ];
124
+ const routingFee = await reader.deriveTokenFeeConfig({
125
+ address: deployedContracts[TestChainName.test2][TokenFeeType.RoutingFee]
126
+ .address,
127
+ routingDestinations: destinations,
128
+ });
129
+ expect(normalizeConfig(routingFee)).to.deep.equal(normalizeConfig(routingFeeConfig));
130
+ });
131
+ });
132
+ });
133
+ //# sourceMappingURL=EvmTokenFeeReader.hardhat-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmTokenFeeReader.hardhat-test.js","sourceRoot":"","sources":["../../src/fee/EvmTokenFeeReader.hardhat-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import { constants } from 'ethers';
2
+ import { BaseFee__factory, ERC20__factory, LinearFee__factory, RoutingFee__factory, } from '@hyperlane-xyz/core';
3
+ import { assert } from '@hyperlane-xyz/utils';
4
+ import { HyperlaneReader } from '../utils/HyperlaneReader.js';
5
+ import { OnchainTokenFeeType, TokenFeeType, onChainTypeToTokenFeeTypeMap, } from './types.js';
6
+ import { MAX_BPS, convertToBps } from './utils.js';
7
+ export class EvmTokenFeeReader extends HyperlaneReader {
8
+ multiProvider;
9
+ chain;
10
+ constructor(multiProvider, chain) {
11
+ super(multiProvider, chain);
12
+ this.multiProvider = multiProvider;
13
+ this.chain = chain;
14
+ }
15
+ async deriveTokenFeeConfig(params) {
16
+ const { address, routingDestinations } = params;
17
+ const tokenFee = BaseFee__factory.connect(address, this.provider);
18
+ let derivedConfig;
19
+ const onchainFeeType = await tokenFee.feeType();
20
+ switch (onchainFeeType) {
21
+ case OnchainTokenFeeType.LinearFee:
22
+ derivedConfig = await this.deriveLinearFeeConfig(address);
23
+ break;
24
+ case OnchainTokenFeeType.ProgressiveFee:
25
+ derivedConfig = await this.deriveProgressiveFeeConfig(address);
26
+ break;
27
+ case OnchainTokenFeeType.RegressiveFee:
28
+ derivedConfig = await this.deriveRegressiveFeeConfig(address);
29
+ break;
30
+ case OnchainTokenFeeType.RoutingFee:
31
+ assert(routingDestinations, `routingDestinations required for ${onChainTypeToTokenFeeTypeMap[onchainFeeType]}`);
32
+ derivedConfig = await this.deriveRoutingFeeConfig({
33
+ address,
34
+ routingDestinations,
35
+ });
36
+ break;
37
+ default:
38
+ throw new Error(`Unsupported token fee type: ${onchainFeeType}`);
39
+ }
40
+ return derivedConfig;
41
+ }
42
+ async deriveLinearFeeConfig(address) {
43
+ const tokenFee = LinearFee__factory.connect(address, this.provider);
44
+ const [token, owner, maxFee, halfAmount] = await Promise.all([
45
+ tokenFee.token(),
46
+ tokenFee.owner(),
47
+ tokenFee.maxFee(),
48
+ tokenFee.halfAmount(),
49
+ ]);
50
+ const maxFeeBn = BigInt(maxFee.toString());
51
+ const halfAmountBn = BigInt(halfAmount.toString());
52
+ const bps = convertToBps(maxFeeBn, halfAmountBn);
53
+ return {
54
+ type: TokenFeeType.LinearFee,
55
+ maxFee: maxFeeBn,
56
+ halfAmount: halfAmountBn,
57
+ address,
58
+ bps,
59
+ token,
60
+ owner,
61
+ };
62
+ }
63
+ async deriveProgressiveFeeConfig(_address) {
64
+ throw new Error('Not implemented');
65
+ }
66
+ async deriveRegressiveFeeConfig(_address) {
67
+ throw new Error('Not implemented');
68
+ }
69
+ async deriveRoutingFeeConfig(params) {
70
+ const { address, routingDestinations } = params;
71
+ const routingFee = RoutingFee__factory.connect(address, this.provider);
72
+ const [token, owner, maxFee, halfAmount] = await Promise.all([
73
+ routingFee.token(),
74
+ routingFee.owner(),
75
+ routingFee.maxFee(),
76
+ routingFee.halfAmount(),
77
+ ]);
78
+ const maxFeeBn = BigInt(maxFee.toString());
79
+ const halfAmountBn = BigInt(halfAmount.toString());
80
+ const feeContracts = {};
81
+ if (routingDestinations)
82
+ await Promise.all(routingDestinations.map(async (destination) => {
83
+ const subFeeAddress = await routingFee.feeContracts(destination);
84
+ if (subFeeAddress === constants.AddressZero)
85
+ return;
86
+ const chainName = this.multiProvider.getChainName(destination);
87
+ feeContracts[chainName] = await this.deriveTokenFeeConfig({
88
+ address: subFeeAddress,
89
+ // Currently, it's not possible to configure nested routing fees domains,
90
+ // but we should not expect that to exist
91
+ routingDestinations,
92
+ });
93
+ }));
94
+ return {
95
+ type: TokenFeeType.RoutingFee,
96
+ maxFee: maxFeeBn,
97
+ halfAmount: halfAmountBn,
98
+ address,
99
+ token,
100
+ owner,
101
+ feeContracts,
102
+ };
103
+ }
104
+ async convertFromBps(bps, tokenAddress) {
105
+ // Assume maxFee is uint256.max / token.totalSupply
106
+ const token = ERC20__factory.connect(tokenAddress, this.provider);
107
+ const totalSupplyBn = await token.totalSupply();
108
+ const maxFee = BigInt(constants.MaxUint256.div(totalSupplyBn).toString());
109
+ const halfAmount = ((maxFee / 2n) * MAX_BPS) / bps;
110
+ return {
111
+ maxFee,
112
+ halfAmount,
113
+ };
114
+ }
115
+ }
116
+ //# sourceMappingURL=EvmTokenFeeReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmTokenFeeReader.js","sourceRoot":"","sources":["../../src/fee/EvmTokenFeeReader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { LinearFee__factory, ProgressiveFee__factory, RegressiveFee__factory, RoutingFee__factory } from '@hyperlane-xyz/core';
2
+ export declare const evmTokenFeeFactories: {
3
+ readonly LinearFee: LinearFee__factory;
4
+ readonly ProgressiveFee: ProgressiveFee__factory;
5
+ readonly RegressiveFee: RegressiveFee__factory;
6
+ readonly RoutingFee: RoutingFee__factory;
7
+ };
8
+ export type EvmTokenFeeFactories = typeof evmTokenFeeFactories;
9
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/fee/contracts.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAI7B,eAAO,MAAM,oBAAoB;;;;;CAKyB,CAAC;AAE3D,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { LinearFee__factory, ProgressiveFee__factory, RegressiveFee__factory, RoutingFee__factory, } from '@hyperlane-xyz/core';
2
+ import { TokenFeeType } from './types.js';
3
+ export const evmTokenFeeFactories = {
4
+ [TokenFeeType.LinearFee]: new LinearFee__factory(),
5
+ [TokenFeeType.ProgressiveFee]: new ProgressiveFee__factory(),
6
+ [TokenFeeType.RegressiveFee]: new RegressiveFee__factory(),
7
+ [TokenFeeType.RoutingFee]: new RoutingFee__factory(),
8
+ };
9
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/fee/contracts.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,IAAI,kBAAkB,EAAE;IAClD,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,IAAI,uBAAuB,EAAE;IAC5D,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,IAAI,sBAAsB,EAAE;IAC1D,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,IAAI,mBAAmB,EAAE;CACI,CAAC"}