@hyperlane-xyz/sdk 30.0.0 → 30.1.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 (186) hide show
  1. package/dist/core/EvmCoreModule.d.ts.map +1 -1
  2. package/dist/core/EvmCoreModule.hardhat-test.js +22 -3
  3. package/dist/core/EvmCoreModule.hardhat-test.js.map +1 -1
  4. package/dist/core/EvmCoreModule.js +11 -0
  5. package/dist/core/EvmCoreModule.js.map +1 -1
  6. package/dist/core/HyperlaneCoreDeployer.d.ts +2 -1
  7. package/dist/core/HyperlaneCoreDeployer.d.ts.map +1 -1
  8. package/dist/core/HyperlaneCoreDeployer.js +13 -4
  9. package/dist/core/HyperlaneCoreDeployer.js.map +1 -1
  10. package/dist/core/MultiProtocolCore.test.js +1 -0
  11. package/dist/core/MultiProtocolCore.test.js.map +1 -1
  12. package/dist/core/TestCoreApp.d.ts +1 -0
  13. package/dist/core/TestCoreApp.d.ts.map +1 -1
  14. package/dist/core/contracts.d.ts +3 -1
  15. package/dist/core/contracts.d.ts.map +1 -1
  16. package/dist/core/contracts.js +4 -1
  17. package/dist/core/contracts.js.map +1 -1
  18. package/dist/core/types.d.ts +344 -16
  19. package/dist/core/types.d.ts.map +1 -1
  20. package/dist/core/types.js +4 -0
  21. package/dist/core/types.js.map +1 -1
  22. package/dist/fee/EvmTokenFeeDeployer.d.ts +2 -0
  23. package/dist/fee/EvmTokenFeeDeployer.d.ts.map +1 -1
  24. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js +80 -9
  25. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js.map +1 -1
  26. package/dist/fee/EvmTokenFeeDeployer.js +68 -25
  27. package/dist/fee/EvmTokenFeeDeployer.js.map +1 -1
  28. package/dist/fee/EvmTokenFeeModule.d.ts +5 -3
  29. package/dist/fee/EvmTokenFeeModule.d.ts.map +1 -1
  30. package/dist/fee/EvmTokenFeeModule.hardhat-test.js +384 -20
  31. package/dist/fee/EvmTokenFeeModule.hardhat-test.js.map +1 -1
  32. package/dist/fee/EvmTokenFeeModule.js +190 -68
  33. package/dist/fee/EvmTokenFeeModule.js.map +1 -1
  34. package/dist/fee/EvmTokenFeeReader.d.ts +15 -2
  35. package/dist/fee/EvmTokenFeeReader.d.ts.map +1 -1
  36. package/dist/fee/EvmTokenFeeReader.hardhat-test.d.ts.map +1 -1
  37. package/dist/fee/EvmTokenFeeReader.hardhat-test.js +191 -4
  38. package/dist/fee/EvmTokenFeeReader.hardhat-test.js.map +1 -1
  39. package/dist/fee/EvmTokenFeeReader.js +104 -13
  40. package/dist/fee/EvmTokenFeeReader.js.map +1 -1
  41. package/dist/fee/contracts.d.ts +3 -1
  42. package/dist/fee/contracts.d.ts.map +1 -1
  43. package/dist/fee/contracts.js +3 -1
  44. package/dist/fee/contracts.js.map +1 -1
  45. package/dist/fee/crossCollateralUtils.d.ts +8 -0
  46. package/dist/fee/crossCollateralUtils.d.ts.map +1 -0
  47. package/dist/fee/crossCollateralUtils.js +49 -0
  48. package/dist/fee/crossCollateralUtils.js.map +1 -0
  49. package/dist/fee/types.d.ts +296 -32
  50. package/dist/fee/types.d.ts.map +1 -1
  51. package/dist/fee/types.js +94 -11
  52. package/dist/fee/types.js.map +1 -1
  53. package/dist/fee/types.test.js +39 -1
  54. package/dist/fee/types.test.js.map +1 -1
  55. package/dist/gas/HyperlaneIgpDeployer.d.ts.map +1 -1
  56. package/dist/gas/HyperlaneIgpDeployer.js +6 -0
  57. package/dist/gas/HyperlaneIgpDeployer.js.map +1 -1
  58. package/dist/hook/EvmHookModule.d.ts +5 -1
  59. package/dist/hook/EvmHookModule.d.ts.map +1 -1
  60. package/dist/hook/EvmHookModule.hardhat-test.js +69 -1
  61. package/dist/hook/EvmHookModule.hardhat-test.js.map +1 -1
  62. package/dist/hook/EvmHookModule.js +65 -2
  63. package/dist/hook/EvmHookModule.js.map +1 -1
  64. package/dist/hook/EvmHookReader.d.ts.map +1 -1
  65. package/dist/hook/EvmHookReader.js +7 -1
  66. package/dist/hook/EvmHookReader.js.map +1 -1
  67. package/dist/hook/HyperlaneHookDeployer.d.ts +5 -0
  68. package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -1
  69. package/dist/hook/types.d.ts +60 -0
  70. package/dist/hook/types.d.ts.map +1 -1
  71. package/dist/hook/types.js +2 -0
  72. package/dist/hook/types.js.map +1 -1
  73. package/dist/ica/types.d.ts +236 -12
  74. package/dist/ica/types.d.ts.map +1 -1
  75. package/dist/index.d.ts +6 -3
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +6 -3
  78. package/dist/index.js.map +1 -1
  79. package/dist/metadata/warpRouteConfig.d.ts +10 -8
  80. package/dist/metadata/warpRouteConfig.d.ts.map +1 -1
  81. package/dist/middleware/account/InterchainAccount.d.ts +8 -8
  82. package/dist/quoted-calls/builder.d.ts +52 -0
  83. package/dist/quoted-calls/builder.d.ts.map +1 -0
  84. package/dist/quoted-calls/builder.js +161 -0
  85. package/dist/quoted-calls/builder.js.map +1 -0
  86. package/dist/quoted-calls/builder.test.d.ts +2 -0
  87. package/dist/quoted-calls/builder.test.d.ts.map +1 -0
  88. package/dist/quoted-calls/builder.test.js +193 -0
  89. package/dist/quoted-calls/builder.test.js.map +1 -0
  90. package/dist/quoted-calls/codec.d.ts +94 -0
  91. package/dist/quoted-calls/codec.d.ts.map +1 -0
  92. package/dist/quoted-calls/codec.js +223 -0
  93. package/dist/quoted-calls/codec.js.map +1 -0
  94. package/dist/quoted-calls/codec.test.d.ts +2 -0
  95. package/dist/quoted-calls/codec.test.d.ts.map +1 -0
  96. package/dist/quoted-calls/codec.test.js +307 -0
  97. package/dist/quoted-calls/codec.test.js.map +1 -0
  98. package/dist/quoted-calls/types.d.ts +68 -0
  99. package/dist/quoted-calls/types.d.ts.map +1 -0
  100. package/dist/quoted-calls/types.js +22 -0
  101. package/dist/quoted-calls/types.js.map +1 -0
  102. package/dist/router/types.d.ts +246 -12
  103. package/dist/router/types.d.ts.map +1 -1
  104. package/dist/token/EvmWarpModule.d.ts +1 -0
  105. package/dist/token/EvmWarpModule.d.ts.map +1 -1
  106. package/dist/token/EvmWarpModule.hardhat-test.js +146 -2
  107. package/dist/token/EvmWarpModule.hardhat-test.js.map +1 -1
  108. package/dist/token/EvmWarpModule.js +36 -5
  109. package/dist/token/EvmWarpModule.js.map +1 -1
  110. package/dist/token/EvmWarpRouteReader.d.ts +3 -1
  111. package/dist/token/EvmWarpRouteReader.d.ts.map +1 -1
  112. package/dist/token/EvmWarpRouteReader.hardhat-test.js +129 -5
  113. package/dist/token/EvmWarpRouteReader.hardhat-test.js.map +1 -1
  114. package/dist/token/EvmWarpRouteReader.js +86 -24
  115. package/dist/token/EvmWarpRouteReader.js.map +1 -1
  116. package/dist/token/IToken.d.ts +2 -2
  117. package/dist/token/Token.d.ts.map +1 -1
  118. package/dist/token/Token.js +12 -1
  119. package/dist/token/Token.js.map +1 -1
  120. package/dist/token/Token.test.js +1 -0
  121. package/dist/token/Token.test.js.map +1 -1
  122. package/dist/token/TokenStandard.d.ts +2 -1
  123. package/dist/token/TokenStandard.d.ts.map +1 -1
  124. package/dist/token/TokenStandard.js +8 -0
  125. package/dist/token/TokenStandard.js.map +1 -1
  126. package/dist/token/adapters/EvmCrossCollateralAdapter.d.ts +1 -1
  127. package/dist/token/adapters/EvmCrossCollateralAdapter.d.ts.map +1 -1
  128. package/dist/token/adapters/EvmCrossCollateralAdapter.js +1 -1
  129. package/dist/token/adapters/EvmCrossCollateralAdapter.js.map +1 -1
  130. package/dist/token/adapters/EvmTokenAdapter.d.ts +2 -2
  131. package/dist/token/adapters/EvmTokenAdapter.d.ts.map +1 -1
  132. package/dist/token/adapters/EvmTokenAdapter.js +11 -5
  133. package/dist/token/adapters/EvmTokenAdapter.js.map +1 -1
  134. package/dist/token/adapters/ITokenAdapter.d.ts +20 -0
  135. package/dist/token/adapters/ITokenAdapter.d.ts.map +1 -1
  136. package/dist/token/adapters/ITokenAdapter.js +6 -1
  137. package/dist/token/adapters/ITokenAdapter.js.map +1 -1
  138. package/dist/token/adapters/SealevelCrossCollateralAdapter.d.ts +36 -0
  139. package/dist/token/adapters/SealevelCrossCollateralAdapter.d.ts.map +1 -0
  140. package/dist/token/adapters/SealevelCrossCollateralAdapter.js +364 -0
  141. package/dist/token/adapters/SealevelCrossCollateralAdapter.js.map +1 -0
  142. package/dist/token/adapters/SealevelTokenAdapter.d.ts +9 -0
  143. package/dist/token/adapters/SealevelTokenAdapter.d.ts.map +1 -1
  144. package/dist/token/adapters/SealevelTokenAdapter.js +1 -1
  145. package/dist/token/adapters/SealevelTokenAdapter.js.map +1 -1
  146. package/dist/token/adapters/serialization.d.ts +27 -0
  147. package/dist/token/adapters/serialization.d.ts.map +1 -1
  148. package/dist/token/adapters/serialization.js +93 -0
  149. package/dist/token/adapters/serialization.js.map +1 -1
  150. package/dist/token/config.d.ts +2 -0
  151. package/dist/token/config.d.ts.map +1 -1
  152. package/dist/token/config.js +2 -0
  153. package/dist/token/config.js.map +1 -1
  154. package/dist/token/configUtils.d.ts +0 -6
  155. package/dist/token/configUtils.d.ts.map +1 -1
  156. package/dist/token/configUtils.js +108 -15
  157. package/dist/token/configUtils.js.map +1 -1
  158. package/dist/token/configUtils.test.js +248 -4
  159. package/dist/token/configUtils.test.js.map +1 -1
  160. package/dist/token/contracts.d.ts +3 -2
  161. package/dist/token/contracts.d.ts.map +1 -1
  162. package/dist/token/contracts.js +3 -2
  163. package/dist/token/contracts.js.map +1 -1
  164. package/dist/token/deploy.d.ts +4 -5
  165. package/dist/token/deploy.d.ts.map +1 -1
  166. package/dist/token/deploy.hardhat-test.js +82 -0
  167. package/dist/token/deploy.hardhat-test.js.map +1 -1
  168. package/dist/token/deploy.js +60 -17
  169. package/dist/token/deploy.js.map +1 -1
  170. package/dist/token/tokenMetadataUtils.d.ts.map +1 -1
  171. package/dist/token/tokenMetadataUtils.js +17 -2
  172. package/dist/token/tokenMetadataUtils.js.map +1 -1
  173. package/dist/token/types.d.ts +2277 -567
  174. package/dist/token/types.d.ts.map +1 -1
  175. package/dist/token/types.js +55 -5
  176. package/dist/token/types.js.map +1 -1
  177. package/dist/token/types.test.js +132 -0
  178. package/dist/token/types.test.js.map +1 -1
  179. package/dist/warp/WarpCore.d.ts +59 -1
  180. package/dist/warp/WarpCore.d.ts.map +1 -1
  181. package/dist/warp/WarpCore.js +206 -6
  182. package/dist/warp/WarpCore.js.map +1 -1
  183. package/dist/warp/WarpCore.test.js +161 -9
  184. package/dist/warp/WarpCore.test.js.map +1 -1
  185. package/dist/warp/types.d.ts +24 -24
  186. package/package.json +11 -12
