@hyperlane-xyz/sdk 19.4.0 → 19.6.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 (171) hide show
  1. package/dist/consts/multisigIsm.d.ts.map +1 -1
  2. package/dist/consts/multisigIsm.js +0 -18
  3. package/dist/consts/multisigIsm.js.map +1 -1
  4. package/dist/consts/numbers.d.ts +2 -0
  5. package/dist/consts/numbers.d.ts.map +1 -0
  6. package/dist/consts/numbers.js +3 -0
  7. package/dist/consts/numbers.js.map +1 -0
  8. package/dist/core/types.d.ts +432 -1
  9. package/dist/core/types.d.ts.map +1 -1
  10. package/dist/core/types.js.map +1 -1
  11. package/dist/deploy/warp.d.ts.map +1 -1
  12. package/dist/deploy/warp.js +3 -1
  13. package/dist/deploy/warp.js.map +1 -1
  14. package/dist/fee/EvmTokenFeeDeployer.d.ts +16 -0
  15. package/dist/fee/EvmTokenFeeDeployer.d.ts.map +1 -0
  16. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.d.ts +2 -0
  17. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.d.ts.map +1 -0
  18. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js +133 -0
  19. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js.map +1 -0
  20. package/dist/fee/EvmTokenFeeDeployer.js +75 -0
  21. package/dist/fee/EvmTokenFeeDeployer.js.map +1 -0
  22. package/dist/fee/EvmTokenFeeModule.d.ts +40 -0
  23. package/dist/fee/EvmTokenFeeModule.d.ts.map +1 -0
  24. package/dist/fee/EvmTokenFeeModule.hardhat-test.d.ts +2 -0
  25. package/dist/fee/EvmTokenFeeModule.hardhat-test.d.ts.map +1 -0
  26. package/dist/fee/EvmTokenFeeModule.hardhat-test.js +215 -0
  27. package/dist/fee/EvmTokenFeeModule.hardhat-test.js.map +1 -0
  28. package/dist/fee/EvmTokenFeeModule.js +182 -0
  29. package/dist/fee/EvmTokenFeeModule.js.map +1 -0
  30. package/dist/fee/EvmTokenFeeReader.d.ts +25 -0
  31. package/dist/fee/EvmTokenFeeReader.d.ts.map +1 -0
  32. package/dist/fee/EvmTokenFeeReader.hardhat-test.d.ts +4 -0
  33. package/dist/fee/EvmTokenFeeReader.hardhat-test.d.ts.map +1 -0
  34. package/dist/fee/EvmTokenFeeReader.hardhat-test.js +133 -0
  35. package/dist/fee/EvmTokenFeeReader.hardhat-test.js.map +1 -0
  36. package/dist/fee/EvmTokenFeeReader.js +116 -0
  37. package/dist/fee/EvmTokenFeeReader.js.map +1 -0
  38. package/dist/fee/contracts.d.ts +9 -0
  39. package/dist/fee/contracts.d.ts.map +1 -0
  40. package/dist/fee/contracts.js +9 -0
  41. package/dist/fee/contracts.js.map +1 -0
  42. package/dist/fee/types.d.ts +386 -0
  43. package/dist/fee/types.d.ts.map +1 -0
  44. package/dist/fee/types.js +107 -0
  45. package/dist/fee/types.js.map +1 -0
  46. package/dist/fee/utils.d.ts +10 -0
  47. package/dist/fee/utils.d.ts.map +1 -0
  48. package/dist/fee/utils.js +16 -0
  49. package/dist/fee/utils.js.map +1 -0
  50. package/dist/fork/types.d.ts +15 -15
  51. package/dist/ica/types.d.ts +322 -0
  52. package/dist/ica/types.d.ts.map +1 -1
  53. package/dist/index.d.ts +9 -4
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +8 -5
  56. package/dist/index.js.map +1 -1
  57. package/dist/ism/AltVMIsmModule.d.ts.map +1 -1
  58. package/dist/ism/AltVMIsmModule.js +7 -1
  59. package/dist/ism/AltVMIsmModule.js.map +1 -1
  60. package/dist/ism/serialization.d.ts +37 -0
  61. package/dist/ism/serialization.d.ts.map +1 -0
  62. package/dist/ism/serialization.js +96 -0
  63. package/dist/ism/serialization.js.map +1 -0
  64. package/dist/mailbox/serialization.d.ts +41 -0
  65. package/dist/mailbox/serialization.d.ts.map +1 -0
  66. package/dist/mailbox/serialization.js +104 -0
  67. package/dist/mailbox/serialization.js.map +1 -0
  68. package/dist/metadata/agentConfig.d.ts +45 -4
  69. package/dist/metadata/agentConfig.d.ts.map +1 -1
  70. package/dist/metadata/chainMetadataTypes.d.ts +18 -0
  71. package/dist/metadata/chainMetadataTypes.d.ts.map +1 -1
  72. package/dist/metadata/chainMetadataTypes.js +4 -0
  73. package/dist/metadata/chainMetadataTypes.js.map +1 -1
  74. package/dist/router/HyperlaneRouterDeployer.d.ts +1 -0
  75. package/dist/router/HyperlaneRouterDeployer.d.ts.map +1 -1
  76. package/dist/router/HyperlaneRouterDeployer.js +12 -0
  77. package/dist/router/HyperlaneRouterDeployer.js.map +1 -1
  78. package/dist/router/types.d.ts +326 -1
  79. package/dist/router/types.d.ts.map +1 -1
  80. package/dist/router/types.js +2 -0
  81. package/dist/router/types.js.map +1 -1
  82. package/dist/token/EvmERC20WarpModule.d.ts +14 -1
  83. package/dist/token/EvmERC20WarpModule.d.ts.map +1 -1
  84. package/dist/token/EvmERC20WarpModule.hardhat-test.js +415 -25
  85. package/dist/token/EvmERC20WarpModule.hardhat-test.js.map +1 -1
  86. package/dist/token/EvmERC20WarpModule.js +172 -5
  87. package/dist/token/EvmERC20WarpModule.js.map +1 -1
  88. package/dist/token/EvmERC20WarpRouteReader.d.ts +8 -0
  89. package/dist/token/EvmERC20WarpRouteReader.d.ts.map +1 -1
  90. package/dist/token/EvmERC20WarpRouteReader.hardhat-test.js +141 -3
  91. package/dist/token/EvmERC20WarpRouteReader.hardhat-test.js.map +1 -1
  92. package/dist/token/EvmERC20WarpRouteReader.js +162 -34
  93. package/dist/token/EvmERC20WarpRouteReader.js.map +1 -1
  94. package/dist/token/Token.js +2 -2
  95. package/dist/token/Token.js.map +1 -1
  96. package/dist/token/Token.test.js +6 -0
  97. package/dist/token/Token.test.js.map +1 -1
  98. package/dist/token/TokenStandard.d.ts +2 -0
  99. package/dist/token/TokenStandard.d.ts.map +1 -1
  100. package/dist/token/TokenStandard.js +6 -0
  101. package/dist/token/TokenStandard.js.map +1 -1
  102. package/dist/token/adapters/CosmWasmTokenAdapter.d.ts +3 -3
  103. package/dist/token/adapters/CosmWasmTokenAdapter.d.ts.map +1 -1
  104. package/dist/token/adapters/CosmWasmTokenAdapter.js +7 -7
  105. package/dist/token/adapters/CosmWasmTokenAdapter.js.map +1 -1
  106. package/dist/token/adapters/CosmosModuleTokenAdapter.d.ts +2 -2
  107. package/dist/token/adapters/CosmosModuleTokenAdapter.d.ts.map +1 -1
  108. package/dist/token/adapters/CosmosModuleTokenAdapter.js +13 -7
  109. package/dist/token/adapters/CosmosModuleTokenAdapter.js.map +1 -1
  110. package/dist/token/adapters/CosmosTokenAdapter.d.ts +3 -3
  111. package/dist/token/adapters/CosmosTokenAdapter.d.ts.map +1 -1
  112. package/dist/token/adapters/CosmosTokenAdapter.js +15 -7
  113. package/dist/token/adapters/CosmosTokenAdapter.js.map +1 -1
  114. package/dist/token/adapters/EvmTokenAdapter.d.ts +13 -8
  115. package/dist/token/adapters/EvmTokenAdapter.d.ts.map +1 -1
  116. package/dist/token/adapters/EvmTokenAdapter.js +108 -43
  117. package/dist/token/adapters/EvmTokenAdapter.js.map +1 -1
  118. package/dist/token/adapters/ITokenAdapter.d.ts +14 -3
  119. package/dist/token/adapters/ITokenAdapter.d.ts.map +1 -1
  120. package/dist/token/adapters/M0PortalLiteTokenAdapter.d.ts +2 -2
  121. package/dist/token/adapters/M0PortalLiteTokenAdapter.d.ts.map +1 -1
  122. package/dist/token/adapters/M0PortalLiteTokenAdapter.js +10 -4
  123. package/dist/token/adapters/M0PortalLiteTokenAdapter.js.map +1 -1
  124. package/dist/token/adapters/RadixTokenAdapter.d.ts +2 -2
  125. package/dist/token/adapters/RadixTokenAdapter.d.ts.map +1 -1
  126. package/dist/token/adapters/RadixTokenAdapter.js +11 -7
  127. package/dist/token/adapters/RadixTokenAdapter.js.map +1 -1
  128. package/dist/token/adapters/SealevelTokenAdapter.d.ts +2 -2
  129. package/dist/token/adapters/SealevelTokenAdapter.d.ts.map +1 -1
  130. package/dist/token/adapters/SealevelTokenAdapter.js +5 -6
  131. package/dist/token/adapters/SealevelTokenAdapter.js.map +1 -1
  132. package/dist/token/adapters/StarknetTokenAdapter.d.ts +2 -2
  133. package/dist/token/adapters/StarknetTokenAdapter.d.ts.map +1 -1
  134. package/dist/token/adapters/StarknetTokenAdapter.js +6 -6
  135. package/dist/token/adapters/StarknetTokenAdapter.js.map +1 -1
  136. package/dist/token/config.d.ts +7 -2
  137. package/dist/token/config.d.ts.map +1 -1
  138. package/dist/token/config.js +6 -2
  139. package/dist/token/config.js.map +1 -1
  140. package/dist/token/contracts.d.ts +7 -2
  141. package/dist/token/contracts.d.ts.map +1 -1
  142. package/dist/token/contracts.js +13 -2
  143. package/dist/token/contracts.js.map +1 -1
  144. package/dist/token/deploy.d.ts +7 -3
  145. package/dist/token/deploy.d.ts.map +1 -1
  146. package/dist/token/deploy.js +141 -16
  147. package/dist/token/deploy.js.map +1 -1
  148. package/dist/token/types.d.ts +19993 -1868
  149. package/dist/token/types.d.ts.map +1 -1
  150. package/dist/token/types.js +98 -3
  151. package/dist/token/types.js.map +1 -1
  152. package/dist/token/types.test.js +47 -1
  153. package/dist/token/types.test.js.map +1 -1
  154. package/dist/utils/contract.d.ts +2 -0
  155. package/dist/utils/contract.d.ts.map +1 -0
  156. package/dist/utils/contract.js +5 -0
  157. package/dist/utils/contract.js.map +1 -0
  158. package/dist/utils/cosmos.d.ts +3 -3
  159. package/dist/utils/gnosisSafe.d.ts +11 -0
  160. package/dist/utils/gnosisSafe.d.ts.map +1 -0
  161. package/dist/utils/gnosisSafe.js +118 -119
  162. package/dist/utils/gnosisSafe.js.map +1 -0
  163. package/dist/warp/WarpCore.d.ts +20 -10
  164. package/dist/warp/WarpCore.d.ts.map +1 -1
  165. package/dist/warp/WarpCore.js +111 -38
  166. package/dist/warp/WarpCore.js.map +1 -1
  167. package/dist/warp/WarpCore.test.js +17 -8
  168. package/dist/warp/WarpCore.test.js.map +1 -1
  169. package/dist/warp/types.d.ts +1 -0
  170. package/dist/warp/types.d.ts.map +1 -1
  171. package/package.json +11 -12
@@ -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"}