@hyperlane-xyz/cli 3.1.9 → 3.2.0-alpha
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/README.md +6 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +27 -3
- package/dist/cli.js.map +1 -1
- package/dist/env.d.ts +2 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +14 -0
- package/dist/env.js.map +1 -0
- package/dist/src/avs/config.d.ts +11 -0
- package/dist/src/avs/config.d.ts.map +1 -0
- package/dist/src/avs/config.js +10 -0
- package/dist/src/avs/config.js.map +1 -0
- package/dist/src/avs/stakeRegistry.d.ts +19 -0
- package/dist/src/avs/stakeRegistry.d.ts.map +1 -0
- package/dist/src/avs/stakeRegistry.js +94 -0
- package/dist/src/avs/stakeRegistry.js.map +1 -0
- package/dist/src/commands/avs.d.ts +12 -0
- package/dist/src/commands/avs.d.ts.map +1 -0
- package/dist/src/commands/avs.js +58 -0
- package/dist/src/commands/avs.js.map +1 -0
- package/dist/src/commands/chains.d.ts.map +1 -1
- package/dist/src/commands/chains.js +46 -27
- package/dist/src/commands/chains.js.map +1 -1
- package/dist/src/commands/config.js +74 -85
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/deploy.d.ts.map +1 -1
- package/dist/src/commands/deploy.js +58 -91
- package/dist/src/commands/deploy.js.map +1 -1
- package/dist/src/commands/hook.d.ts +12 -0
- package/dist/src/commands/hook.d.ts.map +1 -0
- package/dist/src/commands/hook.js +34 -0
- package/dist/src/commands/hook.js.map +1 -0
- package/dist/src/commands/ism.d.ts +12 -0
- package/dist/src/commands/ism.d.ts.map +1 -0
- package/dist/src/commands/ism.js +36 -0
- package/dist/src/commands/ism.js.map +1 -0
- package/dist/src/commands/options.d.ts +19 -7
- package/dist/src/commands/options.d.ts.map +1 -1
- package/dist/src/commands/options.js +90 -27
- package/dist/src/commands/options.js.map +1 -1
- package/dist/src/commands/send.d.ts +14 -1
- package/dist/src/commands/send.d.ts.map +1 -1
- package/dist/src/commands/send.js +32 -55
- package/dist/src/commands/send.js.map +1 -1
- package/dist/src/commands/signCommands.d.ts +3 -0
- package/dist/src/commands/signCommands.d.ts.map +1 -0
- package/dist/src/commands/signCommands.js +11 -0
- package/dist/src/commands/signCommands.js.map +1 -0
- package/dist/src/commands/status.d.ts +5 -2
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +9 -19
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/config/chain.d.ts +5 -7
- package/dist/src/config/chain.d.ts.map +1 -1
- package/dist/src/config/chain.js +94 -64
- package/dist/src/config/chain.js.map +1 -1
- package/dist/src/config/chain.test.d.ts +2 -0
- package/dist/src/config/chain.test.d.ts.map +1 -0
- package/dist/src/config/chain.test.js +9 -0
- package/dist/src/config/chain.test.js.map +1 -0
- package/dist/src/config/hooks.d.ts +91 -214
- package/dist/src/config/hooks.d.ts.map +1 -1
- package/dist/src/config/hooks.js +218 -122
- package/dist/src/config/hooks.js.map +1 -1
- package/dist/src/config/ism.d.ts +74 -0
- package/dist/src/config/ism.d.ts.map +1 -0
- package/dist/src/config/ism.js +223 -0
- package/dist/src/config/ism.js.map +1 -0
- package/dist/src/config/multisig.d.ts +4 -14
- package/dist/src/config/multisig.d.ts.map +1 -1
- package/dist/src/config/multisig.js +35 -29
- package/dist/src/config/multisig.js.map +1 -1
- package/dist/src/config/warp.d.ts +7 -180
- package/dist/src/config/warp.d.ts.map +1 -1
- package/dist/src/config/warp.js +55 -62
- package/dist/src/config/warp.js.map +1 -1
- package/dist/src/consts.d.ts +1 -0
- package/dist/src/consts.d.ts.map +1 -1
- package/dist/src/consts.js +1 -0
- package/dist/src/consts.js.map +1 -1
- package/dist/src/context/context.d.ts +14 -0
- package/dist/src/context/context.d.ts.map +1 -0
- package/dist/src/context/context.js +108 -0
- package/dist/src/context/context.js.map +1 -0
- package/dist/src/context/types.d.ts +33 -0
- package/dist/src/context/types.d.ts.map +1 -0
- package/dist/src/context/types.js.map +1 -0
- package/dist/src/deploy/agent.d.ts +6 -4
- package/dist/src/deploy/agent.d.ts.map +1 -1
- package/dist/src/deploy/agent.js +10 -24
- package/dist/src/deploy/agent.js.map +1 -1
- package/dist/src/deploy/core.d.ts +10 -7
- package/dist/src/deploy/core.d.ts.map +1 -1
- package/dist/src/deploy/core.js +156 -160
- package/dist/src/deploy/core.js.map +1 -1
- package/dist/src/deploy/dry-run.d.ts +19 -0
- package/dist/src/deploy/dry-run.d.ts.map +1 -0
- package/dist/src/deploy/dry-run.js +45 -0
- package/dist/src/deploy/dry-run.js.map +1 -0
- package/dist/src/deploy/utils.d.ts +15 -8
- package/dist/src/deploy/utils.d.ts.map +1 -1
- package/dist/src/deploy/utils.js +60 -11
- package/dist/src/deploy/utils.js.map +1 -1
- package/dist/src/deploy/warp.d.ts +4 -7
- package/dist/src/deploy/warp.d.ts.map +1 -1
- package/dist/src/deploy/warp.js +131 -169
- package/dist/src/deploy/warp.js.map +1 -1
- package/dist/src/hook/read.d.ts +13 -0
- package/dist/src/hook/read.d.ts.map +1 -0
- package/dist/src/hook/read.js +25 -0
- package/dist/src/hook/read.js.map +1 -0
- package/dist/src/ism/read.d.ts +13 -0
- package/dist/src/ism/read.d.ts.map +1 -0
- package/dist/src/ism/read.js +25 -0
- package/dist/src/ism/read.js.map +1 -0
- package/dist/src/logger.d.ts +17 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +32 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/registry/MergedRegistry.d.ts +35 -0
- package/dist/src/registry/MergedRegistry.d.ts.map +1 -0
- package/dist/src/registry/MergedRegistry.js +83 -0
- package/dist/src/registry/MergedRegistry.js.map +1 -0
- package/dist/src/send/message.d.ts +7 -6
- package/dist/src/send/message.d.ts.map +1 -1
- package/dist/src/send/message.js +40 -22
- package/dist/src/send/message.js.map +1 -1
- package/dist/src/send/transfer.d.ts +8 -10
- package/dist/src/send/transfer.d.ts.map +1 -1
- package/dist/src/send/transfer.js +68 -70
- package/dist/src/send/transfer.js.map +1 -1
- package/dist/src/status/message.d.ts +7 -5
- package/dist/src/status/message.d.ts.map +1 -1
- package/dist/src/status/message.js +25 -12
- package/dist/src/status/message.js.map +1 -1
- package/dist/src/submit/submit.d.ts +5 -0
- package/dist/src/submit/submit.d.ts.map +1 -0
- package/dist/src/submit/submit.js +30 -0
- package/dist/src/submit/submit.js.map +1 -0
- package/dist/src/submit/types.d.ts +18 -0
- package/dist/src/submit/types.d.ts.map +1 -0
- package/dist/src/submit/types.js +2 -0
- package/dist/src/{deploy → submit}/types.js.map +1 -1
- package/dist/src/tests/deployTestErc20.d.ts +2 -0
- package/dist/src/tests/deployTestErc20.d.ts.map +1 -0
- package/dist/src/tests/deployTestErc20.js +26 -0
- package/dist/src/tests/deployTestErc20.js.map +1 -0
- package/dist/src/tests/hooks.test.d.ts +2 -0
- package/dist/src/tests/hooks.test.d.ts.map +1 -0
- package/dist/src/tests/hooks.test.js +83 -0
- package/dist/src/tests/hooks.test.js.map +1 -0
- package/dist/src/tests/ism.test.d.ts +2 -0
- package/dist/src/tests/ism.test.d.ts.map +1 -0
- package/dist/src/tests/ism.test.js +76 -0
- package/dist/src/tests/ism.test.js.map +1 -0
- package/dist/src/tests/multisig.test.d.ts +2 -0
- package/dist/src/tests/multisig.test.d.ts.map +1 -0
- package/dist/src/tests/multisig.test.js +34 -0
- package/dist/src/tests/multisig.test.js.map +1 -0
- package/dist/src/utils/balances.d.ts +2 -4
- package/dist/src/utils/balances.d.ts.map +1 -1
- package/dist/src/utils/balances.js +8 -12
- package/dist/src/utils/balances.js.map +1 -1
- package/dist/src/utils/chains.d.ts +3 -2
- package/dist/src/utils/chains.d.ts.map +1 -1
- package/dist/src/utils/chains.js +42 -23
- package/dist/src/utils/chains.js.map +1 -1
- package/dist/src/utils/env.d.ts +6 -0
- package/dist/src/utils/env.d.ts.map +1 -0
- package/dist/src/utils/env.js +9 -0
- package/dist/src/utils/env.js.map +1 -0
- package/dist/src/utils/files.d.ts +7 -4
- package/dist/src/utils/files.d.ts.map +1 -1
- package/dist/src/utils/files.js +52 -29
- package/dist/src/utils/files.js.map +1 -1
- package/dist/src/utils/keys.d.ts +28 -1
- package/dist/src/utils/keys.d.ts.map +1 -1
- package/dist/src/utils/keys.js +65 -6
- package/dist/src/utils/keys.js.map +1 -1
- package/dist/src/utils/time.d.ts.map +1 -1
- package/dist/src/utils/time.js +8 -1
- package/dist/src/utils/time.js.map +1 -1
- package/dist/src/utils/time.test.d.ts +2 -0
- package/dist/src/utils/time.test.d.ts.map +1 -0
- package/dist/src/utils/time.test.js +9 -0
- package/dist/src/utils/time.test.js.map +1 -0
- package/dist/src/utils/tokens.d.ts +3 -0
- package/dist/src/utils/tokens.d.ts.map +1 -0
- package/dist/src/utils/tokens.js +14 -0
- package/dist/src/utils/tokens.js.map +1 -0
- package/dist/src/utils/version-check.d.ts +2 -0
- package/dist/src/utils/version-check.d.ts.map +1 -0
- package/dist/src/utils/version-check.js +15 -0
- package/dist/src/utils/version-check.js.map +1 -0
- package/dist/src/version.d.ts +2 -0
- package/dist/src/version.d.ts.map +1 -0
- package/dist/src/version.js +2 -0
- package/dist/src/version.js.map +1 -0
- package/examples/chain-config.yaml +38 -40
- package/examples/contract-artifacts.yaml +4 -4
- package/examples/hooks.yaml +66 -0
- package/examples/ism-advanced.yaml +33 -0
- package/examples/{multisig-ism.yaml → ism.yaml} +0 -8
- package/examples/warp-route-deployment.yaml +32 -0
- package/package.json +27 -14
- package/dist/logger.d.ts +0 -13
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -44
- package/dist/logger.js.map +0 -1
- package/dist/src/config/artifacts.d.ts +0 -3
- package/dist/src/config/artifacts.d.ts.map +0 -1
- package/dist/src/config/artifacts.js +0 -18
- package/dist/src/config/artifacts.js.map +0 -1
- package/dist/src/context.d.ts +0 -388
- package/dist/src/context.d.ts.map +0 -1
- package/dist/src/context.js +0 -30
- package/dist/src/context.js.map +0 -1
- package/dist/src/deploy/TestRecipientDeployer.d.ts +0 -20
- package/dist/src/deploy/TestRecipientDeployer.d.ts.map +0 -1
- package/dist/src/deploy/TestRecipientDeployer.js +0 -36
- package/dist/src/deploy/TestRecipientDeployer.js.map +0 -1
- package/dist/src/deploy/types.d.ts +0 -21
- package/dist/src/deploy/types.d.ts.map +0 -1
- package/examples/anvil-chains.yaml +0 -22
- package/examples/hook-config.yaml +0 -18
- package/examples/warp-tokens.yaml +0 -26
- /package/dist/src/{deploy → context}/types.js +0 -0
package/dist/src/deploy/utils.js
CHANGED
|
@@ -1,22 +1,30 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
import { getLocalProvider, } from '@hyperlane-xyz/sdk';
|
|
1
3
|
import { ProtocolType } from '@hyperlane-xyz/utils';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
+
import { parseIsmConfig } from '../config/ism.js';
|
|
5
|
+
import { log, logGreen, logPink } from '../logger.js';
|
|
6
|
+
import { gasBalancesAreSufficient } from '../utils/balances.js';
|
|
7
|
+
import { ENV } from '../utils/env.js';
|
|
4
8
|
import { assertSigner } from '../utils/keys.js';
|
|
5
|
-
|
|
9
|
+
import { completeDryRun } from './dry-run.js';
|
|
10
|
+
export async function runPreflightChecks({ context, origin, remotes, minGas, chainsToGasCheck, }) {
|
|
6
11
|
log('Running pre-flight checks...');
|
|
7
12
|
if (!origin || !remotes?.length)
|
|
8
13
|
throw new Error('Invalid chain selection');
|
|
14
|
+
logGreen('✅ Chain selections are valid');
|
|
9
15
|
if (remotes.includes(origin))
|
|
10
16
|
throw new Error('Origin and remotes must be distinct');
|
|
17
|
+
logGreen('✅ Origin and remote are distinct');
|
|
11
18
|
return runPreflightChecksForChains({
|
|
19
|
+
context,
|
|
12
20
|
chains: [origin, ...remotes],
|
|
13
|
-
signer,
|
|
14
|
-
multiProvider,
|
|
15
21
|
minGas,
|
|
22
|
+
chainsToGasCheck,
|
|
16
23
|
});
|
|
17
24
|
}
|
|
18
|
-
export async function runPreflightChecksForChains({
|
|
19
|
-
log('Running pre-flight checks...');
|
|
25
|
+
export async function runPreflightChecksForChains({ context, chains, minGas, chainsToGasCheck, }) {
|
|
26
|
+
log('Running pre-flight checks for chains...');
|
|
27
|
+
const { signer, multiProvider } = context;
|
|
20
28
|
if (!chains?.length)
|
|
21
29
|
throw new Error('Empty chain selection');
|
|
22
30
|
for (const chain of chains) {
|
|
@@ -26,10 +34,51 @@ export async function runPreflightChecksForChains({ chains, signer, multiProvide
|
|
|
26
34
|
if (metadata.protocol !== ProtocolType.Ethereum)
|
|
27
35
|
throw new Error('Only Ethereum chains are supported for now');
|
|
28
36
|
}
|
|
29
|
-
logGreen('Chains are valid
|
|
37
|
+
logGreen('✅ Chains are valid');
|
|
30
38
|
assertSigner(signer);
|
|
31
|
-
logGreen('Signer is valid
|
|
32
|
-
await
|
|
33
|
-
|
|
39
|
+
logGreen('✅ Signer is valid');
|
|
40
|
+
const sufficient = await gasBalancesAreSufficient(multiProvider, signer, chainsToGasCheck ?? chains, minGas);
|
|
41
|
+
if (sufficient)
|
|
42
|
+
logGreen('✅ Balances are sufficient');
|
|
43
|
+
}
|
|
44
|
+
// from parsed types
|
|
45
|
+
export function isISMConfig(config) {
|
|
46
|
+
return Object.values(config).some((c) => 'type' in c);
|
|
47
|
+
}
|
|
48
|
+
// directly from filepath
|
|
49
|
+
export function isZODISMConfig(filepath) {
|
|
50
|
+
return parseIsmConfig(filepath).success;
|
|
51
|
+
}
|
|
52
|
+
export async function prepareDeploy(context, userAddress, chains) {
|
|
53
|
+
const { multiProvider, isDryRun } = context;
|
|
54
|
+
const initialBalances = {};
|
|
55
|
+
await Promise.all(chains.map(async (chain) => {
|
|
56
|
+
const provider = isDryRun
|
|
57
|
+
? getLocalProvider(ENV.ANVIL_IP_ADDR, ENV.ANVIL_PORT)
|
|
58
|
+
: multiProvider.getProvider(chain);
|
|
59
|
+
const currentBalance = await provider.getBalance(userAddress);
|
|
60
|
+
initialBalances[chain] = currentBalance;
|
|
61
|
+
}));
|
|
62
|
+
return initialBalances;
|
|
63
|
+
}
|
|
64
|
+
export async function completeDeploy(context, command, initialBalances, userAddress, chains) {
|
|
65
|
+
const { multiProvider, isDryRun } = context;
|
|
66
|
+
if (chains.length > 0)
|
|
67
|
+
logPink(`⛽️ Gas Usage Statistics`);
|
|
68
|
+
for (const chain of chains) {
|
|
69
|
+
const provider = isDryRun
|
|
70
|
+
? getLocalProvider(ENV.ANVIL_IP_ADDR, ENV.ANVIL_PORT)
|
|
71
|
+
: multiProvider.getProvider(chain);
|
|
72
|
+
const currentBalance = await provider.getBalance(userAddress);
|
|
73
|
+
const balanceDelta = initialBalances[chain].sub(currentBalance);
|
|
74
|
+
if (isDryRun && balanceDelta.lt(0))
|
|
75
|
+
break;
|
|
76
|
+
logPink(`\t- Gas required for ${command} ${isDryRun ? 'dry-run' : 'deploy'} on ${chain}: ${ethers.utils.formatEther(balanceDelta)} ${multiProvider.getChainMetadata(chain).nativeToken?.symbol}`);
|
|
77
|
+
}
|
|
78
|
+
if (isDryRun)
|
|
79
|
+
await completeDryRun(command);
|
|
80
|
+
}
|
|
81
|
+
export function toUpperCamelCase(string) {
|
|
82
|
+
return string.charAt(0).toUpperCase() + string.slice(1);
|
|
34
83
|
}
|
|
35
84
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/deploy/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/deploy/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
coreArtifactsPath?: string;
|
|
6
|
-
outPath: string;
|
|
7
|
-
skipConfirmation: boolean;
|
|
1
|
+
import { WriteCommandContext } from '../context/types.js';
|
|
2
|
+
export declare function runWarpRouteDeploy({ context, warpRouteDeploymentConfigPath, }: {
|
|
3
|
+
context: WriteCommandContext;
|
|
4
|
+
warpRouteDeploymentConfigPath?: string;
|
|
8
5
|
}): Promise<void>;
|
|
9
6
|
//# sourceMappingURL=warp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warp.d.ts","sourceRoot":"","sources":["../../../src/deploy/warp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"warp.d.ts","sourceRoot":"","sources":["../../../src/deploy/warp.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAM1D,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,6BAA6B,GAC9B,EAAE;IACD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,6BAA6B,CAAC,EAAE,MAAM,CAAC;CACxC,iBAiDA"}
|
package/dist/src/deploy/warp.js
CHANGED
|
@@ -1,128 +1,122 @@
|
|
|
1
1
|
import { confirm, input } from '@inquirer/prompts';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { ProtocolType, objMap } from '@hyperlane-xyz/utils';
|
|
6
|
-
import { log, logBlue, logGray, logGreen } from '../../logger.js';
|
|
7
|
-
import { readDeploymentArtifacts } from '../config/artifacts.js';
|
|
8
|
-
import { readWarpRouteConfig } from '../config/warp.js';
|
|
2
|
+
import { EvmTokenAdapter, HypERC20Deployer, HypERC721Deployer, MultiProtocolProvider, TOKEN_TYPE_TO_STANDARD, TokenType, getTokenConnectionId, isCollateralConfig, isNativeConfig, isSyntheticConfig, } from '@hyperlane-xyz/sdk';
|
|
3
|
+
import { ProtocolType } from '@hyperlane-xyz/utils';
|
|
4
|
+
import { readWarpRouteDeployConfig } from '../config/warp.js';
|
|
9
5
|
import { MINIMUM_WARP_DEPLOY_GAS } from '../consts.js';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { runPreflightChecks } from './utils.js';
|
|
13
|
-
export async function
|
|
14
|
-
const {
|
|
15
|
-
if (!
|
|
16
|
-
|
|
6
|
+
import { log, logBlue, logGray, logGreen } from '../logger.js';
|
|
7
|
+
import { isFile, runFileSelectionStep } from '../utils/files.js';
|
|
8
|
+
import { completeDeploy, prepareDeploy, runPreflightChecks } from './utils.js';
|
|
9
|
+
export async function runWarpRouteDeploy({ context, warpRouteDeploymentConfigPath, }) {
|
|
10
|
+
const { signer, skipConfirmation } = context;
|
|
11
|
+
if (!warpRouteDeploymentConfigPath ||
|
|
12
|
+
!isFile(warpRouteDeploymentConfigPath)) {
|
|
13
|
+
if (skipConfirmation)
|
|
14
|
+
throw new Error('Warp route deployment config required');
|
|
15
|
+
warpRouteDeploymentConfigPath = await runFileSelectionStep('./configs', 'Warp route deployment config', 'warp');
|
|
17
16
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
else {
|
|
18
|
+
log(`Using warp route deployment config at ${warpRouteDeploymentConfigPath}`);
|
|
19
|
+
}
|
|
20
|
+
const warpRouteConfig = readWarpRouteDeployConfig(warpRouteDeploymentConfigPath);
|
|
22
21
|
const configs = await runBuildConfigStep({
|
|
22
|
+
context,
|
|
23
23
|
warpRouteConfig,
|
|
24
|
-
artifacts,
|
|
25
|
-
multiProvider,
|
|
26
|
-
signer,
|
|
27
24
|
});
|
|
28
25
|
const deploymentParams = {
|
|
26
|
+
context,
|
|
29
27
|
...configs,
|
|
30
|
-
signer,
|
|
31
|
-
multiProvider,
|
|
32
|
-
outPath,
|
|
33
|
-
skipConfirmation,
|
|
34
28
|
};
|
|
35
|
-
logBlue('
|
|
29
|
+
logBlue('Warp route deployment plan');
|
|
36
30
|
await runDeployPlanStep(deploymentParams);
|
|
37
31
|
await runPreflightChecks({
|
|
38
32
|
...deploymentParams,
|
|
39
33
|
minGas: MINIMUM_WARP_DEPLOY_GAS,
|
|
40
34
|
});
|
|
35
|
+
const userAddress = await signer.getAddress();
|
|
36
|
+
const chains = [deploymentParams.origin, ...configs.remotes];
|
|
37
|
+
const initialBalances = await prepareDeploy(context, userAddress, chains);
|
|
41
38
|
await executeDeploy(deploymentParams);
|
|
39
|
+
await completeDeploy(context, 'warp', initialBalances, userAddress, chains);
|
|
42
40
|
}
|
|
43
|
-
async function runBuildConfigStep({
|
|
41
|
+
async function runBuildConfigStep({ context, warpRouteConfig, }) {
|
|
42
|
+
const { registry, signer, multiProvider, skipConfirmation } = context;
|
|
44
43
|
log('Assembling token configs');
|
|
45
|
-
const
|
|
46
|
-
const { type: baseType, chainName: baseChainName, isNft } = base;
|
|
44
|
+
const chainAddresses = await registry.getAddresses();
|
|
47
45
|
const owner = await signer.getAddress();
|
|
48
|
-
const baseMetadata = await fetchBaseTokenMetadata(base, multiProvider);
|
|
49
|
-
log(`Using base token metadata: Name: ${baseMetadata.name}, Symbol: ${baseMetadata.symbol}, Decimals: ${baseMetadata.decimals}`);
|
|
50
|
-
const mergedContractAddrs = getMergedContractAddresses(artifacts);
|
|
51
|
-
logGray('Contract addresses from artifacts:\n', JSON.stringify(mergedContractAddrs[baseChainName], null, 4));
|
|
52
|
-
// Create configs that coalesce together values from the config file,
|
|
53
|
-
// the artifacts, and the SDK as a fallback
|
|
54
|
-
const configMap = {
|
|
55
|
-
[baseChainName]: {
|
|
56
|
-
type: baseType,
|
|
57
|
-
token: baseType === TokenType.collateral
|
|
58
|
-
? base.address
|
|
59
|
-
: ethers.constants.AddressZero,
|
|
60
|
-
owner,
|
|
61
|
-
mailbox: base.mailbox || mergedContractAddrs[baseChainName].mailbox,
|
|
62
|
-
interchainSecurityModule: base.interchainSecurityModule ||
|
|
63
|
-
mergedContractAddrs[baseChainName].interchainSecurityModule ||
|
|
64
|
-
mergedContractAddrs[baseChainName].multisigIsm,
|
|
65
|
-
// ismFactory: mergedContractAddrs[baseChainName].routingIsmFactory, // fix when updating from routingIsm
|
|
66
|
-
foreignDeployment: base.foreignDeployment,
|
|
67
|
-
name: baseMetadata.name,
|
|
68
|
-
symbol: baseMetadata.symbol,
|
|
69
|
-
decimals: baseMetadata.decimals,
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
|
-
for (const synthetic of synthetics) {
|
|
73
|
-
const sChainName = synthetic.chainName;
|
|
74
|
-
configMap[sChainName] = {
|
|
75
|
-
type: TokenType.synthetic,
|
|
76
|
-
name: synthetic.name || baseMetadata.name,
|
|
77
|
-
symbol: synthetic.symbol || baseMetadata.symbol,
|
|
78
|
-
totalSupply: synthetic.totalSupply || 0,
|
|
79
|
-
owner,
|
|
80
|
-
mailbox: synthetic.mailbox || mergedContractAddrs[sChainName].mailbox,
|
|
81
|
-
interchainSecurityModule: synthetic.interchainSecurityModule ||
|
|
82
|
-
mergedContractAddrs[sChainName].interchainSecurityModule ||
|
|
83
|
-
mergedContractAddrs[sChainName].multisigIsm,
|
|
84
|
-
// ismFactory: mergedContractAddrs[sChainName].routingIsmFactory, // fix
|
|
85
|
-
foreignDeployment: synthetic.foreignDeployment,
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
// Request input for any address fields that are missing
|
|
89
46
|
const requiredRouterFields = ['mailbox'];
|
|
90
|
-
|
|
91
|
-
|
|
47
|
+
const remotes = [];
|
|
48
|
+
/// @dev This will keep track of the base collateral metadata which can get overwritten if there are multiple collaterals.
|
|
49
|
+
/// These 'base' variables are used to derive synthetic fields
|
|
50
|
+
/// @todo Remove this artifact when multi-collateral is enabled
|
|
51
|
+
let baseChainName = '';
|
|
52
|
+
let baseMetadata = {};
|
|
53
|
+
// Define configs that coalesce together values from the config file
|
|
54
|
+
for (const [chain, config] of Object.entries(warpRouteConfig)) {
|
|
55
|
+
// the artifacts, and the SDK as a fallback
|
|
56
|
+
config.owner = owner;
|
|
57
|
+
config.mailbox = config.mailbox || chainAddresses[chain]?.mailbox;
|
|
58
|
+
config.interchainSecurityModule =
|
|
59
|
+
config.interchainSecurityModule ||
|
|
60
|
+
chainAddresses[chain]?.interchainSecurityModule ||
|
|
61
|
+
chainAddresses[chain]?.multisigIsm;
|
|
62
|
+
// config.ismFactory: chainAddresses[baseChainName].domainRoutingIsmFactory, // TODO fix when updating from routingIsm
|
|
63
|
+
if (isCollateralConfig(config) || isNativeConfig(config)) {
|
|
64
|
+
// Store the base metadata
|
|
65
|
+
baseChainName = chain;
|
|
66
|
+
baseMetadata = await fetchBaseTokenMetadata(chain, config, multiProvider);
|
|
67
|
+
log(`Using token metadata: Name: ${baseMetadata.name}, Symbol: ${baseMetadata.symbol}, Decimals: ${baseMetadata.decimals}`);
|
|
68
|
+
if (isCollateralConfig(config)) {
|
|
69
|
+
config.name = baseMetadata.name;
|
|
70
|
+
config.symbol = baseMetadata.symbol;
|
|
71
|
+
config.decimals = baseMetadata.decimals;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (isSyntheticConfig(config)) {
|
|
75
|
+
// Use the config, or baseMetadata
|
|
76
|
+
config.name = config.name || baseMetadata.name;
|
|
77
|
+
config.symbol = config.symbol || baseMetadata.symbol;
|
|
78
|
+
config.totalSupply = config.totalSupply || 0;
|
|
79
|
+
remotes.push(chain);
|
|
80
|
+
}
|
|
81
|
+
let hasShownInfo = false;
|
|
82
|
+
// Request input for any address fields that are missing
|
|
92
83
|
for (const field of requiredRouterFields) {
|
|
93
|
-
if (
|
|
84
|
+
if (config[field])
|
|
94
85
|
continue;
|
|
86
|
+
if (skipConfirmation)
|
|
87
|
+
throw new Error(`Field ${field} for token on ${chain} required`);
|
|
95
88
|
if (!hasShownInfo) {
|
|
96
89
|
logBlue('Some router fields are missing. Please enter them now, add them to your warp config, or use the --core flag to use deployment artifacts.');
|
|
97
90
|
hasShownInfo = true;
|
|
98
91
|
}
|
|
99
92
|
const value = await input({
|
|
100
|
-
message: `Enter ${field} for ${getTokenName(
|
|
93
|
+
message: `Enter ${field} for ${getTokenName(config)} token on ${chain}`,
|
|
101
94
|
});
|
|
102
95
|
if (!value)
|
|
103
96
|
throw new Error(`Field ${field} required`);
|
|
104
|
-
|
|
97
|
+
config[field] = value.trim();
|
|
105
98
|
}
|
|
106
99
|
}
|
|
107
100
|
log('Token configs ready');
|
|
108
101
|
return {
|
|
109
|
-
configMap,
|
|
110
|
-
metadata: baseMetadata,
|
|
102
|
+
configMap: warpRouteConfig,
|
|
111
103
|
origin: baseChainName,
|
|
112
|
-
|
|
113
|
-
|
|
104
|
+
metadata: baseMetadata,
|
|
105
|
+
remotes,
|
|
114
106
|
};
|
|
115
107
|
}
|
|
116
|
-
async function runDeployPlanStep({
|
|
108
|
+
async function runDeployPlanStep({ context, configMap, origin, remotes, }) {
|
|
109
|
+
const { signer, skipConfirmation } = context;
|
|
117
110
|
const address = await signer.getAddress();
|
|
118
111
|
const baseToken = configMap[origin];
|
|
119
112
|
const baseName = getTokenName(baseToken);
|
|
120
113
|
logBlue('\nDeployment plan');
|
|
121
114
|
logGray('===============');
|
|
115
|
+
log(`Collateral type will be ${baseToken.type}`);
|
|
122
116
|
log(`Transaction signer and owner of new contracts will be ${address}`);
|
|
123
117
|
log(`Deploying a warp route with a base of ${baseName} token on ${origin}`);
|
|
124
118
|
log(`Connecting it to new synthetic tokens on ${remotes.join(', ')}`);
|
|
125
|
-
log(`Using token standard ${isNft ? 'ERC721' : 'ERC20'}`);
|
|
119
|
+
log(`Using token standard ${configMap.isNft ? 'ERC721' : 'ERC20'}`);
|
|
126
120
|
if (skipConfirmation)
|
|
127
121
|
return;
|
|
128
122
|
const isConfirmed = await confirm({
|
|
@@ -133,107 +127,75 @@ async function runDeployPlanStep({ configMap, isNft, origin, remotes, signer, sk
|
|
|
133
127
|
}
|
|
134
128
|
async function executeDeploy(params) {
|
|
135
129
|
logBlue('All systems ready, captain! Beginning deployment...');
|
|
136
|
-
const { configMap,
|
|
137
|
-
const
|
|
138
|
-
{ filename: 'warp-deployment', description: 'Contract addresses' },
|
|
139
|
-
{ filename: 'warp-ui-token-config', description: 'Warp UI token config' },
|
|
140
|
-
]);
|
|
141
|
-
const deployer = isNft
|
|
130
|
+
const { configMap, context: { registry, multiProvider, isDryRun }, } = params;
|
|
131
|
+
const deployer = configMap.isNft
|
|
142
132
|
? new HypERC721Deployer(multiProvider)
|
|
143
133
|
: new HypERC20Deployer(multiProvider);
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
134
|
+
const config = isDryRun
|
|
135
|
+
? { [params.origin]: configMap[params.origin] }
|
|
136
|
+
: configMap;
|
|
137
|
+
const deployedContracts = await deployer.deploy(config); /// @todo remove ChainMap once Hyperlane deployers are refactored
|
|
138
|
+
logGreen('✅ Hyp token deployments complete');
|
|
139
|
+
if (!isDryRun)
|
|
140
|
+
log('Writing deployment artifacts');
|
|
141
|
+
const warpCoreConfig = getWarpCoreConfig(params, deployedContracts);
|
|
142
|
+
await registry.addWarpRoute(warpCoreConfig);
|
|
143
|
+
log(JSON.stringify(warpCoreConfig, null, 2));
|
|
149
144
|
logBlue('Deployment is complete!');
|
|
150
|
-
logBlue(`Contract address artifacts are in ${contractsFilePath}`);
|
|
151
|
-
logBlue(`Warp UI token config is in ${tokenConfigPath}`);
|
|
152
145
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
146
|
+
async function fetchBaseTokenMetadata(chain, config, multiProvider) {
|
|
147
|
+
if (config.type === TokenType.native) {
|
|
148
|
+
// If it's a native token, use the chain's native token metadata
|
|
149
|
+
const chainNativeToken = multiProvider.getChainMetadata(chain).nativeToken;
|
|
150
|
+
if (chainNativeToken)
|
|
151
|
+
return chainNativeToken;
|
|
152
|
+
else
|
|
153
|
+
throw new Error(`No native token metadata for ${chain}`);
|
|
159
154
|
}
|
|
160
|
-
if (type === TokenType.
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const provider = multiProvider.getProvider(chainName);
|
|
167
|
-
if (isNft) {
|
|
168
|
-
const erc721Contract = ERC721__factory.connect(address, provider);
|
|
169
|
-
const [name, symbol] = await Promise.all([
|
|
170
|
-
erc721Contract.name(),
|
|
171
|
-
erc721Contract.symbol(),
|
|
172
|
-
]);
|
|
173
|
-
return { name, symbol, decimals: 0 };
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
const erc20Contract = ERC20__factory.connect(address, provider);
|
|
177
|
-
const [name, symbol, decimals] = await Promise.all([
|
|
178
|
-
erc20Contract.name(),
|
|
179
|
-
erc20Contract.symbol(),
|
|
180
|
-
erc20Contract.decimals(),
|
|
181
|
-
]);
|
|
182
|
-
return { name, symbol, decimals };
|
|
183
|
-
}
|
|
155
|
+
else if (config.type === TokenType.collateralVault ||
|
|
156
|
+
config.type === TokenType.collateral) {
|
|
157
|
+
// If it's a collateral type, use a TokenAdapter to query for its metadata
|
|
158
|
+
log(`Fetching token metadata for ${config.token} on ${chain}`);
|
|
159
|
+
const adapter = new EvmTokenAdapter(chain, MultiProtocolProvider.fromMultiProvider(multiProvider), { token: config.token });
|
|
160
|
+
return adapter.getMetadata();
|
|
184
161
|
}
|
|
185
162
|
else {
|
|
186
|
-
throw new Error(`Unsupported token: ${
|
|
163
|
+
throw new Error(`Unsupported token: ${config.type}. Consider setting token metadata in your deployment config.`);
|
|
187
164
|
}
|
|
188
165
|
}
|
|
189
166
|
function getTokenName(token) {
|
|
190
167
|
return token.type === TokenType.native ? 'native' : token.name;
|
|
191
168
|
}
|
|
192
|
-
function
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
const chain = multiProvider.getChainMetadata(origin);
|
|
208
|
-
if (chain.protocol !== ProtocolType.Ethereum)
|
|
209
|
-
throw Error('Unsupported VM');
|
|
210
|
-
const chainMetadata = multiProvider.getChainMetadata(origin);
|
|
211
|
-
const commonFields = {
|
|
212
|
-
chainId: getChainIdNumber(chainMetadata),
|
|
213
|
-
name: metadata.name,
|
|
214
|
-
symbol: metadata.symbol,
|
|
215
|
-
decimals: metadata.decimals,
|
|
216
|
-
};
|
|
217
|
-
let tokenConfig;
|
|
218
|
-
if (baseConfig.type === TokenType.collateral) {
|
|
219
|
-
tokenConfig = {
|
|
220
|
-
...commonFields,
|
|
221
|
-
type: TokenType.collateral,
|
|
222
|
-
address: baseConfig.token,
|
|
223
|
-
hypCollateralAddress: hypTokenAddr,
|
|
224
|
-
isNft,
|
|
225
|
-
};
|
|
169
|
+
function getWarpCoreConfig({ configMap, metadata }, contracts) {
|
|
170
|
+
const warpCoreConfig = { tokens: [] };
|
|
171
|
+
// First pass, create token configs
|
|
172
|
+
for (const [chainName, contract] of Object.entries(contracts)) {
|
|
173
|
+
const config = configMap[chainName];
|
|
174
|
+
const collateralAddressOrDenom = config.type === TokenType.collateral ? config.token : undefined;
|
|
175
|
+
warpCoreConfig.tokens.push({
|
|
176
|
+
chainName,
|
|
177
|
+
standard: TOKEN_TYPE_TO_STANDARD[config.type],
|
|
178
|
+
name: metadata.name,
|
|
179
|
+
symbol: metadata.symbol,
|
|
180
|
+
decimals: metadata.decimals,
|
|
181
|
+
addressOrDenom: contract[configMap[chainName].type].address,
|
|
182
|
+
collateralAddressOrDenom,
|
|
183
|
+
});
|
|
226
184
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
185
|
+
// Second pass, add connections between tokens
|
|
186
|
+
// Assumes full interconnectivity between all tokens for now b.c. that's
|
|
187
|
+
// what the deployers do by default.
|
|
188
|
+
for (const token1 of warpCoreConfig.tokens) {
|
|
189
|
+
for (const token2 of warpCoreConfig.tokens) {
|
|
190
|
+
if (token1.chainName === token2.chainName &&
|
|
191
|
+
token1.addressOrDenom === token2.addressOrDenom)
|
|
192
|
+
continue;
|
|
193
|
+
token1.connections ||= [];
|
|
194
|
+
token1.connections.push({
|
|
195
|
+
token: getTokenConnectionId(ProtocolType.Ethereum, token2.chainName, token2.addressOrDenom),
|
|
196
|
+
});
|
|
197
|
+
}
|
|
236
198
|
}
|
|
237
|
-
|
|
199
|
+
return warpCoreConfig;
|
|
238
200
|
}
|
|
239
201
|
//# sourceMappingURL=warp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warp.js","sourceRoot":"","sources":["../../../src/deploy/warp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"warp.js","sourceRoot":"","sources":["../../../src/deploy/warp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ChainName } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { Address } from '@hyperlane-xyz/utils';
|
|
3
|
+
import { CommandContext } from '../context/types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Read Hook config for a specified chain and address, logging or writing result to file.
|
|
6
|
+
*/
|
|
7
|
+
export declare function readHookConfig({ context, chain, address, out, }: {
|
|
8
|
+
context: CommandContext;
|
|
9
|
+
chain: ChainName;
|
|
10
|
+
address: Address;
|
|
11
|
+
out?: string;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/hook/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAiC,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD;;GAEG;AACH,wBAAsB,cAAc,CAAC,EACnC,OAAO,EACP,KAAK,EACL,OAAO,EACP,GAAG,GACJ,EAAE;IACD,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { EvmHookReader } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { ProtocolType, stringifyObject } from '@hyperlane-xyz/utils';
|
|
3
|
+
import { log, logBlue, logRed } from '../logger.js';
|
|
4
|
+
import { resolveFileFormat, writeFileAtPath } from '../utils/files.js';
|
|
5
|
+
/**
|
|
6
|
+
* Read Hook config for a specified chain and address, logging or writing result to file.
|
|
7
|
+
*/
|
|
8
|
+
export async function readHookConfig({ context, chain, address, out, }) {
|
|
9
|
+
if (context.multiProvider.getProtocol(chain) === ProtocolType.Ethereum) {
|
|
10
|
+
const hookReader = new EvmHookReader(context.multiProvider, chain);
|
|
11
|
+
const config = await hookReader.deriveHookConfig(address);
|
|
12
|
+
const stringConfig = stringifyObject(config, resolveFileFormat(out), 2);
|
|
13
|
+
if (!out) {
|
|
14
|
+
logBlue(`Hook Config at ${address} on ${chain}:`);
|
|
15
|
+
log(stringConfig);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
writeFileAtPath(out, stringConfig + '\n');
|
|
19
|
+
logBlue(`Hook Config written to ${out}.`);
|
|
20
|
+
}
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
logRed('Unsupported chain. Currently this command supports EVM chains only.');
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/hook/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAW,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG9E,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEvE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,OAAO,EACP,KAAK,EACL,OAAO,EACP,GAAG,GAMJ;IACC,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC,QAAQ,EAAE,CAAC;QACvE,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,kBAAkB,OAAO,OAAO,KAAK,GAAG,CAAC,CAAC;YAClD,GAAG,CAAC,YAAY,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;YAC1C,OAAO,CAAC,0BAA0B,GAAG,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,qEAAqE,CAAC,CAAC;AAChF,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ChainName } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { Address } from '@hyperlane-xyz/utils';
|
|
3
|
+
import { CommandContext } from '../context/types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Read ISM config for a specified chain and address, logging or writing result to file.
|
|
6
|
+
*/
|
|
7
|
+
export declare function readIsmConfig({ context, chain, address, out, }: {
|
|
8
|
+
context: CommandContext;
|
|
9
|
+
chain: ChainName;
|
|
10
|
+
address: Address;
|
|
11
|
+
out?: string;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=read.d.ts.map
|