@@ -2,13 +2,14 @@ import { expect } from 'chai';
2
2
  import { constants } from 'ethers';
3
3
  import hre from 'hardhat';
4
4
  import { ERC20Test__factory } from '@hyperlane-xyz/core';
5
+ import { assert } from '@hyperlane-xyz/utils';
5
6
  import { TestChainName } from '../consts/testChains.js';
6
7
  import { MultiProvider } from '../providers/MultiProvider.js';
7
8
  import { randomInt } from '../test/testUtils.js';
8
9
  import { normalizeConfig } from '../utils/ism.js';
9
10
  import { EvmTokenFeeDeployer } from './EvmTokenFeeDeployer.js';
10
11
  import { EvmTokenFeeReader } from './EvmTokenFeeReader.js';
11
- import { TokenFeeConfigSchema, TokenFeeType } from './types.js';
12
+ import { DEFAULT_ROUTER_KEY, TokenFeeConfigSchema, TokenFeeType, } from './types.js';
12
13
  import { ASSUMED_MAX_AMOUNT_FOR_ZERO_SUPPLY, convertToBps } from './utils.js';
13
14
  // eslint-disable-next-line jest/no-export -- test fixtures shared across test files
14
15
  export const MAX_FEE = 115792089237316195423570985008687907853269n;
@@ -106,14 +107,62 @@ describe('EvmTokenFeeReader', () => {
106
107
  expect(() => reader.convertFromBps(0)).to.throw('bps must be > 0 to prevent division by zero');
107
108
  });
108
109
  });
