@hyperlane-xyz/cli 1.5.4-beta0 → 3.1.1
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/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +8 -1
- package/dist/logger.js.map +1 -1
- package/dist/src/commands/chains.js +11 -5
- package/dist/src/commands/chains.js.map +1 -1
- package/dist/src/commands/config.d.ts.map +1 -1
- package/dist/src/commands/config.js +18 -0
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/deploy.js +17 -15
- package/dist/src/commands/deploy.js.map +1 -1
- package/dist/src/commands/options.d.ts.map +1 -1
- package/dist/src/commands/options.js +7 -3
- package/dist/src/commands/options.js.map +1 -1
- package/dist/src/commands/send.d.ts.map +1 -1
- package/dist/src/commands/send.js +18 -0
- package/dist/src/commands/send.js.map +1 -1
- package/dist/src/commands/status.d.ts +3 -0
- package/dist/src/commands/status.d.ts.map +1 -0
- package/dist/src/commands/status.js +34 -0
- package/dist/src/commands/status.js.map +1 -0
- package/dist/src/config/artifacts.d.ts.map +1 -1
- package/dist/src/config/artifacts.js +4 -3
- package/dist/src/config/artifacts.js.map +1 -1
- package/dist/src/config/hooks.d.ts +289 -0
- package/dist/src/config/hooks.d.ts.map +1 -0
- package/dist/src/config/hooks.js +173 -0
- package/dist/src/config/hooks.js.map +1 -0
- package/dist/src/config/multisig.d.ts +10 -10
- package/dist/src/config/multisig.d.ts.map +1 -1
- package/dist/src/config/multisig.js +10 -14
- package/dist/src/config/multisig.js.map +1 -1
- package/dist/src/config/warp.d.ts +1 -1
- package/dist/src/config/warp.d.ts.map +1 -1
- package/dist/src/config/warp.js +1 -1
- package/dist/src/config/warp.js.map +1 -1
- 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.d.ts +268 -242
- package/dist/src/context.d.ts.map +1 -1
- package/dist/src/context.js +6 -1
- package/dist/src/context.js.map +1 -1
- package/dist/src/deploy/TestRecipientDeployer.d.ts.map +1 -1
- package/dist/src/deploy/TestRecipientDeployer.js +2 -1
- package/dist/src/deploy/TestRecipientDeployer.js.map +1 -1
- package/dist/src/deploy/core.d.ts +5 -4
- package/dist/src/deploy/core.d.ts.map +1 -1
- package/dist/src/deploy/core.js +128 -91
- package/dist/src/deploy/core.js.map +1 -1
- package/dist/src/deploy/types.d.ts +1 -1
- package/dist/src/deploy/types.d.ts.map +1 -1
- package/dist/src/deploy/utils.d.ts +6 -0
- package/dist/src/deploy/utils.d.ts.map +1 -1
- package/dist/src/deploy/utils.js +13 -2
- package/dist/src/deploy/utils.js.map +1 -1
- package/dist/src/deploy/warp.d.ts +4 -3
- package/dist/src/deploy/warp.d.ts.map +1 -1
- package/dist/src/deploy/warp.js +26 -16
- package/dist/src/deploy/warp.js.map +1 -1
- package/dist/src/send/message.d.ts +2 -1
- package/dist/src/send/message.d.ts.map +1 -1
- package/dist/src/send/message.js +27 -22
- package/dist/src/send/message.js.map +1 -1
- package/dist/src/send/transfer.d.ts +4 -2
- package/dist/src/send/transfer.d.ts.map +1 -1
- package/dist/src/send/transfer.js +35 -25
- package/dist/src/send/transfer.js.map +1 -1
- package/dist/src/status/message.d.ts +8 -0
- package/dist/src/status/message.d.ts.map +1 -0
- package/dist/src/status/message.js +22 -0
- package/dist/src/status/message.js.map +1 -0
- package/dist/src/utils/balances.js +1 -1
- package/dist/src/utils/balances.js.map +1 -1
- package/dist/src/utils/chains.d.ts +0 -4
- package/dist/src/utils/chains.d.ts.map +1 -1
- package/dist/src/utils/chains.js +8 -13
- package/dist/src/utils/chains.js.map +1 -1
- package/examples/anvil-chains.yaml +10 -9
- package/examples/hook-config.yaml +18 -0
- package/examples/multisig-ism.yaml +2 -2
- package/examples/warp-tokens.yaml +3 -1
- package/package.json +4 -6
package/dist/src/deploy/warp.js
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { confirm, input } from '@inquirer/prompts';
|
|
2
2
|
import { ethers } from 'ethers';
|
|
3
|
-
import { ERC20__factory, ERC721__factory
|
|
4
|
-
import { chainMetadata as defaultChainMetadata, } from '@hyperlane-xyz/sdk';
|
|
5
|
-
import { objMap } from '@hyperlane-xyz/utils';
|
|
3
|
+
import { ERC20__factory, ERC721__factory } from '@hyperlane-xyz/core';
|
|
4
|
+
import { HypERC20Deployer, HypERC721Deployer, TokenType, chainMetadata as defaultChainMetadata, getChainIdNumber, } from '@hyperlane-xyz/sdk';
|
|
5
|
+
import { ProtocolType, objMap } from '@hyperlane-xyz/utils';
|
|
6
6
|
import { log, logBlue, logGray, logGreen } from '../../logger.js';
|
|
7
7
|
import { readDeploymentArtifacts } from '../config/artifacts.js';
|
|
8
8
|
import { readWarpRouteConfig } from '../config/warp.js';
|
|
9
9
|
import { MINIMUM_WARP_DEPLOY_BALANCE } from '../consts.js';
|
|
10
|
-
import {
|
|
11
|
-
import { prepNewArtifactsFiles, writeJson } from '../utils/files.js';
|
|
10
|
+
import { getContextWithSigner, getMergedContractAddresses, } from '../context.js';
|
|
11
|
+
import { prepNewArtifactsFiles, runFileSelectionStep, writeJson, } from '../utils/files.js';
|
|
12
12
|
import { runPreflightChecks } from './utils.js';
|
|
13
|
-
export async function runWarpDeploy({ key, chainConfigPath, warpConfigPath, coreArtifactsPath, outPath, }) {
|
|
14
|
-
const { multiProvider, signer } =
|
|
13
|
+
export async function runWarpDeploy({ key, chainConfigPath, warpConfigPath, coreArtifactsPath, outPath, skipConfirmation, }) {
|
|
14
|
+
const { multiProvider, signer } = getContextWithSigner(key, chainConfigPath);
|
|
15
|
+
if (!warpConfigPath) {
|
|
16
|
+
warpConfigPath = await runFileSelectionStep('./configs', 'Warp config', 'warp');
|
|
17
|
+
}
|
|
15
18
|
const warpRouteConfig = readWarpRouteConfig(warpConfigPath);
|
|
16
19
|
const artifacts = coreArtifactsPath
|
|
17
20
|
? readDeploymentArtifacts(coreArtifactsPath)
|
|
@@ -27,7 +30,9 @@ export async function runWarpDeploy({ key, chainConfigPath, warpConfigPath, core
|
|
|
27
30
|
signer,
|
|
28
31
|
multiProvider,
|
|
29
32
|
outPath,
|
|
33
|
+
skipConfirmation,
|
|
30
34
|
};
|
|
35
|
+
logBlue('WARP Deployment plan');
|
|
31
36
|
await runDeployPlanStep(deploymentParams);
|
|
32
37
|
await runPreflightChecks({
|
|
33
38
|
...deploymentParams,
|
|
@@ -43,6 +48,7 @@ async function runBuildConfigStep({ warpRouteConfig, multiProvider, signer, arti
|
|
|
43
48
|
const baseMetadata = await fetchBaseTokenMetadata(base, multiProvider);
|
|
44
49
|
log(`Using base token metadata: Name: ${baseMetadata.name}, Symbol: ${baseMetadata.symbol}, Decimals: ${baseMetadata.decimals}`);
|
|
45
50
|
const mergedContractAddrs = getMergedContractAddresses(artifacts);
|
|
51
|
+
logGray('Contract addresses from artifacts:\n', JSON.stringify(mergedContractAddrs[baseChainName], null, 4));
|
|
46
52
|
// Create configs that coalesce together values from the config file,
|
|
47
53
|
// the artifacts, and the SDK as a fallback
|
|
48
54
|
const configMap = {
|
|
@@ -56,8 +62,7 @@ async function runBuildConfigStep({ warpRouteConfig, multiProvider, signer, arti
|
|
|
56
62
|
interchainSecurityModule: base.interchainSecurityModule ||
|
|
57
63
|
mergedContractAddrs[baseChainName].interchainSecurityModule ||
|
|
58
64
|
mergedContractAddrs[baseChainName].multisigIsm,
|
|
59
|
-
|
|
60
|
-
mergedContractAddrs[baseChainName].defaultIsmInterchainGasPaymaster,
|
|
65
|
+
// ismFactory: mergedContractAddrs[baseChainName].routingIsmFactory, // fix when updating from routingIsm
|
|
61
66
|
foreignDeployment: base.foreignDeployment,
|
|
62
67
|
name: baseMetadata.name,
|
|
63
68
|
symbol: baseMetadata.symbol,
|
|
@@ -76,8 +81,7 @@ async function runBuildConfigStep({ warpRouteConfig, multiProvider, signer, arti
|
|
|
76
81
|
interchainSecurityModule: synthetic.interchainSecurityModule ||
|
|
77
82
|
mergedContractAddrs[sChainName].interchainSecurityModule ||
|
|
78
83
|
mergedContractAddrs[sChainName].multisigIsm,
|
|
79
|
-
|
|
80
|
-
mergedContractAddrs[sChainName].defaultIsmInterchainGasPaymaster,
|
|
84
|
+
// ismFactory: mergedContractAddrs[sChainName].routingIsmFactory, // fix
|
|
81
85
|
foreignDeployment: synthetic.foreignDeployment,
|
|
82
86
|
};
|
|
83
87
|
}
|
|
@@ -85,7 +89,6 @@ async function runBuildConfigStep({ warpRouteConfig, multiProvider, signer, arti
|
|
|
85
89
|
const requiredRouterFields = [
|
|
86
90
|
'mailbox',
|
|
87
91
|
'interchainSecurityModule',
|
|
88
|
-
'interchainGasPaymaster',
|
|
89
92
|
];
|
|
90
93
|
let hasShownInfo = false;
|
|
91
94
|
for (const [chain, token] of Object.entries(configMap)) {
|
|
@@ -113,16 +116,18 @@ async function runBuildConfigStep({ warpRouteConfig, multiProvider, signer, arti
|
|
|
113
116
|
isNft: !!isNft,
|
|
114
117
|
};
|
|
115
118
|
}
|
|
116
|
-
async function runDeployPlanStep({ configMap, isNft, origin, remotes, signer, }) {
|
|
119
|
+
async function runDeployPlanStep({ configMap, isNft, origin, remotes, signer, skipConfirmation, }) {
|
|
117
120
|
const address = await signer.getAddress();
|
|
118
121
|
const baseToken = configMap[origin];
|
|
119
122
|
const baseName = getTokenName(baseToken);
|
|
120
|
-
logBlue('\
|
|
121
|
-
logGray('
|
|
123
|
+
logBlue('\nDeployment plan');
|
|
124
|
+
logGray('===============');
|
|
122
125
|
log(`Transaction signer and owner of new contracts will be ${address}`);
|
|
123
126
|
log(`Deploying a warp route with a base of ${baseName} token on ${origin}`);
|
|
124
127
|
log(`Connecting it to new synthetic tokens on ${remotes.join(', ')}`);
|
|
125
128
|
log(`Using token standard ${isNft ? 'ERC721' : 'ERC20'}`);
|
|
129
|
+
if (skipConfirmation)
|
|
130
|
+
return;
|
|
126
131
|
const isConfirmed = await confirm({
|
|
127
132
|
message: 'Is this deployment plan correct?',
|
|
128
133
|
});
|
|
@@ -148,6 +153,7 @@ async function executeDeploy(params) {
|
|
|
148
153
|
logBlue(`Contract address artifacts are in ${contractsFilePath}`);
|
|
149
154
|
logBlue(`Warp UI token config is in ${tokenConfigPath}`);
|
|
150
155
|
}
|
|
156
|
+
// TODO move into token classes in the SDK
|
|
151
157
|
async function fetchBaseTokenMetadata(base, multiProvider) {
|
|
152
158
|
const { type, name, symbol, chainName, address, decimals, isNft } = base;
|
|
153
159
|
// Skip fetching metadata if it's already provided in the config
|
|
@@ -201,8 +207,12 @@ function writeWarpUiTokenConfig(filePath, contracts, { configMap, isNft, metadat
|
|
|
201
207
|
if (!hypTokenAddr) {
|
|
202
208
|
throw Error('No base Hyperlane token address deployed and no foreign deployment specified');
|
|
203
209
|
}
|
|
210
|
+
const chain = multiProvider.getChainMetadata(origin);
|
|
211
|
+
if (chain.protocol !== ProtocolType.Ethereum)
|
|
212
|
+
throw Error('Unsupported VM');
|
|
213
|
+
const chainMetadata = multiProvider.getChainMetadata(origin);
|
|
204
214
|
const commonFields = {
|
|
205
|
-
chainId:
|
|
215
|
+
chainId: getChainIdNumber(chainMetadata),
|
|
206
216
|
name: metadata.name,
|
|
207
217
|
symbol: metadata.symbol,
|
|
208
218
|
decimals: metadata.decimals,
|
|
@@ -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;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,
|
|
1
|
+
{"version":3,"file":"warp.js","sourceRoot":"","sources":["../../../src/deploy/warp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ChainName } from '@hyperlane-xyz/sdk';
|
|
2
|
-
export declare function sendTestMessage({ key, chainConfigPath, coreArtifactsPath, origin, destination, timeoutSec, }: {
|
|
2
|
+
export declare function sendTestMessage({ key, chainConfigPath, coreArtifactsPath, origin, destination, timeoutSec, skipWaitForDelivery, }: {
|
|
3
3
|
key: string;
|
|
4
4
|
chainConfigPath: string;
|
|
5
5
|
coreArtifactsPath: string;
|
|
6
6
|
origin: ChainName;
|
|
7
7
|
destination: ChainName;
|
|
8
8
|
timeoutSec: number;
|
|
9
|
+
skipWaitForDelivery: boolean;
|
|
9
10
|
}): Promise<void>;
|
|
10
11
|
//# sourceMappingURL=message.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/send/message.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/send/message.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EAIV,MAAM,oBAAoB,CAAC;AAgB5B,wBAAsB,eAAe,CAAC,EACpC,GAAG,EACH,eAAe,EACf,iBAAiB,EACjB,MAAM,EACN,WAAW,EACX,UAAU,EACV,mBAAmB,GACpB,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,iBAyBA"}
|
package/dist/src/send/message.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { HyperlaneCore, HyperlaneIgp, } from '@hyperlane-xyz/sdk';
|
|
1
|
+
import { HyperlaneCore, } from '@hyperlane-xyz/sdk';
|
|
3
2
|
import { addressToBytes32, timeout } from '@hyperlane-xyz/utils';
|
|
4
3
|
import { errorRed, log, logBlue, logGreen } from '../../logger.js';
|
|
5
4
|
import { readDeploymentArtifacts } from '../config/artifacts.js';
|
|
6
5
|
import { MINIMUM_TEST_SEND_BALANCE } from '../consts.js';
|
|
7
|
-
import {
|
|
6
|
+
import { getContextWithSigner, getMergedContractAddresses, } from '../context.js';
|
|
8
7
|
import { runPreflightChecks } from '../deploy/utils.js';
|
|
9
|
-
const
|
|
8
|
+
const MESSAGE_BODY = '0x48656c6c6f21'; // Hello!'
|
|
10
9
|
// TODO improve the UX here by making params optional and
|
|
11
10
|
// prompting for missing values
|
|
12
|
-
export async function sendTestMessage({ key, chainConfigPath, coreArtifactsPath, origin, destination, timeoutSec, }) {
|
|
13
|
-
const { signer, multiProvider } =
|
|
14
|
-
const
|
|
11
|
+
export async function sendTestMessage({ key, chainConfigPath, coreArtifactsPath, origin, destination, timeoutSec, skipWaitForDelivery, }) {
|
|
12
|
+
const { signer, multiProvider } = getContextWithSigner(key, chainConfigPath);
|
|
13
|
+
const coreArtifacts = coreArtifactsPath
|
|
15
14
|
? readDeploymentArtifacts(coreArtifactsPath)
|
|
16
15
|
: undefined;
|
|
17
16
|
await runPreflightChecks({
|
|
@@ -21,39 +20,45 @@ export async function sendTestMessage({ key, chainConfigPath, coreArtifactsPath,
|
|
|
21
20
|
signer,
|
|
22
21
|
minBalanceWei: MINIMUM_TEST_SEND_BALANCE,
|
|
23
22
|
});
|
|
24
|
-
await timeout(executeDelivery({
|
|
23
|
+
await timeout(executeDelivery({
|
|
24
|
+
origin,
|
|
25
|
+
destination,
|
|
26
|
+
multiProvider,
|
|
27
|
+
coreArtifacts,
|
|
28
|
+
skipWaitForDelivery,
|
|
29
|
+
}), timeoutSec * 1000, 'Timed out waiting for messages to be delivered');
|
|
25
30
|
}
|
|
26
|
-
async function executeDelivery({ origin, destination, multiProvider,
|
|
27
|
-
const mergedContractAddrs = getMergedContractAddresses(
|
|
31
|
+
async function executeDelivery({ origin, destination, multiProvider, coreArtifacts, skipWaitForDelivery, }) {
|
|
32
|
+
const mergedContractAddrs = getMergedContractAddresses(coreArtifacts);
|
|
28
33
|
const core = HyperlaneCore.fromAddressesMap(mergedContractAddrs, multiProvider);
|
|
29
34
|
const mailbox = core.getContracts(origin).mailbox;
|
|
30
|
-
const igp = HyperlaneIgp.fromAddressesMap(mergedContractAddrs, multiProvider);
|
|
31
|
-
const igpContract = igp.getContracts(origin).defaultIsmInterchainGasPaymaster;
|
|
32
35
|
const destinationDomain = multiProvider.getDomainId(destination);
|
|
33
|
-
|
|
34
|
-
let messageReceipt;
|
|
36
|
+
let txReceipt;
|
|
35
37
|
try {
|
|
36
38
|
const recipient = mergedContractAddrs[destination].testRecipient;
|
|
37
39
|
if (!recipient) {
|
|
38
40
|
throw new Error(`Unable to find TestRecipient for ${destination}`);
|
|
39
41
|
}
|
|
42
|
+
const formattedRecipient = addressToBytes32(recipient);
|
|
43
|
+
log('Getting gas quote');
|
|
44
|
+
const value = await mailbox['quoteDispatch(uint32,bytes32,bytes)'](destinationDomain, formattedRecipient, MESSAGE_BODY);
|
|
45
|
+
log(`Paying for gas with ${value} wei`);
|
|
40
46
|
log('Dispatching message');
|
|
41
|
-
const messageTx = await mailbox
|
|
42
|
-
|
|
43
|
-
const message = core.getDispatchedMessages(
|
|
47
|
+
const messageTx = await mailbox['dispatch(uint32,bytes32,bytes)'](destinationDomain, formattedRecipient, MESSAGE_BODY, { value });
|
|
48
|
+
txReceipt = await multiProvider.handleTx(origin, messageTx);
|
|
49
|
+
const message = core.getDispatchedMessages(txReceipt)[0];
|
|
44
50
|
logBlue(`Sent message from ${origin} to ${recipient} on ${destination}.`);
|
|
45
51
|
logBlue(`Message ID: ${message.id}`);
|
|
46
|
-
const value = await igp.quoteGasPaymentForDefaultIsmIgp(origin, destination, BigNumber.from(GAS_AMOUNT));
|
|
47
|
-
log(`Paying for gas with ${value} wei`);
|
|
48
|
-
const paymentTx = await igpContract.payForGas(message.id, destinationDomain, GAS_AMOUNT, signerAddress, { value });
|
|
49
|
-
await paymentTx.wait();
|
|
50
52
|
}
|
|
51
53
|
catch (e) {
|
|
52
54
|
errorRed(`Encountered error sending message from ${origin} to ${destination}`);
|
|
53
55
|
throw e;
|
|
54
56
|
}
|
|
57
|
+
if (skipWaitForDelivery)
|
|
58
|
+
return;
|
|
55
59
|
log('Waiting for message delivery on destination chain...');
|
|
56
|
-
|
|
60
|
+
// Max wait 10 minutes
|
|
61
|
+
await core.waitForMessageProcessed(txReceipt, 10000, 60);
|
|
57
62
|
logGreen('Message was delivered!');
|
|
58
63
|
}
|
|
59
64
|
//# sourceMappingURL=message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/send/message.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/send/message.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import { ChainName } from '@hyperlane-xyz/sdk';
|
|
1
|
+
import { ChainName, TokenType } from '@hyperlane-xyz/sdk';
|
|
2
2
|
import { Address } from '@hyperlane-xyz/utils';
|
|
3
|
-
export declare function sendTestTransfer({ key, chainConfigPath, coreArtifactsPath, origin, destination, routerAddress, wei, recipient, timeoutSec, }: {
|
|
3
|
+
export declare function sendTestTransfer({ key, chainConfigPath, coreArtifactsPath, origin, destination, routerAddress, tokenType, wei, recipient, timeoutSec, skipWaitForDelivery, }: {
|
|
4
4
|
key: string;
|
|
5
5
|
chainConfigPath: string;
|
|
6
6
|
coreArtifactsPath: string;
|
|
7
7
|
origin: ChainName;
|
|
8
8
|
destination: ChainName;
|
|
9
9
|
routerAddress: Address;
|
|
10
|
+
tokenType: TokenType;
|
|
10
11
|
wei: string;
|
|
11
12
|
recipient?: string;
|
|
12
13
|
timeoutSec: number;
|
|
14
|
+
skipWaitForDelivery: boolean;
|
|
13
15
|
}): Promise<void>;
|
|
14
16
|
//# sourceMappingURL=transfer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../../src/send/transfer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../../src/send/transfer.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,SAAS,EAMT,SAAS,EACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAW,MAAM,sBAAsB,CAAC;AAcxD,wBAAsB,gBAAgB,CAAC,EACrC,GAAG,EACH,eAAe,EACf,iBAAiB,EACjB,MAAM,EACN,WAAW,EACX,aAAa,EACb,SAAS,EACT,GAAG,EACH,SAAS,EACT,UAAU,EACV,mBAAmB,GACpB,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,iBA8CA"}
|
|
@@ -1,21 +1,29 @@
|
|
|
1
|
-
import { ethers } from 'ethers';
|
|
2
|
-
import { ERC20__factory,
|
|
3
|
-
import { HyperlaneCore, MultiProtocolProvider, } from '@hyperlane-xyz/sdk';
|
|
1
|
+
import { BigNumber, ethers } from 'ethers';
|
|
2
|
+
import { ERC20__factory, HypERC20Collateral__factory, } from '@hyperlane-xyz/core';
|
|
3
|
+
import { EvmHypCollateralAdapter, HyperlaneCore, MultiProtocolProvider, TokenType, } from '@hyperlane-xyz/sdk';
|
|
4
4
|
import { timeout } from '@hyperlane-xyz/utils';
|
|
5
|
-
import { logBlue, logGreen } from '../../logger.js';
|
|
5
|
+
import { log, logBlue, logGreen } from '../../logger.js';
|
|
6
6
|
import { readDeploymentArtifacts } from '../config/artifacts.js';
|
|
7
7
|
import { MINIMUM_TEST_SEND_BALANCE } from '../consts.js';
|
|
8
|
-
import {
|
|
8
|
+
import { getContextWithSigner, getMergedContractAddresses, } from '../context.js';
|
|
9
9
|
import { runPreflightChecks } from '../deploy/utils.js';
|
|
10
|
-
import { assertTokenBalance } from '../utils/balances.js';
|
|
10
|
+
import { assertNativeBalances, assertTokenBalance } from '../utils/balances.js';
|
|
11
11
|
// TODO improve the UX here by making params optional and
|
|
12
12
|
// prompting for missing values
|
|
13
|
-
export async function sendTestTransfer({ key, chainConfigPath, coreArtifactsPath, origin, destination, routerAddress, wei, recipient, timeoutSec, }) {
|
|
14
|
-
const { signer, multiProvider } =
|
|
13
|
+
export async function sendTestTransfer({ key, chainConfigPath, coreArtifactsPath, origin, destination, routerAddress, tokenType, wei, recipient, timeoutSec, skipWaitForDelivery, }) {
|
|
14
|
+
const { signer, multiProvider } = getContextWithSigner(key, chainConfigPath);
|
|
15
15
|
const artifacts = coreArtifactsPath
|
|
16
16
|
? readDeploymentArtifacts(coreArtifactsPath)
|
|
17
17
|
: undefined;
|
|
18
|
-
|
|
18
|
+
if (tokenType === TokenType.collateral) {
|
|
19
|
+
await assertTokenBalance(multiProvider, signer, origin, routerAddress, wei.toString());
|
|
20
|
+
}
|
|
21
|
+
else if (tokenType === TokenType.native) {
|
|
22
|
+
await assertNativeBalances(multiProvider, signer, [origin], wei.toString());
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
throw new Error('Only collateral and native token types are currently supported in the CLI. For synthetic transfers, try the Warp UI.');
|
|
26
|
+
}
|
|
19
27
|
await runPreflightChecks({
|
|
20
28
|
origin,
|
|
21
29
|
remotes: [destination],
|
|
@@ -27,22 +35,24 @@ export async function sendTestTransfer({ key, chainConfigPath, coreArtifactsPath
|
|
|
27
35
|
origin,
|
|
28
36
|
destination,
|
|
29
37
|
routerAddress,
|
|
38
|
+
tokenType,
|
|
30
39
|
wei,
|
|
31
40
|
recipient,
|
|
32
41
|
signer,
|
|
33
42
|
multiProvider,
|
|
34
43
|
artifacts,
|
|
44
|
+
skipWaitForDelivery,
|
|
35
45
|
}), timeoutSec * 1000, 'Timed out waiting for messages to be delivered');
|
|
36
46
|
}
|
|
37
|
-
async function executeDelivery({ origin, destination, routerAddress, wei, recipient, multiProvider, signer, artifacts, }) {
|
|
47
|
+
async function executeDelivery({ origin, destination, routerAddress, tokenType, wei, recipient, multiProvider, signer, artifacts, skipWaitForDelivery, }) {
|
|
38
48
|
const signerAddress = await signer.getAddress();
|
|
39
49
|
recipient || (recipient = signerAddress);
|
|
40
50
|
const mergedContractAddrs = getMergedContractAddresses(artifacts);
|
|
41
51
|
const core = HyperlaneCore.fromAddressesMap(mergedContractAddrs, multiProvider);
|
|
42
52
|
const provider = multiProvider.getProvider(origin);
|
|
43
53
|
const connectedSigner = signer.connect(provider);
|
|
44
|
-
|
|
45
|
-
|
|
54
|
+
if (tokenType === TokenType.collateral) {
|
|
55
|
+
const wrappedToken = await getWrappedToken(routerAddress, provider);
|
|
46
56
|
const token = ERC20__factory.connect(wrappedToken, connectedSigner);
|
|
47
57
|
const approval = await token.allowance(signerAddress, routerAddress);
|
|
48
58
|
if (approval.lt(wei)) {
|
|
@@ -50,28 +60,28 @@ async function executeDelivery({ origin, destination, routerAddress, wei, recipi
|
|
|
50
60
|
await approveTx.wait();
|
|
51
61
|
}
|
|
52
62
|
}
|
|
53
|
-
else {
|
|
54
|
-
// TODO finish support for other types
|
|
55
|
-
// See code in warp UI for an example
|
|
56
|
-
// Requires gas handling
|
|
57
|
-
throw new Error('Sorry, only HypERC20Collateral transfers are currently supported in the CLI');
|
|
58
|
-
}
|
|
59
63
|
// TODO move next section into MultiProtocolTokenApp when it exists
|
|
60
64
|
const adapter = new EvmHypCollateralAdapter(origin, MultiProtocolProvider.fromMultiProvider(multiProvider), { token: routerAddress });
|
|
61
65
|
const destinationDomain = multiProvider.getDomainId(destination);
|
|
62
66
|
const gasPayment = await adapter.quoteGasPayment(destinationDomain);
|
|
67
|
+
const txValue = tokenType === TokenType.native
|
|
68
|
+
? BigNumber.from(gasPayment).add(wei).toString()
|
|
69
|
+
: gasPayment;
|
|
63
70
|
const transferTx = await adapter.populateTransferRemoteTx({
|
|
64
71
|
weiAmountOrId: wei,
|
|
65
72
|
destination: destinationDomain,
|
|
66
73
|
recipient,
|
|
67
|
-
txValue
|
|
74
|
+
txValue,
|
|
68
75
|
});
|
|
69
76
|
const txResponse = await connectedSigner.sendTransaction(transferTx);
|
|
70
|
-
const
|
|
71
|
-
const message = core.getDispatchedMessages(
|
|
77
|
+
const txReceipt = await multiProvider.handleTx(origin, txResponse);
|
|
78
|
+
const message = core.getDispatchedMessages(txReceipt)[0];
|
|
72
79
|
logBlue(`Sent message from ${origin} to ${recipient} on ${destination}.`);
|
|
73
80
|
logBlue(`Message ID: ${message.id}`);
|
|
74
|
-
|
|
81
|
+
if (skipWaitForDelivery)
|
|
82
|
+
return;
|
|
83
|
+
// Max wait 10 minutes
|
|
84
|
+
await core.waitForMessageProcessed(txReceipt, 10000, 60);
|
|
75
85
|
logGreen(`Transfer sent to destination chain!`);
|
|
76
86
|
}
|
|
77
87
|
async function getWrappedToken(address, provider) {
|
|
@@ -81,11 +91,11 @@ async function getWrappedToken(address, provider) {
|
|
|
81
91
|
if (ethers.utils.isAddress(wrappedToken))
|
|
82
92
|
return wrappedToken;
|
|
83
93
|
else
|
|
84
|
-
|
|
94
|
+
throw new Error('Invalid wrapped token address');
|
|
85
95
|
}
|
|
86
96
|
catch (error) {
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
log('Error getting wrapped token', error);
|
|
98
|
+
throw new Error(`Could not get wrapped token from router address ${address}`);
|
|
89
99
|
}
|
|
90
100
|
}
|
|
91
101
|
//# sourceMappingURL=transfer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../../src/send/transfer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../../src/send/transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ChainName } from '@hyperlane-xyz/sdk';
|
|
2
|
+
export declare function checkMessageStatus({ chainConfigPath, coreArtifactsPath, messageId, destination, }: {
|
|
3
|
+
chainConfigPath: string;
|
|
4
|
+
coreArtifactsPath: string;
|
|
5
|
+
messageId: string;
|
|
6
|
+
destination: ChainName;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/status/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,MAAM,oBAAoB,CAAC;AAM9D,wBAAsB,kBAAkB,CAAC,EACvC,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,WAAW,GACZ,EAAE;IACD,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC;CACxB,iBAmBA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { HyperlaneCore } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { log, logBlue, logGreen } from '../../logger.js';
|
|
3
|
+
import { readDeploymentArtifacts } from '../config/artifacts.js';
|
|
4
|
+
import { getContext, getMergedContractAddresses } from '../context.js';
|
|
5
|
+
export async function checkMessageStatus({ chainConfigPath, coreArtifactsPath, messageId, destination, }) {
|
|
6
|
+
const { multiProvider } = getContext(chainConfigPath);
|
|
7
|
+
const coreArtifacts = coreArtifactsPath
|
|
8
|
+
? readDeploymentArtifacts(coreArtifactsPath)
|
|
9
|
+
: undefined;
|
|
10
|
+
const mergedContractAddrs = getMergedContractAddresses(coreArtifacts);
|
|
11
|
+
const core = HyperlaneCore.fromAddressesMap(mergedContractAddrs, multiProvider);
|
|
12
|
+
const mailbox = core.getContracts(destination).mailbox;
|
|
13
|
+
log(`Checking status of message ${messageId} on ${destination}`);
|
|
14
|
+
const delivered = await mailbox.delivered(messageId);
|
|
15
|
+
if (delivered) {
|
|
16
|
+
logGreen(`Message ${messageId} was delivered`);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
logBlue(`Message ${messageId} was not yet delivered`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/status/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,WAAW,GAMZ;IACC,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,iBAAiB;QACrC,CAAC,CAAC,uBAAuB,CAAC,iBAAiB,CAAC;QAC5C,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,aAAa,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,aAAa,CAAC,gBAAgB,CACzC,mBAAmB,EACnB,aAAa,CACd,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;IACvD,GAAG,CAAC,8BAA8B,SAAS,OAAO,WAAW,EAAE,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,SAAS,EAAE;QACb,QAAQ,CAAC,WAAW,SAAS,gBAAgB,CAAC,CAAC;KAChD;SAAM;QACL,OAAO,CAAC,WAAW,SAAS,wBAAwB,CAAC,CAAC;KACvD;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
|
-
import { ERC20__factory } from '@hyperlane-xyz/
|
|
2
|
+
import { ERC20__factory } from '@hyperlane-xyz/core';
|
|
3
3
|
export async function assertNativeBalances(multiProvider, signer, chains, minBalanceWei) {
|
|
4
4
|
const address = await signer.getAddress();
|
|
5
5
|
const minBalance = ethers.utils.formatEther(minBalanceWei.toString());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../src/utils/balances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../src/utils/balances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,aAA4B,EAC5B,MAAqB,EACrB,MAAmB,EACnB,aAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtE,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACzB,MAAM,UAAU,GAAG,MAAM,aAAa;aACnC,WAAW,CAAC,KAAK,CAAC;aAClB,UAAU,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,gCAAgC,KAAK,cAAc,UAAU,uBAAuB,OAAO,CAAC,QAAQ,EAAE,MAAM,CACvH,CAAC;IACN,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,aAA4B,EAC5B,MAAqB,EACrB,KAAgB,EAChB,KAAc,EACd,aAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,gCAAgC,KAAK,cAAc,KAAK,cAAc,aAAa,2BAA2B,UAAU,CAAC,QAAQ,EAAE,MAAM,CACpJ,CAAC;AACN,CAAC"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { ChainMap, ChainMetadata } from '@hyperlane-xyz/sdk';
|
|
2
|
-
export declare function runOriginAndRemotesSelectionStep(customChains: ChainMap<ChainMetadata>): Promise<{
|
|
3
|
-
origin: string;
|
|
4
|
-
remotes: string[];
|
|
5
|
-
}>;
|
|
6
2
|
export declare function runSingleChainSelectionStep(customChains: ChainMap<ChainMetadata>, message?: string): Promise<string>;
|
|
7
3
|
export declare function runMultiChainSelectionStep(customChains: ChainMap<ChainMetadata>, message?: string): Promise<string[]>;
|
|
8
4
|
//# sourceMappingURL=chains.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../../src/utils/chains.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,QAAQ,EACR,aAAa,EAGd,MAAM,oBAAoB,CAAC;AAQ5B,wBAAsB,
|
|
1
|
+
{"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../../src/utils/chains.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,QAAQ,EACR,aAAa,EAGd,MAAM,oBAAoB,CAAC;AAQ5B,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,QAAQ,CAAC,aAAa,CAAC,EACrC,OAAO,SAAiB,mBAUzB;AAED,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,QAAQ,CAAC,aAAa,CAAC,EACrC,OAAO,SAAkB,qBAW1B"}
|
package/dist/src/utils/chains.js
CHANGED
|
@@ -6,32 +6,27 @@ import { log, logBlue } from '../../logger.js';
|
|
|
6
6
|
// A special value marker to indicate user selected
|
|
7
7
|
// a new chain in the list
|
|
8
8
|
const NEW_CHAIN_MARKER = '__new__';
|
|
9
|
-
export async function runOriginAndRemotesSelectionStep(customChains) {
|
|
10
|
-
const origin = await runSingleChainSelectionStep(customChains, 'Select origin chain (the chain to which you will deploy now)');
|
|
11
|
-
const remotes = await runMultiChainSelectionStep(customChains, 'Select remote chains the origin will send messages to');
|
|
12
|
-
return { origin, remotes };
|
|
13
|
-
}
|
|
14
9
|
export async function runSingleChainSelectionStep(customChains, message = 'Select chain') {
|
|
15
10
|
const choices = getChainChoices(customChains);
|
|
16
|
-
const
|
|
11
|
+
const chain = (await select({
|
|
17
12
|
message,
|
|
18
13
|
choices,
|
|
19
14
|
pageSize: 20,
|
|
20
15
|
}));
|
|
21
|
-
handleNewChain([
|
|
22
|
-
return
|
|
16
|
+
handleNewChain([chain]);
|
|
17
|
+
return chain;
|
|
23
18
|
}
|
|
24
19
|
export async function runMultiChainSelectionStep(customChains, message = 'Select chains') {
|
|
25
20
|
const choices = getChainChoices(customChains);
|
|
26
|
-
const
|
|
21
|
+
const chains = (await checkbox({
|
|
27
22
|
message,
|
|
28
23
|
choices,
|
|
29
24
|
pageSize: 20,
|
|
30
25
|
}));
|
|
31
|
-
handleNewChain(
|
|
32
|
-
if (!
|
|
33
|
-
throw new Error('No
|
|
34
|
-
return
|
|
26
|
+
handleNewChain(chains);
|
|
27
|
+
if (!chains?.length)
|
|
28
|
+
throw new Error('No chains selected');
|
|
29
|
+
return chains;
|
|
35
30
|
}
|
|
36
31
|
function getChainChoices(customChains) {
|
|
37
32
|
const chainsToChoices = (chains) => chains.map((c) => ({ name: c.name, value: c.name }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../src/utils/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAGL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,mDAAmD;AACnD,0BAA0B;AAC1B,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../src/utils/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAGL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,mDAAmD;AACnD,0BAA0B;AAC1B,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,YAAqC,EACrC,OAAO,GAAG,cAAc;IAExB,MAAM,OAAO,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC;QAC1B,OAAO;QACP,OAAO;QACP,QAAQ,EAAE,EAAE;KACb,CAAC,CAAW,CAAC;IACd,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,YAAqC,EACrC,OAAO,GAAG,eAAe;IAEzB,MAAM,OAAO,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC;QAC7B,OAAO;QACP,OAAO;QACP,QAAQ,EAAE,EAAE;KACb,CAAC,CAAa,CAAC;IAChB,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,EAAE,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,YAAqC;IAC5D,MAAM,eAAe,GAAG,CAAC,MAAuB,EAAE,EAAE,CAClD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,GAA8C;QACzD,IAAI,SAAS,CAAC,mBAAmB,CAAC;QAClC,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/C,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,gBAAgB,EAAE;QACvD,IAAI,SAAS,CAAC,oBAAoB,CAAC;QACnC,GAAG,eAAe,CAAC,qBAAqB,CAAC;QACzC,IAAI,SAAS,CAAC,oBAAoB,CAAC;QACnC,GAAG,eAAe,CAAC,qBAAqB,CAAC;KAC1C,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,UAAoB;IAC1C,IAAI,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QACzC,OAAO,CACL,qEAAqE,CACtE,CAAC;QACF,GAAG,CACD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EACrB,KAAK,CAAC,aAAa,CAAC,yBAAyB,CAAC,EAC9C,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAC5C,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC"}
|
|
@@ -3,16 +3,17 @@
|
|
|
3
3
|
# Schema here: https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/main/typescript/sdk/src/metadata/chainMetadataTypes.ts
|
|
4
4
|
---
|
|
5
5
|
anvil1:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
chainId: 31337
|
|
7
|
+
domainId: 31337
|
|
8
|
+
name: anvil1
|
|
9
|
+
protocol: ethereum
|
|
10
|
+
rpcUrls:
|
|
11
|
+
- http: http://127.0.0.1:8545
|
|
12
|
+
nativeToken:
|
|
13
|
+
name: Ether
|
|
14
|
+
symbol: ETH
|
|
15
|
+
decimals: 18
|
|
14
16
|
anvil2:
|
|
15
|
-
# Required fields:
|
|
16
17
|
chainId: 31338
|
|
17
18
|
domainId: 31338
|
|
18
19
|
name: anvil2
|