@hyperlane-xyz/cli 3.1.10 → 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 -4
- 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 -68
- package/dist/src/config/chain.js.map +1 -1
- package/dist/src/config/chain.test.js +1 -5
- package/dist/src/config/chain.test.js.map +1 -1
- 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 +129 -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 +33 -18
- 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 +6 -4
- package/dist/src/utils/files.d.ts.map +1 -1
- package/dist/src/utils/files.js +37 -25
- 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/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 -46
- 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 +20 -13
- package/dist/logger.d.ts +0 -14
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -45
- 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,130 +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 { isFile,
|
|
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
17
|
else {
|
|
19
|
-
log(`Using warp config at ${
|
|
18
|
+
log(`Using warp route deployment config at ${warpRouteDeploymentConfigPath}`);
|
|
20
19
|
}
|
|
21
|
-
const warpRouteConfig =
|
|
22
|
-
const artifacts = coreArtifactsPath
|
|
23
|
-
? readDeploymentArtifacts(coreArtifactsPath)
|
|
24
|
-
: undefined;
|
|
20
|
+
const warpRouteConfig = readWarpRouteDeployConfig(warpRouteDeploymentConfigPath);
|
|
25
21
|
const configs = await runBuildConfigStep({
|
|
22
|
+
context,
|
|
26
23
|
warpRouteConfig,
|
|
27
|
-
artifacts,
|
|
28
|
-
multiProvider,
|
|
29
|
-
signer,
|
|
30
24
|
});
|
|
31
25
|
const deploymentParams = {
|
|
26
|
+
context,
|
|
32
27
|
...configs,
|
|
33
|
-
signer,
|
|
34
|
-
multiProvider,
|
|
35
|
-
outPath,
|
|
36
|
-
skipConfirmation,
|
|
37
28
|
};
|
|
38
|
-
logBlue('
|
|
29
|
+
logBlue('Warp route deployment plan');
|
|
39
30
|
await runDeployPlanStep(deploymentParams);
|
|
40
31
|
await runPreflightChecks({
|
|
41
32
|
...deploymentParams,
|
|
42
33
|
minGas: MINIMUM_WARP_DEPLOY_GAS,
|
|
43
34
|
});
|
|
35
|
+
const userAddress = await signer.getAddress();
|
|
36
|
+
const chains = [deploymentParams.origin, ...configs.remotes];
|
|
37
|
+
const initialBalances = await prepareDeploy(context, userAddress, chains);
|
|
44
38
|
await executeDeploy(deploymentParams);
|
|
39
|
+
await completeDeploy(context, 'warp', initialBalances, userAddress, chains);
|
|
45
40
|
}
|
|
46
|
-
async function runBuildConfigStep({
|
|
41
|
+
async function runBuildConfigStep({ context, warpRouteConfig, }) {
|
|
42
|
+
const { registry, signer, multiProvider, skipConfirmation } = context;
|
|
47
43
|
log('Assembling token configs');
|
|
48
|
-
const
|
|
49
|
-
const { type: baseType, chainName: baseChainName, isNft } = base;
|
|
44
|
+
const chainAddresses = await registry.getAddresses();
|
|
50
45
|
const owner = await signer.getAddress();
|
|
51
|
-
const baseMetadata = await fetchBaseTokenMetadata(base, multiProvider);
|
|
52
|
-
log(`Using base token metadata: Name: ${baseMetadata.name}, Symbol: ${baseMetadata.symbol}, Decimals: ${baseMetadata.decimals}`);
|
|
53
|
-
const mergedContractAddrs = getMergedContractAddresses(artifacts);
|
|
54
|
-
// Create configs that coalesce together values from the config file,
|
|
55
|
-
// the artifacts, and the SDK as a fallback
|
|
56
|
-
const configMap = {
|
|
57
|
-
[baseChainName]: {
|
|
58
|
-
type: baseType,
|
|
59
|
-
token: baseType === TokenType.collateral
|
|
60
|
-
? base.address
|
|
61
|
-
: ethers.constants.AddressZero,
|
|
62
|
-
owner,
|
|
63
|
-
mailbox: base.mailbox || mergedContractAddrs[baseChainName]?.mailbox,
|
|
64
|
-
interchainSecurityModule: base.interchainSecurityModule ||
|
|
65
|
-
mergedContractAddrs[baseChainName]?.interchainSecurityModule ||
|
|
66
|
-
mergedContractAddrs[baseChainName]?.multisigIsm,
|
|
67
|
-
// ismFactory: mergedContractAddrs[baseChainName].routingIsmFactory, // TODO fix when updating from routingIsm
|
|
68
|
-
foreignDeployment: base.foreignDeployment,
|
|
69
|
-
name: baseMetadata.name,
|
|
70
|
-
symbol: baseMetadata.symbol,
|
|
71
|
-
decimals: baseMetadata.decimals,
|
|
72
|
-
},
|
|
73
|
-
};
|
|
74
|
-
for (const synthetic of synthetics) {
|
|
75
|
-
const sChainName = synthetic.chainName;
|
|
76
|
-
configMap[sChainName] = {
|
|
77
|
-
type: TokenType.synthetic,
|
|
78
|
-
name: synthetic.name || baseMetadata.name,
|
|
79
|
-
symbol: synthetic.symbol || baseMetadata.symbol,
|
|
80
|
-
totalSupply: synthetic.totalSupply || 0,
|
|
81
|
-
owner,
|
|
82
|
-
mailbox: synthetic.mailbox || mergedContractAddrs[sChainName].mailbox,
|
|
83
|
-
interchainSecurityModule: synthetic.interchainSecurityModule ||
|
|
84
|
-
mergedContractAddrs[sChainName]?.interchainSecurityModule ||
|
|
85
|
-
mergedContractAddrs[sChainName]?.multisigIsm,
|
|
86
|
-
// ismFactory: mergedContractAddrs[sChainName].routingIsmFactory, // TODO fix
|
|
87
|
-
foreignDeployment: synthetic.foreignDeployment,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
// Request input for any address fields that are missing
|
|
91
46
|
const requiredRouterFields = ['mailbox'];
|
|
92
|
-
|
|
93
|
-
|
|
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
|
|
94
83
|
for (const field of requiredRouterFields) {
|
|
95
|
-
if (
|
|
84
|
+
if (config[field])
|
|
96
85
|
continue;
|
|
86
|
+
if (skipConfirmation)
|
|
87
|
+
throw new Error(`Field ${field} for token on ${chain} required`);
|
|
97
88
|
if (!hasShownInfo) {
|
|
98
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.');
|
|
99
90
|
hasShownInfo = true;
|
|
100
91
|
}
|
|
101
92
|
const value = await input({
|
|
102
|
-
message: `Enter ${field} for ${getTokenName(
|
|
93
|
+
message: `Enter ${field} for ${getTokenName(config)} token on ${chain}`,
|
|
103
94
|
});
|
|
104
95
|
if (!value)
|
|
105
96
|
throw new Error(`Field ${field} required`);
|
|
106
|
-
|
|
97
|
+
config[field] = value.trim();
|
|
107
98
|
}
|
|
108
99
|
}
|
|
109
100
|
log('Token configs ready');
|
|
110
101
|
return {
|
|
111
|
-
configMap,
|
|
112
|
-
metadata: baseMetadata,
|
|
102
|
+
configMap: warpRouteConfig,
|
|
113
103
|
origin: baseChainName,
|
|
114
|
-
|
|
115
|
-
|
|
104
|
+
metadata: baseMetadata,
|
|
105
|
+
remotes,
|
|
116
106
|
};
|
|
117
107
|
}
|
|
118
|
-
async function runDeployPlanStep({
|
|
108
|
+
async function runDeployPlanStep({ context, configMap, origin, remotes, }) {
|
|
109
|
+
const { signer, skipConfirmation } = context;
|
|
119
110
|
const address = await signer.getAddress();
|
|
120
111
|
const baseToken = configMap[origin];
|
|
121
112
|
const baseName = getTokenName(baseToken);
|
|
122
113
|
logBlue('\nDeployment plan');
|
|
123
114
|
logGray('===============');
|
|
115
|
+
log(`Collateral type will be ${baseToken.type}`);
|
|
124
116
|
log(`Transaction signer and owner of new contracts will be ${address}`);
|
|
125
117
|
log(`Deploying a warp route with a base of ${baseName} token on ${origin}`);
|
|
126
118
|
log(`Connecting it to new synthetic tokens on ${remotes.join(', ')}`);
|
|
127
|
-
log(`Using token standard ${isNft ? 'ERC721' : 'ERC20'}`);
|
|
119
|
+
log(`Using token standard ${configMap.isNft ? 'ERC721' : 'ERC20'}`);
|
|
128
120
|
if (skipConfirmation)
|
|
129
121
|
return;
|
|
130
122
|
const isConfirmed = await confirm({
|
|
@@ -135,107 +127,75 @@ async function runDeployPlanStep({ configMap, isNft, origin, remotes, signer, sk
|
|
|
135
127
|
}
|
|
136
128
|
async function executeDeploy(params) {
|
|
137
129
|
logBlue('All systems ready, captain! Beginning deployment...');
|
|
138
|
-
const { configMap,
|
|
139
|
-
const
|
|
140
|
-
{ filename: 'warp-deployment', description: 'Contract addresses' },
|
|
141
|
-
{ filename: 'warp-ui-token-config', description: 'Warp UI token config' },
|
|
142
|
-
]);
|
|
143
|
-
const deployer = isNft
|
|
130
|
+
const { configMap, context: { registry, multiProvider, isDryRun }, } = params;
|
|
131
|
+
const deployer = configMap.isNft
|
|
144
132
|
? new HypERC721Deployer(multiProvider)
|
|
145
133
|
: new HypERC20Deployer(multiProvider);
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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));
|
|
151
144
|
logBlue('Deployment is complete!');
|
|
152
|
-
logBlue(`Contract address artifacts are in ${contractsFilePath}`);
|
|
153
|
-
logBlue(`Warp UI token config is in ${tokenConfigPath}`);
|
|
154
145
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
return (multiProvider.getChainMetadata(base.chainName).nativeToken ||
|
|
164
|
-
defaultChainMetadata.ethereum.nativeToken);
|
|
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}`);
|
|
165
154
|
}
|
|
166
|
-
else if (
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
erc721Contract.name(),
|
|
173
|
-
erc721Contract.symbol(),
|
|
174
|
-
]);
|
|
175
|
-
return { name, symbol, decimals: 0 };
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
const erc20Contract = ERC20__factory.connect(address, provider);
|
|
179
|
-
const [name, symbol, decimals] = await Promise.all([
|
|
180
|
-
erc20Contract.name(),
|
|
181
|
-
erc20Contract.symbol(),
|
|
182
|
-
erc20Contract.decimals(),
|
|
183
|
-
]);
|
|
184
|
-
return { name, symbol, decimals };
|
|
185
|
-
}
|
|
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();
|
|
186
161
|
}
|
|
187
162
|
else {
|
|
188
|
-
throw new Error(`Unsupported token: ${
|
|
163
|
+
throw new Error(`Unsupported token: ${config.type}. Consider setting token metadata in your deployment config.`);
|
|
189
164
|
}
|
|
190
165
|
}
|
|
191
166
|
function getTokenName(token) {
|
|
192
167
|
return token.type === TokenType.native ? 'native' : token.name;
|
|
193
168
|
}
|
|
194
|
-
function
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
const chain = multiProvider.getChainMetadata(origin);
|
|
210
|
-
if (chain.protocol !== ProtocolType.Ethereum)
|
|
211
|
-
throw Error('Unsupported VM');
|
|
212
|
-
const chainMetadata = multiProvider.getChainMetadata(origin);
|
|
213
|
-
const commonFields = {
|
|
214
|
-
chainId: getChainIdNumber(chainMetadata),
|
|
215
|
-
name: metadata.name,
|
|
216
|
-
symbol: metadata.symbol,
|
|
217
|
-
decimals: metadata.decimals,
|
|
218
|
-
};
|
|
219
|
-
let tokenConfig;
|
|
220
|
-
if (baseConfig.type === TokenType.collateral) {
|
|
221
|
-
tokenConfig = {
|
|
222
|
-
...commonFields,
|
|
223
|
-
type: TokenType.collateral,
|
|
224
|
-
address: baseConfig.token,
|
|
225
|
-
hypCollateralAddress: hypTokenAddr,
|
|
226
|
-
isNft,
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
else if (baseConfig.type === TokenType.native) {
|
|
230
|
-
tokenConfig = {
|
|
231
|
-
...commonFields,
|
|
232
|
-
type: TokenType.native,
|
|
233
|
-
hypNativeAddress: hypTokenAddr,
|
|
234
|
-
};
|
|
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
|
+
});
|
|
235
184
|
}
|
|
236
|
-
|
|
237
|
-
|
|
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
|
+
}
|
|
238
198
|
}
|
|
239
|
-
|
|
199
|
+
return warpCoreConfig;
|
|
240
200
|
}
|
|
241
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
|