110
+ describe('OffchainQuotedLinearFee', () => {
111
+ it('should read the offchain quoted linear fee config', async () => {
112
+ const config = TokenFeeConfigSchema.parse({
113
+ type: TokenFeeType.OffchainQuotedLinearFee,
114
+ maxFee: MAX_FEE,
115
+ halfAmount: HALF_AMOUNT,
116
+ bps: BPS,
117
+ token: token.address,
118
+ owner: signer.address,
119
+ quoteSigners: [signer.address],
120
+ });
121
+ const deployer = new EvmTokenFeeDeployer(multiProvider, TestChainName.test2);
122
+ const deployedContracts = await deployer.deploy({
123
+ [TestChainName.test2]: config,
124
+ });
125
+ const reader = new EvmTokenFeeReader(multiProvider, TestChainName.test2);
126
+ const contract = deployedContracts[TestChainName.test2][TokenFeeType.OffchainQuotedLinearFee];
127
+ const onchainConfig = await reader.deriveTokenFeeConfig({
128
+ address: contract.address,
129
+ });
130
+ expect(normalizeConfig(onchainConfig)).to.deep.equal(normalizeConfig(config));
131
+ });
132
+ it('should read multiple quote signers', async () => {
133
+ const [, otherSigner] = await hre.ethers.getSigners();
134
+ const config = TokenFeeConfigSchema.parse({
135
+ type: TokenFeeType.OffchainQuotedLinearFee,
136
+ maxFee: MAX_FEE,
137
+ halfAmount: HALF_AMOUNT,
138
+ bps: BPS,
139
+ token: token.address,
140
+ owner: signer.address,
141
+ quoteSigners: [signer.address, otherSigner.address],
142
+ });
143
+ const deployer = new EvmTokenFeeDeployer(multiProvider, TestChainName.test2);
144
+ const deployedContracts = await deployer.deploy({
145
+ [TestChainName.test2]: config,
146
+ });
147
+ const reader = new EvmTokenFeeReader(multiProvider, TestChainName.test2);
148
+ const contract = deployedContracts[TestChainName.test2][TokenFeeType.OffchainQuotedLinearFee];
149
+ const onchainConfig = await reader.deriveTokenFeeConfig({
150
+ address: contract.address,
151
+ });
152
+ expect(onchainConfig.type).to.equal(TokenFeeType.OffchainQuotedLinearFee);
153
+ if (onchainConfig.type === TokenFeeType.OffchainQuotedLinearFee) {
154
+ expect(onchainConfig.quoteSigners).to.have.lengthOf(2);
155
+ expect(onchainConfig.quoteSigners).to.include(signer.address);
156
+ expect(onchainConfig.quoteSigners).to.include(otherSigner.address);
157
+ }
158
+ });
159
+ });
109
160
  describe('RoutingFee', () => {
110
161
  it('should be able to derive a routing fee config and its sub fees', async () => {
111
162
  const routingFeeConfig = {
112
163
  type: TokenFeeType.RoutingFee,
113
164
  owner: signer.address,
114
165
  token: token.address,
115
- maxFee: constants.MaxUint256.toBigInt(),
116
- halfAmount: constants.MaxUint256.toBigInt(),
117
166
  feeContracts: {
118
167
  [TestChainName.test2]: {
119
168
  owner: signer.address,
@@ -174,10 +223,148 @@ describe('EvmTokenFeeReader', () => {
174
223
  address: deployedContracts[TestChainName.test2][TokenFeeType.RoutingFee]
175
224
  .address,
176
225
  });
226
+ assert(routingFee.type === TokenFeeType.RoutingFee, `Must be ${TokenFeeType.RoutingFee}`);
177
227
  expect(routingFee.type).to.equal(TokenFeeType.RoutingFee);
178
228
  expect(routingFee.owner).to.equal(signer.address);
179
229
  expect(routingFee.token).to.equal(token.address);
180
- expect(Object.keys(routingFee.feeContracts ?? {})).to.have.length(0);
230
+ expect(Object.keys(routingFee.feeContracts)).to.have.length(0);
231
+ });
232
+ it('should derive cross collateral routing fee config from DEFAULT_ROUTER entries', async () => {
233
+ const linearFeeConfig = TokenFeeConfigSchema.parse({
234
+ type: TokenFeeType.LinearFee,
235
+ owner: signer.address,
236
+ token: token.address,
237
+ maxFee: MAX_FEE,
238
+ halfAmount: HALF_AMOUNT,
239
+ bps: BPS,
240
+ });
241
+ const deployer = new EvmTokenFeeDeployer(multiProvider, TestChainName.test2);
242
+ const deployedContracts = await deployer.deploy({
243
+ [TestChainName.test2]: linearFeeConfig,
244
+ });
245
+ const crossCollateralRoutingFeeFactory = await hre.ethers.getContractFactory('MockCrossCollateralRoutingFee', signer);
246
+ const crossCollateralRoutingFee = await crossCollateralRoutingFeeFactory.deploy(signer.address);
247
+ await crossCollateralRoutingFee.deployed();
248
+ const destination = multiProvider.getDomainId(TestChainName.test3);
249
+ const destination2 = multiProvider.getDomainId(TestChainName.test4);
250
+ const defaultRouter = await crossCollateralRoutingFee.DEFAULT_ROUTER();
251
+ await crossCollateralRoutingFee.setCrossCollateralRouterFeeContracts([destination, destination2], [defaultRouter, defaultRouter], [
252
+ deployedContracts[TestChainName.test2][TokenFeeType.LinearFee]
253
+ .address,
254
+ deployedContracts[TestChainName.test2][TokenFeeType.LinearFee]
255
+ .address,
256
+ ]);
257
+ const reader = new EvmTokenFeeReader(multiProvider, TestChainName.test2);
258
+ const routingFee = await reader.deriveTokenFeeConfig({
259
+ address: crossCollateralRoutingFee.address,
260
+ crossCollateralRouters: {
261
+ [destination]: [],
262
+ [destination2]: [],
263
+ },
264
+ });
265
+ expect(routingFee.type).to.equal(TokenFeeType.CrossCollateralRoutingFee);
266
+ expect(routingFee.owner).to.equal(signer.address);
267
+ expect(Object.keys(routingFee.feeContracts)).to.have.length(2);
268
+ expect(normalizeConfig(routingFee)).to.deep.equal(normalizeConfig({
269
+ type: TokenFeeType.CrossCollateralRoutingFee,
270
+ owner: signer.address,
271
+ feeContracts: {
272
+ [TestChainName.test3]: {
273
+ [DEFAULT_ROUTER_KEY]: linearFeeConfig,
274
+ },
275
+ [TestChainName.test4]: {
276
+ [DEFAULT_ROUTER_KEY]: linearFeeConfig,
277
+ },
278
+ },
279
+ }));
280
+ });
281
+ it('should derive cross collateral routing fee config using enrolled router mapping', async () => {
282
+ const linearFeeConfig = TokenFeeConfigSchema.parse({
283
+ type: TokenFeeType.LinearFee,
284
+ owner: signer.address,
285
+ token: token.address,
286
+ maxFee: MAX_FEE,
287
+ halfAmount: HALF_AMOUNT,
288
+ bps: BPS,
289
+ });
290
+ const deployer = new EvmTokenFeeDeployer(multiProvider, TestChainName.test2);
291
+ const deployedContracts = await deployer.deploy({
292
+ [TestChainName.test2]: linearFeeConfig,
293
+ });
294
+ const crossCollateralRoutingFeeFactory = await hre.ethers.getContractFactory('MockCrossCollateralRoutingFee', signer);
295
+ const crossCollateralRoutingFee = await crossCollateralRoutingFeeFactory.deploy(signer.address);
296
+ await crossCollateralRoutingFee.deployed();
297
+ const destination = multiProvider.getDomainId(TestChainName.test3);
298
+ const routerBytes32 = hre.ethers.utils.hexZeroPad(signer.address, 32);
299
+ await crossCollateralRoutingFee.setCrossCollateralRouterFeeContracts([destination], [routerBytes32], [
300
+ deployedContracts[TestChainName.test2][TokenFeeType.LinearFee]
301
+ .address,
302
+ ]);
303
+ expect(await crossCollateralRoutingFee.feeContracts(destination, routerBytes32)).to.equal(deployedContracts[TestChainName.test2][TokenFeeType.LinearFee].address);
304
+ const reader = new EvmTokenFeeReader(multiProvider, TestChainName.test2);
305
+ const routingFee = await reader.deriveTokenFeeConfig({
306
+ address: crossCollateralRoutingFee.address,
307
+ routingDestinations: [destination],
308
+ crossCollateralRouters: {
309
+ [destination]: [routerBytes32],
310
+ },
311
+ });
312
+ expect(Object.keys(routingFee.feeContracts)).to.have.length(1);
313
+ expect(normalizeConfig(routingFee)).to.deep.equal(normalizeConfig({
314
+ type: TokenFeeType.CrossCollateralRoutingFee,
315
+ owner: signer.address,
316
+ feeContracts: {
317
+ [TestChainName.test3]: {
318
+ [routerBytes32]: linearFeeConfig,
319
+ },
320
+ },
321
+ }));
322
+ });
323
+ it('should derive CCRF DEFAULT_ROUTER entries for routing destinations outside cross collateral routers', async () => {
324
+ const linearFeeConfig = TokenFeeConfigSchema.parse({
325
+ type: TokenFeeType.LinearFee,
326
+ owner: signer.address,
327
+ token: token.address,
328
+ maxFee: MAX_FEE,
329
+ halfAmount: HALF_AMOUNT,
330
+ bps: BPS,
331
+ });
332
+ const deployer = new EvmTokenFeeDeployer(multiProvider, TestChainName.test2);
333
+ const deployedContracts = await deployer.deploy({
334
+ [TestChainName.test2]: linearFeeConfig,
335
+ });
336
+ const crossCollateralRoutingFeeFactory = await hre.ethers.getContractFactory('MockCrossCollateralRoutingFee', signer);
337
+ const crossCollateralRoutingFee = await crossCollateralRoutingFeeFactory.deploy(signer.address);
338
+ await crossCollateralRoutingFee.deployed();
339
+ const destination = multiProvider.getDomainId(TestChainName.test3);
340
+ const destination2 = multiProvider.getDomainId(TestChainName.test4);
341
+ const defaultRouter = await crossCollateralRoutingFee.DEFAULT_ROUTER();
342
+ await crossCollateralRoutingFee.setCrossCollateralRouterFeeContracts([destination, destination2], [defaultRouter, defaultRouter], [
343
+ deployedContracts[TestChainName.test2][TokenFeeType.LinearFee]
344
+ .address,
345
+ deployedContracts[TestChainName.test2][TokenFeeType.LinearFee]
346
+ .address,
347
+ ]);
348
+ const reader = new EvmTokenFeeReader(multiProvider, TestChainName.test2);
349
+ const routingFee = await reader.deriveTokenFeeConfig({
350
+ address: crossCollateralRoutingFee.address,
351
+ routingDestinations: [destination, destination2],
352
+ crossCollateralRouters: {
353
+ [destination]: [],
354
+ },
355
+ });
356
+ expect(normalizeConfig(routingFee)).to.deep.equal(normalizeConfig({
357
+ type: TokenFeeType.CrossCollateralRoutingFee,
358
+ owner: signer.address,
359
+ feeContracts: {
360
+ [TestChainName.test3]: {
361
+ [DEFAULT_ROUTER_KEY]: linearFeeConfig,
362
+ },
363
+ [TestChainName.test4]: {
364
+ [DEFAULT_ROUTER_KEY]: linearFeeConfig,
365
+ },
366
+ },
367
+ }));
181
368
  });
182
369
  });
183
370
  });
@@ -1 +1 @@
1
- {"version":3,"file":"EvmTokenFeeReader.hardhat-test.js","sourceRoot":"","sources":["../../src/fee/EvmTokenFeeReader.hardhat-test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,GAAG,MAAM,SAAS,CAAC;AAE1B,OAAO,EAAa,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAkB,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,kCAAkC,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9E,oFAAoF;AACpF,MAAM,CAAC,MAAM,OAAO,GAAG,2CAA2C,CAAC;AACnE,oFAAoF;AACpF,MAAM,CAAC,MAAM,WAAW,GAAG,2CAA2C,CAAC;AACvE,oFAAoF;AACpF,MAAM,CAAC,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAEtD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,aAA4B,CAAC;IACjC,IAAI,MAAyB,CAAC;IAC9B,IAAI,KAAgB,CAAC;IAErB,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;IAEnD,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACzC,aAAa,GAAG,aAAa,CAAC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAElE,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC;gBACxC,IAAI,EAAE,YAAY,CAAC,SAAS;gBAC5B,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,WAAW;gBACvB,GAAG,EAAE,GAAG;gBACR,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,KAAK,EAAE,MAAM,CAAC,OAAO;aACtB,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM;aAC9B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,QAAQ,GACZ,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBACtD,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAC;YACH,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAClD,eAAe,CAAC;gBACd,GAAG,MAAM;gBACT,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,WAAW;gBACvB,GAAG,EAAE,GAAG;aACT,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;YAE/B,MAAM,MAAM,GAAG;gBACb,IAAI,EAAE,YAAY,CAAC,SAAS;gBAC5B,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,MAAM;gBACN,UAAU;gBACV,GAAG,EAAE,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC;aACtC,CAAC;YACF,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACpB,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,YAAY;aACpC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAEjC,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAChE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAE7B,MAAM,YAAY,GAAG,YAAY,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;YACxE,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;gBACnC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC1D,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBACtD,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,GAAG,GAAG,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC/B,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAEnC,MAAM,cAAc,GAClB,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACvC,kCAAkC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAExC,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC7C,6CAA6C,CAC9C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,gBAAgB,GAAmB;gBACvC,IAAI,EAAE,YAAY,CAAC,UAAU;gBAC7B,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE;gBACvC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE;gBAC3C,YAAY,EAAE;oBACZ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACrB,KAAK,EAAE,MAAM,CAAC,OAAO;wBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;wBACpB,IAAI,EAAE,YAAY,CAAC,SAAS;wBAC5B,MAAM,EAAE,OAAO;wBACf,UAAU,EAAE,WAAW;wBACvB,GAAG,EAAE,GAAG;qBACT;oBACD,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACrB,KAAK,EAAE,MAAM,CAAC,OAAO;wBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;wBACpB,IAAI,EAAE,YAAY,CAAC,SAAS;wBAC5B,MAAM,EAAE,OAAO;wBACf,UAAU,EAAE,WAAW;wBACvB,GAAG,EAAE,GAAG;qBACT;iBACF;aACF,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,gBAAgB;aACxC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YAEzE,MAAM,YAAY,GAAG;gBACnB,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC9C,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;aAC/C,CAAC;YACF,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBACnD,OAAO,EACL,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC;qBAC5D,OAAO;gBACZ,mBAAmB,EAAE,YAAY;aAClC,CAAC,CAAC;YACH,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAC/C,eAAe,CAAC,gBAAgB,CAAC,CAClC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CAAC;gBAClD,IAAI,EAAE,YAAY,CAAC,UAAU;gBAC7B,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,YAAY,EAAE;oBACZ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACrB,KAAK,EAAE,MAAM,CAAC,OAAO;wBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;wBACpB,IAAI,EAAE,YAAY,CAAC,SAAS;wBAC5B,MAAM,EAAE,OAAO;wBACf,UAAU,EAAE,WAAW;wBACvB,GAAG,EAAE,GAAG;qBACT;iBACF;aACF,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,gBAAgB;aACxC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBACnD,OAAO,EACL,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC;qBAC5D,OAAO;aACb,CAAC,CAAC;YAEH,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAC1D,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,CACJ,MAAM,CAAC,IAAI,CAAE,UAAkB,CAAC,YAAY,IAAI,EAAE,CAAC,CACpD,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"EvmTokenFeeReader.hardhat-test.js","sourceRoot":"","sources":["../../src/fee/EvmTokenFeeReader.hardhat-test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,GAAG,MAAM,SAAS,CAAC;AAE1B,OAAO,EAAa,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAElB,oBAAoB,EACpB,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kCAAkC,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9E,oFAAoF;AACpF,MAAM,CAAC,MAAM,OAAO,GAAG,2CAA2C,CAAC;AACnE,oFAAoF;AACpF,MAAM,CAAC,MAAM,WAAW,GAAG,2CAA2C,CAAC;AACvE,oFAAoF;AACpF,MAAM,CAAC,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAEtD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,aAA4B,CAAC;IACjC,IAAI,MAAyB,CAAC;IAC9B,IAAI,KAAgB,CAAC;IAErB,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;IAEnD,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACzC,aAAa,GAAG,aAAa,CAAC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAElE,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC;gBACxC,IAAI,EAAE,YAAY,CAAC,SAAS;gBAC5B,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,WAAW;gBACvB,GAAG,EAAE,GAAG;gBACR,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,KAAK,EAAE,MAAM,CAAC,OAAO;aACtB,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM;aAC9B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,QAAQ,GACZ,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBACtD,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAC;YACH,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAClD,eAAe,CAAC;gBACd,GAAG,MAAM;gBACT,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,WAAW;gBACvB,GAAG,EAAE,GAAG;aACT,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;YAE/B,MAAM,MAAM,GAAG;gBACb,IAAI,EAAE,YAAY,CAAC,SAAS;gBAC5B,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,MAAM;gBACN,UAAU;gBACV,GAAG,EAAE,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC;aACtC,CAAC;YACF,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACpB,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,YAAY;aACpC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAEjC,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAChE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAE7B,MAAM,YAAY,GAAG,YAAY,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;YACxE,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;gBACnC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC1D,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBACtD,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,GAAG,GAAG,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC/B,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAEnC,MAAM,cAAc,GAClB,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACvC,kCAAkC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAExC,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC7C,6CAA6C,CAC9C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC;gBACxC,IAAI,EAAE,YAAY,CAAC,uBAAuB;gBAC1C,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,WAAW;gBACvB,GAAG,EAAE,GAAG;gBACR,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,YAAY,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;aAC/B,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM;aAC9B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,QAAQ,GACZ,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CACpC,YAAY,CAAC,uBAAuB,CACrC,CAAC;YACJ,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBACtD,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAC;YACH,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAClD,eAAe,CAAC,MAAM,CAAC,CACxB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC;gBACxC,IAAI,EAAE,YAAY,CAAC,uBAAuB;gBAC1C,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,WAAW;gBACvB,GAAG,EAAE,GAAG;gBACR,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,YAAY,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;aACpD,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM;aAC9B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,QAAQ,GACZ,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CACpC,YAAY,CAAC,uBAAuB,CACrC,CAAC;YACJ,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBACtD,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;YAC1E,IAAI,aAAa,CAAC,IAAI,KAAK,YAAY,CAAC,uBAAuB,EAAE,CAAC;gBAChE,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACvD,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9D,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,gBAAgB,GAAmB;gBACvC,IAAI,EAAE,YAAY,CAAC,UAAU;gBAC7B,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,YAAY,EAAE;oBACZ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACrB,KAAK,EAAE,MAAM,CAAC,OAAO;wBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;wBACpB,IAAI,EAAE,YAAY,CAAC,SAAS;wBAC5B,MAAM,EAAE,OAAO;wBACf,UAAU,EAAE,WAAW;wBACvB,GAAG,EAAE,GAAG;qBACT;oBACD,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACrB,KAAK,EAAE,MAAM,CAAC,OAAO;wBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;wBACpB,IAAI,EAAE,YAAY,CAAC,SAAS;wBAC5B,MAAM,EAAE,OAAO;wBACf,UAAU,EAAE,WAAW;wBACvB,GAAG,EAAE,GAAG;qBACT;iBACF;aACF,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,gBAAgB;aACxC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YAEzE,MAAM,YAAY,GAAG;gBACnB,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC9C,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;aAC/C,CAAC;YACF,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBACnD,OAAO,EACL,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC;qBAC5D,OAAO;gBACZ,mBAAmB,EAAE,YAAY;aAClC,CAAC,CAAC;YACH,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAC/C,eAAe,CAAC,gBAAgB,CAAC,CAClC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CAAC;gBAClD,IAAI,EAAE,YAAY,CAAC,UAAU;gBAC7B,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,YAAY,EAAE;oBACZ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACrB,KAAK,EAAE,MAAM,CAAC,OAAO;wBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;wBACpB,IAAI,EAAE,YAAY,CAAC,SAAS;wBAC5B,MAAM,EAAE,OAAO;wBACf,UAAU,EAAE,WAAW;wBACvB,GAAG,EAAE,GAAG;qBACT;iBACF;aACF,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,gBAAgB;aACxC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBACnD,OAAO,EACL,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC;qBAC5D,OAAO;aACb,CAAC,CAAC;YAEH,MAAM,CACJ,UAAU,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,EAC3C,WAAW,YAAY,CAAC,UAAU,EAAE,CACrC,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAC1D,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAE,UAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;YAC7F,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC;gBACjD,IAAI,EAAE,YAAY,CAAC,SAAS;gBAC5B,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,WAAW;gBACvB,GAAG,EAAE,GAAG;aACT,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,eAAe;aACvC,CAAC,CAAC;YAEH,MAAM,gCAAgC,GACpC,MAAM,GAAG,CAAC,MAAM,CAAC,kBAAkB,CACjC,+BAA+B,EAC/B,MAAM,CACP,CAAC;YACJ,MAAM,yBAAyB,GAC7B,MAAM,gCAAgC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAChE,MAAM,yBAAyB,CAAC,QAAQ,EAAE,CAAC;YAE3C,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACnE,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACpE,MAAM,aAAa,GAAG,MAAM,yBAAyB,CAAC,cAAc,EAAE,CAAC;YACvE,MAAM,yBAAyB,CAAC,oCAAoC,CAClE,CAAC,WAAW,EAAE,YAAY,CAAC,EAC3B,CAAC,aAAa,EAAE,aAAa,CAAC,EAC9B;gBACE,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC;qBAC3D,OAAO;gBACV,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC;qBAC3D,OAAO;aACX,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBACnD,OAAO,EAAE,yBAAyB,CAAC,OAAO;gBAC1C,sBAAsB,EAAE;oBACtB,CAAC,WAAW,CAAC,EAAE,EAAE;oBACjB,CAAC,YAAY,CAAC,EAAE,EAAE;iBACnB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;YACzE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAE,UAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAC/C,eAAe,CAAC;gBACd,IAAI,EAAE,YAAY,CAAC,yBAAyB;gBAC5C,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,YAAY,EAAE;oBACZ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACrB,CAAC,kBAAkB,CAAC,EAAE,eAAe;qBACtC;oBACD,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACrB,CAAC,kBAAkB,CAAC,EAAE,eAAe;qBACtC;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;YAC/F,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC;gBACjD,IAAI,EAAE,YAAY,CAAC,SAAS;gBAC5B,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,WAAW;gBACvB,GAAG,EAAE,GAAG;aACT,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,eAAe;aACvC,CAAC,CAAC;YAEH,MAAM,gCAAgC,GACpC,MAAM,GAAG,CAAC,MAAM,CAAC,kBAAkB,CACjC,+BAA+B,EAC/B,MAAM,CACP,CAAC;YACJ,MAAM,yBAAyB,GAC7B,MAAM,gCAAgC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAChE,MAAM,yBAAyB,CAAC,QAAQ,EAAE,CAAC;YAE3C,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACnE,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACtE,MAAM,yBAAyB,CAAC,oCAAoC,CAClE,CAAC,WAAW,CAAC,EACb,CAAC,aAAa,CAAC,EACf;gBACE,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC;qBAC3D,OAAO;aACX,CACF,CAAC;YACF,MAAM,CACJ,MAAM,yBAAyB,CAAC,YAAY,CAC1C,WAAW,EACX,aAAa,CACd,CACF,CAAC,EAAE,CAAC,KAAK,CACR,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,CACvE,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBACnD,OAAO,EAAE,yBAAyB,CAAC,OAAO;gBAC1C,mBAAmB,EAAE,CAAC,WAAW,CAAC;gBAClC,sBAAsB,EAAE;oBACtB,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,CAAC;iBAC/B;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAE,UAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAC/C,eAAe,CAAC;gBACd,IAAI,EAAE,YAAY,CAAC,yBAAyB;gBAC5C,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,YAAY,EAAE;oBACZ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACrB,CAAC,aAAa,CAAC,EAAE,eAAe;qBACjC;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qGAAqG,EAAE,KAAK,IAAI,EAAE;YACnH,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC;gBACjD,IAAI,EAAE,YAAY,CAAC,SAAS;gBAC5B,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,WAAW;gBACvB,GAAG,EAAE,GAAG;aACT,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,aAAa,EACb,aAAa,CAAC,KAAK,CACpB,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,eAAe;aACvC,CAAC,CAAC;YAEH,MAAM,gCAAgC,GACpC,MAAM,GAAG,CAAC,MAAM,CAAC,kBAAkB,CACjC,+BAA+B,EAC/B,MAAM,CACP,CAAC;YACJ,MAAM,yBAAyB,GAC7B,MAAM,gCAAgC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAChE,MAAM,yBAAyB,CAAC,QAAQ,EAAE,CAAC;YAE3C,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACnE,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACpE,MAAM,aAAa,GAAG,MAAM,yBAAyB,CAAC,cAAc,EAAE,CAAC;YACvE,MAAM,yBAAyB,CAAC,oCAAoC,CAClE,CAAC,WAAW,EAAE,YAAY,CAAC,EAC3B,CAAC,aAAa,EAAE,aAAa,CAAC,EAC9B;gBACE,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC;qBAC3D,OAAO;gBACV,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC;qBAC3D,OAAO;aACX,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC;gBACnD,OAAO,EAAE,yBAAyB,CAAC,OAAO;gBAC1C,mBAAmB,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;gBAChD,sBAAsB,EAAE;oBACtB,CAAC,WAAW,CAAC,EAAE,EAAE;iBAClB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAC/C,eAAe,CAAC;gBACd,IAAI,EAAE,YAAY,CAAC,yBAAyB;gBAC5C,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,YAAY,EAAE;oBACZ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACrB,CAAC,kBAAkB,CAAC,EAAE,eAAe;qBACtC;oBACD,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACrB,CAAC,kBAAkB,CAAC,EAAE,eAAe;qBACtC;iBACF;aACF,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,18 +1,24 @@
1
1
  import { constants } from 'ethers';
2
- import { BaseFee__factory, LinearFee__factory, RoutingFee__factory, } from '@hyperlane-xyz/core';
2
+ import { BaseFee__factory, CrossCollateralRoutingFee__factory, LinearFee__factory, OffchainQuotedLinearFee__factory, RoutingFee__factory, } from '@hyperlane-xyz/core';
3
+ import { assert, concurrentMap, rootLogger, } from '@hyperlane-xyz/utils';
4
+ import { DEFAULT_CONTRACT_READ_CONCURRENCY } from '../consts/concurrency.js';
3
5
  import { HyperlaneReader } from '../utils/HyperlaneReader.js';
4
6
  import { OnchainTokenFeeType, TokenFeeType, } from './types.js';
7
+ import { getCrossCollateralRouterKeys, getEffectiveCrossCollateralDestinations, } from './crossCollateralUtils.js';
5
8
  import { ASSUMED_MAX_AMOUNT_FOR_ZERO_SUPPLY, BPS_PRECISION, MAX_BPS, assertBpsPrecision, convertToBps, } from './utils.js';
6
9
  export class EvmTokenFeeReader extends HyperlaneReader {
7
10
  multiProvider;
8
11
  chain;
9
- constructor(multiProvider, chain) {
12
+ concurrency;
13
+ logger = rootLogger.child({ module: 'EvmTokenFeeReader' });
14
+ constructor(multiProvider, chain, concurrency = multiProvider.tryGetRpcConcurrency(chain) ?? DEFAULT_CONTRACT_READ_CONCURRENCY) {
10
15
  super(multiProvider, chain);
11
16
  this.multiProvider = multiProvider;
12
17
  this.chain = chain;
18
+ this.concurrency = concurrency;
13
19
  }
14
20
  async deriveTokenFeeConfig(params) {
15
- const { address, routingDestinations } = params;
21
+ const { address, routingDestinations, crossCollateralRouters } = params;
16
22
  const tokenFee = BaseFee__factory.connect(address, this.provider);
17
23
  let derivedConfig;
18
24
  const onchainFeeType = await tokenFee.feeType();
@@ -32,6 +38,16 @@ export class EvmTokenFeeReader extends HyperlaneReader {
32
38
  routingDestinations,
33
39
  });
34
40
  break;
41
+ case OnchainTokenFeeType.OffchainQuotedLinearFee:
42
+ derivedConfig = await this.deriveOffchainQuotedLinearFeeConfig(address);
43
+ break;
44
+ case OnchainTokenFeeType.CrossCollateralRoutingFee:
45
+ derivedConfig = await this.deriveCrossCollateralRoutingFeeConfig({
46
+ address,
47
+ routingDestinations,
48
+ crossCollateralRouters,
49
+ });
50
+ break;
35
51
  default:
36
52
  throw new Error(`Unsupported token fee type: ${onchainFeeType}`);
37
53
  }
@@ -58,6 +74,29 @@ export class EvmTokenFeeReader extends HyperlaneReader {
58
74
  owner,
59
75
  };
60
76
  }
77
+ async deriveOffchainQuotedLinearFeeConfig(address) {
78
+ const tokenFee = OffchainQuotedLinearFee__factory.connect(address, this.provider);
79
+ const [token, owner, maxFee, halfAmount, quoteSigners] = await Promise.all([
80
+ tokenFee.token(),
81
+ tokenFee.owner(),
82
+ tokenFee.maxFee(),
83
+ tokenFee.halfAmount(),
84
+ tokenFee.quoteSigners(),
85
+ ]);
86
+ const maxFeeBn = BigInt(maxFee.toString());
87
+ const halfAmountBn = BigInt(halfAmount.toString());
88
+ const bps = convertToBps(maxFeeBn, halfAmountBn);
89
+ return {
90
+ type: TokenFeeType.OffchainQuotedLinearFee,
91
+ maxFee: maxFeeBn,
92
+ halfAmount: halfAmountBn,
93
+ address,
94
+ bps,
95
+ token,
96
+ owner,
97
+ quoteSigners: [...quoteSigners],
98
+ };
99
+ }
61
100
  async deriveProgressiveFeeConfig(_address) {
62
101
  throw new Error('Not implemented');
63
102
  }
@@ -67,14 +106,10 @@ export class EvmTokenFeeReader extends HyperlaneReader {
67
106
  async deriveRoutingFeeConfig(params) {
68
107
  const { address, routingDestinations } = params;
69
108
  const routingFee = RoutingFee__factory.connect(address, this.provider);
70
- const [token, owner, maxFee, halfAmount] = await Promise.all([
109
+ const [token, owner] = await Promise.all([
71
110
  routingFee.token(),
72
111
  routingFee.owner(),
73
- routingFee.maxFee(),
74
- routingFee.halfAmount(),
75
112
  ]);
76
- const maxFeeBn = BigInt(maxFee.toString());
77
- const halfAmountBn = BigInt(halfAmount.toString());
78
113
  const feeContracts = {};
79
114
  if (routingDestinations)
80
115
  await Promise.all(routingDestinations.map(async (destination) => {
@@ -86,21 +121,77 @@ export class EvmTokenFeeReader extends HyperlaneReader {
86
121
  return;
87
122
  feeContracts[chainName] = await this.deriveTokenFeeConfig({
88
123
  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
124
  });
93
125
  }));
94
126
  return {
95
127
  type: TokenFeeType.RoutingFee,
96
- maxFee: maxFeeBn,
97
- halfAmount: halfAmountBn,
98
128
  address,
99
129
  token,
100
130
  owner,
101
131
  feeContracts,
102
132
  };
103
133
  }
134
+ async deriveCrossCollateralRoutingFeeConfig(params) {
135
+ const { address, routingDestinations, crossCollateralRouters } = params;
136
+ const effectiveRoutingDestinations = getEffectiveCrossCollateralDestinations(routingDestinations, crossCollateralRouters);
137
+ assert(effectiveRoutingDestinations.length > 0, 'CrossCollateralRoutingFee requires routingDestinations or crossCollateralRouters to derive fee config');
138
+ const routingFee = CrossCollateralRoutingFee__factory.connect(address, this.provider);
139
+ const owner = await routingFee.owner();
140
+ const feeConfigCache = new Map();
141
+ const parseFeeConfig = this.createCachedFeeConfigReader(feeConfigCache);
142
+ const destinationEntries = await concurrentMap(this.concurrency, effectiveRoutingDestinations, async (destination) => this.deriveCrossCollateralDestinationFees({
143
+ routingFee,
144
+ destination,
145
+ crossCollateralRouters,
146
+ parseFeeConfig,
147
+ }));
148
+ const feeContracts = {};
149
+ for (const entry of destinationEntries) {
150
+ if (!entry)
151
+ continue;
152
+ feeContracts[entry.chainName] = entry.routerFeeConfigs;
153
+ }
154
+ return {
155
+ type: TokenFeeType.CrossCollateralRoutingFee,
156
+ address,
157
+ owner,
158
+ feeContracts,
159
+ };
160
+ }
161
+ createCachedFeeConfigReader(feeConfigCache) {
162
+ // Multiple router keys can point at the same child fee address.
163
+ return async (subFeeAddress) => {
164
+ const cacheKey = subFeeAddress.toLowerCase();
165
+ if (!feeConfigCache.has(cacheKey)) {
166
+ feeConfigCache.set(cacheKey, this.deriveTokenFeeConfig({
167
+ address: subFeeAddress,
168
+ }));
169
+ }
170
+ const cachedFeeConfig = feeConfigCache.get(cacheKey);
171
+ assert(cachedFeeConfig, `Missing cached fee config promise for ${subFeeAddress}`);
172
+ return cachedFeeConfig;
173
+ };
174
+ }
175
+ async deriveCrossCollateralDestinationFees({ routingFee, destination, crossCollateralRouters, parseFeeConfig, }) {
176
+ const chainName = this.multiProvider.tryGetChainName(destination);
177
+ if (!chainName)
178
+ return undefined;
179
+ const routerKeys = getCrossCollateralRouterKeys(destination, crossCollateralRouters);
180
+ const routerSubFees = await concurrentMap(this.concurrency, routerKeys, async (router) => ({
181
+ router,
182
+ subFeeAddress: await routingFee.feeContracts(destination, router),
183
+ }));
184
+ const routerFeeConfigs = {};
185
+ await concurrentMap(this.concurrency, routerSubFees, async ({ router, subFeeAddress }) => {
186
+ if (subFeeAddress === constants.AddressZero)
187
+ return;
188
+ routerFeeConfigs[router] = await parseFeeConfig(subFeeAddress);
189
+ });
190
+ if (Object.keys(routerFeeConfigs).length === 0) {
191
+ return undefined;
192
+ }
193
+ return { chainName, routerFeeConfigs };
194
+ }
104
195
  convertFromBps(bps) {
105
196
  if (!Number.isFinite(bps) || bps <= 0) {
106
197
  throw new Error('bps must be > 0 to prevent division by zero');
@@ -1 +1 @@
1
- {"version":3,"file":"EvmTokenFeeReader.js","sourceRoot":"","sources":["../../src/fee/EvmTokenFeeReader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EvmTokenFeeReader.js","sourceRoot":"","sources":["../../src/fee/EvmTokenFeeReader.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
- import { LinearFee__factory, ProgressiveFee__factory, RegressiveFee__factory, RoutingFee__factory } from '@hyperlane-xyz/core';
1
+ import { CrossCollateralRoutingFee__factory, LinearFee__factory, OffchainQuotedLinearFee__factory, ProgressiveFee__factory, RegressiveFee__factory, RoutingFee__factory } from '@hyperlane-xyz/core';
2
2
  export declare const evmTokenFeeFactories: {
3
3
  readonly LinearFee: LinearFee__factory;
4
+ readonly OffchainQuotedLinearFee: OffchainQuotedLinearFee__factory;
4
5
  readonly ProgressiveFee: ProgressiveFee__factory;
5
6
  readonly RegressiveFee: RegressiveFee__factory;
6
7
  readonly RoutingFee: RoutingFee__factory;
8
+ readonly CrossCollateralRoutingFee: CrossCollateralRoutingFee__factory;
7
9
  };
8
10
  export type EvmTokenFeeFactories = typeof evmTokenFeeFactories;
9
11
  //# sourceMappingURL=contracts.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/fee/contracts.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kCAAkC,EAClC,kBAAkB,EAClB,gCAAgC,EAChC,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAI7B,eAAO,MAAM,oBAAoB;;;;;;;CASyB,CAAC;AAE3D,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC"}
@@ -1,9 +1,11 @@
1
- import { LinearFee__factory, ProgressiveFee__factory, RegressiveFee__factory, RoutingFee__factory, } from '@hyperlane-xyz/core';
1
+ import { CrossCollateralRoutingFee__factory, LinearFee__factory, OffchainQuotedLinearFee__factory, ProgressiveFee__factory, RegressiveFee__factory, RoutingFee__factory, } from '@hyperlane-xyz/core';
2
2
  import { TokenFeeType } from './types.js';
3
3
  export const evmTokenFeeFactories = {
4
4
  [TokenFeeType.LinearFee]: new LinearFee__factory(),
5
+ [TokenFeeType.OffchainQuotedLinearFee]: new OffchainQuotedLinearFee__factory(),
5
6
  [TokenFeeType.ProgressiveFee]: new ProgressiveFee__factory(),
6
7
  [TokenFeeType.RegressiveFee]: new RegressiveFee__factory(),
7
8
  [TokenFeeType.RoutingFee]: new RoutingFee__factory(),
9
+ [TokenFeeType.CrossCollateralRoutingFee]: new CrossCollateralRoutingFee__factory(),
8
10
  };
9
11
  //# sourceMappingURL=contracts.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/fee/contracts.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kCAAkC,EAClC,kBAAkB,EAClB,gCAAgC,EAChC,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,uBAAuB,CAAC,EACpC,IAAI,gCAAgC,EAAE;IACxC,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;IACpD,CAAC,YAAY,CAAC,yBAAyB,CAAC,EACtC,IAAI,kCAAkC,EAAE;CACc,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { ChainName } from '../types.js';
2
+ export type CrossCollateralRoutersByDomain = Record<number, string[]>;
3
+ export declare function getConfiguredRoutingDestinations(feeContracts: Record<ChainName, unknown>, getDestinationDomain: (chainName: ChainName) => number): number[];
4
+ export declare function getConfiguredCrossCollateralRouters(feeContracts: Record<ChainName, Record<string, unknown>>, getDestinationDomain: (chainName: ChainName) => number): CrossCollateralRoutersByDomain;
5
+ export declare function mergeCrossCollateralRouters(...routerMaps: Array<CrossCollateralRoutersByDomain | undefined>): CrossCollateralRoutersByDomain | undefined;
6
+ export declare function getEffectiveCrossCollateralDestinations(routingDestinations?: number[], crossCollateralRouters?: CrossCollateralRoutersByDomain): number[];
7
+ export declare function getCrossCollateralRouterKeys(destination: number, crossCollateralRouters?: CrossCollateralRoutersByDomain): string[];
8
+ //# sourceMappingURL=crossCollateralUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crossCollateralUtils.d.ts","sourceRoot":"","sources":["../../src/fee/crossCollateralUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC,MAAM,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAEtE,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACxC,oBAAoB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,MAAM,GACrD,MAAM,EAAE,CAIV;AAED,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxD,oBAAoB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,MAAM,GACrD,8BAA8B,CAOhC;AAED,wBAAgB,2BAA2B,CACzC,GAAG,UAAU,EAAE,KAAK,CAAC,8BAA8B,GAAG,SAAS,CAAC,GAC/D,8BAA8B,GAAG,SAAS,CA2B5C;AAED,wBAAgB,uCAAuC,CACrD,mBAAmB,CAAC,EAAE,MAAM,EAAE,EAC9B,sBAAsB,CAAC,EAAE,8BAA8B,GACtD,MAAM,EAAE,CAWV;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,sBAAsB,CAAC,EAAE,8BAA8B,GACtD,MAAM,EAAE,CAOV"}
@@ -0,0 +1,49 @@
1
+ import { DEFAULT_ROUTER_KEY } from './types.js';
2
+ export function getConfiguredRoutingDestinations(feeContracts, getDestinationDomain) {
3
+ return Object.keys(feeContracts).map((chainName) => getDestinationDomain(chainName));
4
+ }
5
+ export function getConfiguredCrossCollateralRouters(feeContracts, getDestinationDomain) {
6
+ return Object.fromEntries(Object.entries(feeContracts).map(([chainName, routerFeeContracts]) => [
7
+ getDestinationDomain(chainName),
8
+ Object.keys(routerFeeContracts),
9
+ ]));
10
+ }
11
+ export function mergeCrossCollateralRouters(...routerMaps) {
12
+ const mergedRouters = new Map();
13
+ for (const routerMap of routerMaps) {
14
+ if (!routerMap)
15
+ continue;
16
+ for (const [destination, routers] of Object.entries(routerMap)) {
17
+ const destinationDomain = Number(destination);
18
+ const mergedDestinationRouters = mergedRouters.get(destinationDomain) ?? new Set();
19
+ for (const router of routers) {
20
+ mergedDestinationRouters.add(router);
21
+ }
22
+ mergedRouters.set(destinationDomain, mergedDestinationRouters);
23
+ }
24
+ }
25
+ if (mergedRouters.size === 0)
26
+ return undefined;
27
+ return Object.fromEntries([...mergedRouters.entries()].map(([destination, routers]) => [
28
+ destination,
29
+ [...routers],
30
+ ]));
31
+ }
32
+ export function getEffectiveCrossCollateralDestinations(routingDestinations, crossCollateralRouters) {
33
+ const crossCollateralDestinations = Object.keys(crossCollateralRouters ?? {}).map((domain) => Number(domain));
34
+ return [
35
+ ...new Set([
36
+ ...(routingDestinations ?? []),
37
+ ...crossCollateralDestinations,
38
+ ]),
39
+ ];
40
+ }
41
+ export function getCrossCollateralRouterKeys(destination, crossCollateralRouters) {
42
+ return [
43
+ ...new Set([
44
+ DEFAULT_ROUTER_KEY,
45
+ ...(crossCollateralRouters?.[destination] ?? []),
46
+ ]),
47
+ ];
48
+ }
49
+ //# sourceMappingURL=crossCollateralUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crossCollateralUtils.js","sourceRoot":"","sources":["../../src/fee/crossCollateralUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIhD,MAAM,UAAU,gCAAgC,CAC9C,YAAwC,EACxC,oBAAsD;IAEtD,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACjD,oBAAoB,CAAC,SAAS,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,YAAwD,EACxD,oBAAsD;IAEtD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,EAAE,CAAC;QACpE,oBAAoB,CAAC,SAAS,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;KAChC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,GAAG,UAA6D;IAEhE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAC;IAErD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;YAC9C,MAAM,wBAAwB,GAC5B,aAAa,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;YAE5D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC;YAED,aAAa,CAAC,GAAG,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE/C,OAAO,MAAM,CAAC,WAAW,CACvB,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QAC3D,WAAW;QACX,CAAC,GAAG,OAAO,CAAC;KACb,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,mBAA8B,EAC9B,sBAAuD;IAEvD,MAAM,2BAA2B,GAAG,MAAM,CAAC,IAAI,CAC7C,sBAAsB,IAAI,EAAE,CAC7B,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAElC,OAAO;QACL,GAAG,IAAI,GAAG,CAAC;YACT,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;YAC9B,GAAG,2BAA2B;SAC/B,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,WAAmB,EACnB,sBAAuD;IAEvD,OAAO;QACL,GAAG,IAAI,GAAG,CAAC;YACT,kBAAkB;YAClB,GAAG,CAAC,sBAAsB,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SACjD,CAAC;KACH,CAAC;AACJ,CAAC"}