@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.
- package/dist/core/EvmCoreModule.d.ts.map +1 -1
- package/dist/core/EvmCoreModule.hardhat-test.js +22 -3
- package/dist/core/EvmCoreModule.hardhat-test.js.map +1 -1
- package/dist/core/EvmCoreModule.js +11 -0
- package/dist/core/EvmCoreModule.js.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.d.ts +2 -1
- package/dist/core/HyperlaneCoreDeployer.d.ts.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.js +13 -4
- package/dist/core/HyperlaneCoreDeployer.js.map +1 -1
- package/dist/core/MultiProtocolCore.test.js +1 -0
- package/dist/core/MultiProtocolCore.test.js.map +1 -1
- package/dist/core/TestCoreApp.d.ts +1 -0
- package/dist/core/TestCoreApp.d.ts.map +1 -1
- package/dist/core/contracts.d.ts +3 -1
- package/dist/core/contracts.d.ts.map +1 -1
- package/dist/core/contracts.js +4 -1
- package/dist/core/contracts.js.map +1 -1
- package/dist/core/types.d.ts +344 -16
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +4 -0
- package/dist/core/types.js.map +1 -1
- package/dist/fee/EvmTokenFeeDeployer.d.ts +2 -0
- package/dist/fee/EvmTokenFeeDeployer.d.ts.map +1 -1
- package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js +80 -9
- package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js.map +1 -1
- package/dist/fee/EvmTokenFeeDeployer.js +68 -25
- package/dist/fee/EvmTokenFeeDeployer.js.map +1 -1
- package/dist/fee/EvmTokenFeeModule.d.ts +5 -3
- package/dist/fee/EvmTokenFeeModule.d.ts.map +1 -1
- package/dist/fee/EvmTokenFeeModule.hardhat-test.js +384 -20
- package/dist/fee/EvmTokenFeeModule.hardhat-test.js.map +1 -1
- package/dist/fee/EvmTokenFeeModule.js +190 -68
- package/dist/fee/EvmTokenFeeModule.js.map +1 -1
- package/dist/fee/EvmTokenFeeReader.d.ts +15 -2
- package/dist/fee/EvmTokenFeeReader.d.ts.map +1 -1
- package/dist/fee/EvmTokenFeeReader.hardhat-test.d.ts.map +1 -1
- package/dist/fee/EvmTokenFeeReader.hardhat-test.js +191 -4
- package/dist/fee/EvmTokenFeeReader.hardhat-test.js.map +1 -1
- package/dist/fee/EvmTokenFeeReader.js +104 -13
- package/dist/fee/EvmTokenFeeReader.js.map +1 -1
- package/dist/fee/contracts.d.ts +3 -1
- package/dist/fee/contracts.d.ts.map +1 -1
- package/dist/fee/contracts.js +3 -1
- package/dist/fee/contracts.js.map +1 -1
- package/dist/fee/crossCollateralUtils.d.ts +8 -0
- package/dist/fee/crossCollateralUtils.d.ts.map +1 -0
- package/dist/fee/crossCollateralUtils.js +49 -0
- package/dist/fee/crossCollateralUtils.js.map +1 -0
- package/dist/fee/types.d.ts +296 -32
- package/dist/fee/types.d.ts.map +1 -1
- package/dist/fee/types.js +94 -11
- package/dist/fee/types.js.map +1 -1
- package/dist/fee/types.test.js +39 -1
- package/dist/fee/types.test.js.map +1 -1
- package/dist/gas/HyperlaneIgpDeployer.d.ts.map +1 -1
- package/dist/gas/HyperlaneIgpDeployer.js +6 -0
- package/dist/gas/HyperlaneIgpDeployer.js.map +1 -1
- package/dist/hook/EvmHookModule.d.ts +5 -1
- package/dist/hook/EvmHookModule.d.ts.map +1 -1
- package/dist/hook/EvmHookModule.hardhat-test.js +69 -1
- package/dist/hook/EvmHookModule.hardhat-test.js.map +1 -1
- package/dist/hook/EvmHookModule.js +65 -2
- package/dist/hook/EvmHookModule.js.map +1 -1
- package/dist/hook/EvmHookReader.d.ts.map +1 -1
- package/dist/hook/EvmHookReader.js +7 -1
- package/dist/hook/EvmHookReader.js.map +1 -1
- package/dist/hook/HyperlaneHookDeployer.d.ts +5 -0
- package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -1
- package/dist/hook/types.d.ts +60 -0
- package/dist/hook/types.d.ts.map +1 -1
- package/dist/hook/types.js +2 -0
- package/dist/hook/types.js.map +1 -1
- package/dist/ica/types.d.ts +236 -12
- package/dist/ica/types.d.ts.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/metadata/warpRouteConfig.d.ts +10 -8
- package/dist/metadata/warpRouteConfig.d.ts.map +1 -1
- package/dist/middleware/account/InterchainAccount.d.ts +8 -8
- package/dist/quoted-calls/builder.d.ts +52 -0
- package/dist/quoted-calls/builder.d.ts.map +1 -0
- package/dist/quoted-calls/builder.js +161 -0
- package/dist/quoted-calls/builder.js.map +1 -0
- package/dist/quoted-calls/builder.test.d.ts +2 -0
- package/dist/quoted-calls/builder.test.d.ts.map +1 -0
- package/dist/quoted-calls/builder.test.js +193 -0
- package/dist/quoted-calls/builder.test.js.map +1 -0
- package/dist/quoted-calls/codec.d.ts +94 -0
- package/dist/quoted-calls/codec.d.ts.map +1 -0
- package/dist/quoted-calls/codec.js +223 -0
- package/dist/quoted-calls/codec.js.map +1 -0
- package/dist/quoted-calls/codec.test.d.ts +2 -0
- package/dist/quoted-calls/codec.test.d.ts.map +1 -0
- package/dist/quoted-calls/codec.test.js +307 -0
- package/dist/quoted-calls/codec.test.js.map +1 -0
- package/dist/quoted-calls/types.d.ts +68 -0
- package/dist/quoted-calls/types.d.ts.map +1 -0
- package/dist/quoted-calls/types.js +22 -0
- package/dist/quoted-calls/types.js.map +1 -0
- package/dist/router/types.d.ts +246 -12
- package/dist/router/types.d.ts.map +1 -1
- package/dist/token/EvmWarpModule.d.ts +1 -0
- package/dist/token/EvmWarpModule.d.ts.map +1 -1
- package/dist/token/EvmWarpModule.hardhat-test.js +146 -2
- package/dist/token/EvmWarpModule.hardhat-test.js.map +1 -1
- package/dist/token/EvmWarpModule.js +36 -5
- package/dist/token/EvmWarpModule.js.map +1 -1
- package/dist/token/EvmWarpRouteReader.d.ts +3 -1
- package/dist/token/EvmWarpRouteReader.d.ts.map +1 -1
- package/dist/token/EvmWarpRouteReader.hardhat-test.js +129 -5
- package/dist/token/EvmWarpRouteReader.hardhat-test.js.map +1 -1
- package/dist/token/EvmWarpRouteReader.js +86 -24
- package/dist/token/EvmWarpRouteReader.js.map +1 -1
- package/dist/token/IToken.d.ts +2 -2
- package/dist/token/Token.d.ts.map +1 -1
- package/dist/token/Token.js +12 -1
- package/dist/token/Token.js.map +1 -1
- package/dist/token/Token.test.js +1 -0
- package/dist/token/Token.test.js.map +1 -1
- package/dist/token/TokenStandard.d.ts +2 -1
- package/dist/token/TokenStandard.d.ts.map +1 -1
- package/dist/token/TokenStandard.js +8 -0
- package/dist/token/TokenStandard.js.map +1 -1
- package/dist/token/adapters/EvmCrossCollateralAdapter.d.ts +1 -1
- package/dist/token/adapters/EvmCrossCollateralAdapter.d.ts.map +1 -1
- package/dist/token/adapters/EvmCrossCollateralAdapter.js +1 -1
- package/dist/token/adapters/EvmCrossCollateralAdapter.js.map +1 -1
- package/dist/token/adapters/EvmTokenAdapter.d.ts +2 -2
- package/dist/token/adapters/EvmTokenAdapter.d.ts.map +1 -1
- package/dist/token/adapters/EvmTokenAdapter.js +11 -5
- package/dist/token/adapters/EvmTokenAdapter.js.map +1 -1
- package/dist/token/adapters/ITokenAdapter.d.ts +20 -0
- package/dist/token/adapters/ITokenAdapter.d.ts.map +1 -1
- package/dist/token/adapters/ITokenAdapter.js +6 -1
- package/dist/token/adapters/ITokenAdapter.js.map +1 -1
- package/dist/token/adapters/SealevelCrossCollateralAdapter.d.ts +36 -0
- package/dist/token/adapters/SealevelCrossCollateralAdapter.d.ts.map +1 -0
- package/dist/token/adapters/SealevelCrossCollateralAdapter.js +364 -0
- package/dist/token/adapters/SealevelCrossCollateralAdapter.js.map +1 -0
- package/dist/token/adapters/SealevelTokenAdapter.d.ts +9 -0
- package/dist/token/adapters/SealevelTokenAdapter.d.ts.map +1 -1
- package/dist/token/adapters/SealevelTokenAdapter.js +1 -1
- package/dist/token/adapters/SealevelTokenAdapter.js.map +1 -1
- package/dist/token/adapters/serialization.d.ts +27 -0
- package/dist/token/adapters/serialization.d.ts.map +1 -1
- package/dist/token/adapters/serialization.js +93 -0
- package/dist/token/adapters/serialization.js.map +1 -1
- package/dist/token/config.d.ts +2 -0
- package/dist/token/config.d.ts.map +1 -1
- package/dist/token/config.js +2 -0
- package/dist/token/config.js.map +1 -1
- package/dist/token/configUtils.d.ts +0 -6
- package/dist/token/configUtils.d.ts.map +1 -1
- package/dist/token/configUtils.js +108 -15
- package/dist/token/configUtils.js.map +1 -1
- package/dist/token/configUtils.test.js +248 -4
- package/dist/token/configUtils.test.js.map +1 -1
- package/dist/token/contracts.d.ts +3 -2
- package/dist/token/contracts.d.ts.map +1 -1
- package/dist/token/contracts.js +3 -2
- package/dist/token/contracts.js.map +1 -1
- package/dist/token/deploy.d.ts +4 -5
- package/dist/token/deploy.d.ts.map +1 -1
- package/dist/token/deploy.hardhat-test.js +82 -0
- package/dist/token/deploy.hardhat-test.js.map +1 -1
- package/dist/token/deploy.js +60 -17
- package/dist/token/deploy.js.map +1 -1
- package/dist/token/tokenMetadataUtils.d.ts.map +1 -1
- package/dist/token/tokenMetadataUtils.js +17 -2
- package/dist/token/tokenMetadataUtils.js.map +1 -1
- package/dist/token/types.d.ts +2277 -567
- package/dist/token/types.d.ts.map +1 -1
- package/dist/token/types.js +55 -5
- package/dist/token/types.js.map +1 -1
- package/dist/token/types.test.js +132 -0
- package/dist/token/types.test.js.map +1 -1
- package/dist/warp/WarpCore.d.ts +59 -1
- package/dist/warp/WarpCore.d.ts.map +1 -1
- package/dist/warp/WarpCore.js +206 -6
- package/dist/warp/WarpCore.js.map +1 -1
- package/dist/warp/WarpCore.test.js +161 -9
- package/dist/warp/WarpCore.test.js.map +1 -1
- package/dist/warp/types.d.ts +24 -24
- 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
|
|
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":"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"}
|
|
1
|
+
{"version":3,"file":"EvmTokenFeeReader.hardhat-test.js","sourceRoot":"","sources":["../../src/fee/EvmTokenFeeReader.hardhat-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
-
|
|
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
|
|
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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"EvmTokenFeeReader.js","sourceRoot":"","sources":["../../src/fee/EvmTokenFeeReader.ts"],"names":[],"mappings":"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"}
|
package/dist/fee/contracts.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/fee/contracts.js
CHANGED
|
@@ -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;
|
|
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"}
|