@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/core.js
CHANGED
|
@@ -1,97 +1,105 @@
|
|
|
1
1
|
import { confirm } from '@inquirer/prompts';
|
|
2
2
|
import { ethers } from 'ethers';
|
|
3
|
-
import { GasOracleContractType,
|
|
4
|
-
import { objFilter, objMerge } from '@hyperlane-xyz/utils';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { readHookConfig } from '../config/hooks.js';
|
|
3
|
+
import { GasOracleContractType, HyperlaneCore, HyperlaneCoreDeployer, HyperlaneIsmFactory, HyperlaneProxyFactoryDeployer, IsmType, buildAgentConfig, buildAggregationIsmConfigs, defaultMultisigConfigs, multisigIsmVerificationCost, serializeContractsMap, } from '@hyperlane-xyz/sdk';
|
|
4
|
+
import { objFilter, objMap, objMerge } from '@hyperlane-xyz/utils';
|
|
5
|
+
import { presetHookConfigs, readHooksConfigMap } from '../config/hooks.js';
|
|
6
|
+
import { readIsmConfig } from '../config/ism.js';
|
|
8
7
|
import { readMultisigConfig } from '../config/multisig.js';
|
|
9
8
|
import { MINIMUM_CORE_DEPLOY_GAS } from '../consts.js';
|
|
10
|
-
import {
|
|
9
|
+
import { log, logBlue, logBoldUnderlinedRed, logGray, logGreen, logRed, } from '../logger.js';
|
|
11
10
|
import { runMultiChainSelectionStep } from '../utils/chains.js';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
11
|
+
import { runFileSelectionStep, writeJson } from '../utils/files.js';
|
|
12
|
+
import { completeDeploy, isISMConfig, isZODISMConfig, prepareDeploy, runPreflightChecksForChains, } from './utils.js';
|
|
13
|
+
const CONTRACT_CACHE_EXCLUSIONS = ['interchainGasPaymaster'];
|
|
14
|
+
/**
|
|
15
|
+
* Executes the core deploy command.
|
|
16
|
+
*/
|
|
17
|
+
export async function runCoreDeploy({ context, chains, ismConfigPath, hookConfigPath, agentOutPath, }) {
|
|
18
|
+
const { chainMetadata, signer, dryRunChain, skipConfirmation } = context;
|
|
19
|
+
if (dryRunChain)
|
|
20
|
+
chains = [dryRunChain];
|
|
21
|
+
else if (!chains?.length) {
|
|
22
|
+
if (skipConfirmation)
|
|
23
|
+
throw new Error('No chains provided');
|
|
24
|
+
chains = await runMultiChainSelectionStep(chainMetadata, 'Select chains to connect:', true);
|
|
19
25
|
}
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
const result = await runIsmStep(chains, skipConfirmation, ismConfigPath);
|
|
27
|
+
// we can either specify the full ISM config or just the multisig config
|
|
28
|
+
const isIsmConfig = isISMConfig(result);
|
|
29
|
+
const ismConfigs = isIsmConfig ? result : undefined;
|
|
30
|
+
const multisigConfigs = isIsmConfig
|
|
31
|
+
? defaultMultisigConfigs
|
|
32
|
+
: result;
|
|
33
|
+
const hooksConfig = await runHookStep(chains, hookConfigPath);
|
|
24
34
|
const deploymentParams = {
|
|
35
|
+
context,
|
|
25
36
|
chains,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
outPath,
|
|
31
|
-
skipConfirmation,
|
|
37
|
+
ismConfigs,
|
|
38
|
+
multisigConfigs,
|
|
39
|
+
hooksConfig,
|
|
40
|
+
agentOutPath,
|
|
32
41
|
};
|
|
33
42
|
await runDeployPlanStep(deploymentParams);
|
|
34
43
|
await runPreflightChecksForChains({
|
|
35
44
|
...deploymentParams,
|
|
36
45
|
minGas: MINIMUM_CORE_DEPLOY_GAS,
|
|
37
46
|
});
|
|
47
|
+
const userAddress = await signer.getAddress();
|
|
48
|
+
const initialBalances = await prepareDeploy(context, userAddress, chains);
|
|
38
49
|
await executeDeploy(deploymentParams);
|
|
50
|
+
await completeDeploy(context, 'core', initialBalances, userAddress, chains);
|
|
39
51
|
}
|
|
40
|
-
async function
|
|
41
|
-
if (!artifactsPath) {
|
|
42
|
-
logBlue('\n', 'Deployments can be totally new or can use some existing contract addresses.');
|
|
43
|
-
const isResume = await confirm({
|
|
44
|
-
message: 'Do you want use some existing contract addresses?',
|
|
45
|
-
});
|
|
46
|
-
if (!isResume)
|
|
47
|
-
return undefined;
|
|
48
|
-
artifactsPath = await runFileSelectionStep('./artifacts', 'contract artifacts', 'core-deployment');
|
|
49
|
-
}
|
|
50
|
-
const artifacts = readDeploymentArtifacts(artifactsPath);
|
|
51
|
-
const artifactChains = Object.keys(artifacts).filter((c) => selectedChains.includes(c));
|
|
52
|
-
log(`Found existing artifacts for chains: ${artifactChains.join(', ')}`);
|
|
53
|
-
return artifacts;
|
|
54
|
-
}
|
|
55
|
-
async function runIsmStep(selectedChains, ismConfigPath) {
|
|
52
|
+
async function runIsmStep(selectedChains, skipConfirmation, ismConfigPath) {
|
|
56
53
|
if (!ismConfigPath) {
|
|
57
54
|
logBlue('\n', 'Hyperlane instances requires an Interchain Security Module (ISM).');
|
|
58
|
-
logGray('
|
|
55
|
+
logGray('Example config: https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/main/cli/typescript/cli/examples/ism.yaml');
|
|
56
|
+
if (skipConfirmation)
|
|
57
|
+
throw new Error('ISM config required');
|
|
59
58
|
ismConfigPath = await runFileSelectionStep('./configs', 'ISM config', 'ism');
|
|
60
59
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
60
|
+
const isAdvancedIsm = isZODISMConfig(ismConfigPath);
|
|
61
|
+
// separate flow for 'ism' and 'ism-advanced' options
|
|
62
|
+
if (isAdvancedIsm) {
|
|
63
|
+
logBoldUnderlinedRed('WARNING: YOU ARE DEPLOYING WITH AN ADVANCED ISM CONFIG');
|
|
64
|
+
logRed('Advanced ISM configs require knowledge of different ISM types and how they work together topologically. If possible, use the basic ISM configs are recommended.');
|
|
65
|
+
const ismConfig = readIsmConfig(ismConfigPath);
|
|
66
|
+
const requiredIsms = objFilter(ismConfig, (chain, config) => selectedChains.includes(chain));
|
|
67
|
+
// selected chains - (user configs + default configs) = missing config
|
|
68
|
+
const missingConfigs = selectedChains.filter((c) => !Object.keys(ismConfig).includes(c));
|
|
69
|
+
if (missingConfigs.length > 0) {
|
|
70
|
+
throw new Error(`Missing advanced ISM config for one or more chains: ${missingConfigs.join(', ')}`);
|
|
71
|
+
}
|
|
72
|
+
log(`Found configs for chains: ${selectedChains.join(', ')}`);
|
|
73
|
+
return requiredIsms;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const multisigConfigs = {
|
|
77
|
+
...defaultMultisigConfigs,
|
|
78
|
+
...readMultisigConfig(ismConfigPath),
|
|
79
|
+
};
|
|
80
|
+
const requiredMultisigs = objFilter(multisigConfigs, (chain, config) => selectedChains.includes(chain));
|
|
81
|
+
// selected chains - (user configs + default configs) = missing config
|
|
82
|
+
const missingConfigs = selectedChains.filter((c) => !Object.keys(requiredMultisigs).includes(c));
|
|
83
|
+
if (missingConfigs.length > 0) {
|
|
84
|
+
throw new Error(`Missing ISM config for one or more chains: ${missingConfigs.join(', ')}`);
|
|
85
|
+
}
|
|
86
|
+
log(`Found configs for chains: ${selectedChains.join(', ')}`);
|
|
87
|
+
return requiredMultisigs;
|
|
71
88
|
}
|
|
72
|
-
log(`Found configs for chains: ${selectedChains.join(', ')}`);
|
|
73
|
-
return requiredMultisigs;
|
|
74
89
|
}
|
|
75
90
|
async function runHookStep(_selectedChains, hookConfigPath) {
|
|
76
|
-
if (
|
|
77
|
-
return;
|
|
78
|
-
|
|
79
|
-
if (!hookConfigPath) {
|
|
80
|
-
logBlue('\n', 'Hyperlane instances can take an Interchain Security Module (ISM).');
|
|
81
|
-
hookConfigPath = await runFileSelectionStep('./configs/', 'Hook config', 'hook');
|
|
82
|
-
}
|
|
83
|
-
const configs = readHookConfig(hookConfigPath);
|
|
84
|
-
if (!configs)
|
|
85
|
-
return;
|
|
86
|
-
log(`Found hook configs for chains: ${Object.keys(configs).join(', ')}`);
|
|
91
|
+
if (!hookConfigPath)
|
|
92
|
+
return {};
|
|
93
|
+
return readHooksConfigMap(hookConfigPath);
|
|
87
94
|
}
|
|
88
|
-
async function runDeployPlanStep({
|
|
95
|
+
async function runDeployPlanStep({ context, chains }) {
|
|
96
|
+
const { signer, skipConfirmation } = context;
|
|
89
97
|
const address = await signer.getAddress();
|
|
90
98
|
logBlue('\nDeployment plan');
|
|
91
99
|
logGray('===============');
|
|
92
100
|
log(`Transaction signer and owner of new contracts will be ${address}`);
|
|
93
101
|
log(`Deploying to ${chains.join(', ')}`);
|
|
94
|
-
log(`There are several contracts required for each chain but contracts in
|
|
102
|
+
log(`There are several contracts required for each chain but contracts in your provided registries will be skipped`);
|
|
95
103
|
if (skipConfirmation)
|
|
96
104
|
return;
|
|
97
105
|
const isConfirmed = await confirm({
|
|
@@ -100,117 +108,82 @@ async function runDeployPlanStep({ chains, signer, artifacts, skipConfirmation,
|
|
|
100
108
|
if (!isConfirmed)
|
|
101
109
|
throw new Error('Deployment cancelled');
|
|
102
110
|
}
|
|
103
|
-
async function executeDeploy({
|
|
111
|
+
async function executeDeploy({ context, chains, ismConfigs = {}, multisigConfigs = {}, hooksConfig = {}, agentOutPath, }) {
|
|
104
112
|
logBlue('All systems ready, captain! Beginning deployment...');
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
]);
|
|
113
|
+
const { signer, multiProvider, registry } = context;
|
|
114
|
+
let chainAddresses = await registry.getAddresses();
|
|
115
|
+
chainAddresses = filterAddressesToCache(chainAddresses);
|
|
109
116
|
const owner = await signer.getAddress();
|
|
110
|
-
|
|
117
|
+
let artifacts = {};
|
|
111
118
|
// 1. Deploy ISM factories to all deployable chains that don't have them.
|
|
112
119
|
logBlue('Deploying ISM factory contracts');
|
|
113
120
|
const ismFactoryDeployer = new HyperlaneProxyFactoryDeployer(multiProvider);
|
|
114
|
-
ismFactoryDeployer.cacheAddressesMap(
|
|
121
|
+
ismFactoryDeployer.cacheAddressesMap(chainAddresses);
|
|
115
122
|
const ismFactoryConfig = chains.reduce((chainMap, curr) => {
|
|
116
123
|
chainMap[curr] = {};
|
|
117
124
|
return chainMap;
|
|
118
125
|
}, {});
|
|
119
126
|
const ismFactoryContracts = await ismFactoryDeployer.deploy(ismFactoryConfig);
|
|
120
|
-
artifacts =
|
|
127
|
+
artifacts = await updateChainAddresses(registry, ismFactoryContracts, artifacts);
|
|
121
128
|
logGreen('ISM factory contracts deployed');
|
|
122
129
|
// Build an IsmFactory that covers all chains so that we can
|
|
123
130
|
// use it to deploy ISMs to remote chains.
|
|
124
|
-
const ismFactory = HyperlaneIsmFactory.fromAddressesMap(
|
|
125
|
-
// 3.
|
|
126
|
-
logBlue('Deploying ISMs');
|
|
127
|
-
const ismContracts = {};
|
|
131
|
+
const ismFactory = HyperlaneIsmFactory.fromAddressesMap(chainAddresses, multiProvider);
|
|
132
|
+
// 3. Construct ISM configs for all deployable chains
|
|
128
133
|
const defaultIsms = {};
|
|
129
134
|
for (const ismOrigin of chains) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
multisigIsm: await ismFactory.deploy(ismOrigin, ismConfig),
|
|
134
|
-
};
|
|
135
|
-
defaultIsms[ismOrigin] = ismContracts[ismOrigin].multisigIsm.address;
|
|
135
|
+
defaultIsms[ismOrigin] =
|
|
136
|
+
ismConfigs[ismOrigin] ??
|
|
137
|
+
buildIsmConfig(owner, ismOrigin, chains, multisigConfigs);
|
|
136
138
|
}
|
|
137
|
-
artifacts = writeMergedAddresses(contractsFilePath, artifacts, ismContracts);
|
|
138
|
-
logGreen('ISM contracts deployed');
|
|
139
139
|
// 4. Deploy core contracts to chains
|
|
140
140
|
logBlue(`Deploying core contracts to ${chains.join(', ')}`);
|
|
141
141
|
const coreDeployer = new HyperlaneCoreDeployer(multiProvider, ismFactory);
|
|
142
|
-
coreDeployer.cacheAddressesMap(
|
|
143
|
-
const coreConfigs = buildCoreConfigMap(owner, chains, defaultIsms,
|
|
142
|
+
coreDeployer.cacheAddressesMap(chainAddresses);
|
|
143
|
+
const coreConfigs = buildCoreConfigMap(owner, chains, defaultIsms, hooksConfig);
|
|
144
144
|
const coreContracts = await coreDeployer.deploy(coreConfigs);
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
artifacts =
|
|
154
|
-
logGreen('
|
|
155
|
-
log(
|
|
156
|
-
await writeAgentConfig(
|
|
157
|
-
logGreen('Agent configs written');
|
|
145
|
+
// 4.5 recover the toplevel ISM address
|
|
146
|
+
const isms = {};
|
|
147
|
+
for (const chain of chains) {
|
|
148
|
+
isms[chain] = {
|
|
149
|
+
interchainSecurityModule: coreDeployer.cachedAddresses[chain].interchainSecurityModule,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
artifacts = objMerge(artifacts, isms);
|
|
153
|
+
artifacts = await updateChainAddresses(registry, coreContracts, artifacts);
|
|
154
|
+
logGreen('✅ Core contracts deployed');
|
|
155
|
+
log(JSON.stringify(artifacts, null, 2));
|
|
156
|
+
await writeAgentConfig(context, artifacts, chains, agentOutPath);
|
|
158
157
|
logBlue('Deployment is complete!');
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
}
|
|
159
|
+
function filterAddressesToCache(addressesMap) {
|
|
160
|
+
// Filter out the certain addresses that must always be
|
|
161
|
+
// deployed when deploying to a PI chain.
|
|
162
|
+
// See https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/2983
|
|
163
|
+
// And https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/3183
|
|
164
|
+
return objMap(addressesMap, (_chain, addresses) => objFilter(addresses, (contract, _address) => !CONTRACT_CACHE_EXCLUSIONS.includes(contract)));
|
|
161
165
|
}
|
|
162
166
|
function buildIsmConfig(owner, local, chains, multisigIsmConfigs) {
|
|
163
|
-
const
|
|
167
|
+
const aggregationIsmConfigs = buildAggregationIsmConfigs(local, chains, multisigIsmConfigs);
|
|
164
168
|
return {
|
|
165
169
|
owner,
|
|
166
170
|
type: IsmType.ROUTING,
|
|
167
|
-
domains:
|
|
171
|
+
domains: aggregationIsmConfigs,
|
|
168
172
|
};
|
|
169
173
|
}
|
|
170
|
-
function buildCoreConfigMap(owner, chains, defaultIsms,
|
|
174
|
+
function buildCoreConfigMap(owner, chains, defaultIsms, hooksConfig) {
|
|
171
175
|
return chains.reduce((config, chain) => {
|
|
172
|
-
const
|
|
176
|
+
const hooks = hooksConfig[chain] ?? presetHookConfigs(owner);
|
|
173
177
|
config[chain] = {
|
|
174
178
|
owner,
|
|
175
179
|
defaultIsm: defaultIsms[chain],
|
|
176
|
-
defaultHook:
|
|
177
|
-
|
|
178
|
-
hooks: [
|
|
179
|
-
{
|
|
180
|
-
type: HookType.MERKLE_TREE,
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
type: HookType.INTERCHAIN_GAS_PAYMASTER,
|
|
184
|
-
...igpConfig[chain],
|
|
185
|
-
},
|
|
186
|
-
],
|
|
187
|
-
},
|
|
188
|
-
requiredHook: {
|
|
189
|
-
type: HookType.PROTOCOL_FEE,
|
|
190
|
-
maxProtocolFee: ethers.utils.parseUnits('1', 'gwei'),
|
|
191
|
-
protocolFee: ethers.utils.parseUnits('0', 'wei'),
|
|
192
|
-
beneficiary: owner,
|
|
193
|
-
owner,
|
|
194
|
-
},
|
|
180
|
+
defaultHook: hooks.default,
|
|
181
|
+
requiredHook: hooks.required,
|
|
195
182
|
};
|
|
196
183
|
return config;
|
|
197
184
|
}, {});
|
|
198
185
|
}
|
|
199
|
-
function
|
|
200
|
-
return chains.reduce((config, chain) => {
|
|
201
|
-
const interchainSecurityModule =
|
|
202
|
-
// TODO revisit assumption that multisigIsm is always the ISM
|
|
203
|
-
addressesMap[chain].multisigIsm ??
|
|
204
|
-
addressesMap[chain].interchainSecurityModule ??
|
|
205
|
-
ethers.constants.AddressZero;
|
|
206
|
-
if (interchainSecurityModule === ethers.constants.AddressZero) {
|
|
207
|
-
logRed('Error: No ISM for TestRecipient, deploying with zero address');
|
|
208
|
-
}
|
|
209
|
-
config[chain] = { interchainSecurityModule };
|
|
210
|
-
return config;
|
|
211
|
-
}, {});
|
|
212
|
-
}
|
|
213
|
-
function buildIgpConfigMap(owner, chains, multisigConfigs) {
|
|
186
|
+
export function buildIgpConfigMap(owner, chains, multisigConfigs) {
|
|
214
187
|
const configMap = {};
|
|
215
188
|
for (const chain of chains) {
|
|
216
189
|
const overhead = {};
|
|
@@ -218,7 +191,14 @@ function buildIgpConfigMap(owner, chains, multisigConfigs) {
|
|
|
218
191
|
for (const remote of chains) {
|
|
219
192
|
if (chain === remote)
|
|
220
193
|
continue;
|
|
221
|
-
|
|
194
|
+
// TODO: accurate estimate of gas from ChainMap<ISMConfig>
|
|
195
|
+
const threshold = multisigConfigs[remote]
|
|
196
|
+
? multisigConfigs[remote].threshold
|
|
197
|
+
: 2;
|
|
198
|
+
const validatorsLength = multisigConfigs[remote]
|
|
199
|
+
? multisigConfigs[remote].validators.length
|
|
200
|
+
: 3;
|
|
201
|
+
overhead[remote] = multisigIsmVerificationCost(threshold, validatorsLength);
|
|
222
202
|
gasOracleType[remote] = GasOracleContractType.StorageGasOracle;
|
|
223
203
|
}
|
|
224
204
|
configMap[chain] = {
|
|
@@ -231,28 +211,44 @@ function buildIgpConfigMap(owner, chains, multisigConfigs) {
|
|
|
231
211
|
}
|
|
232
212
|
return configMap;
|
|
233
213
|
}
|
|
234
|
-
function
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
214
|
+
async function updateChainAddresses(registry, newContracts, otherAddresses) {
|
|
215
|
+
let newAddresses = serializeContractsMap(newContracts);
|
|
216
|
+
// The HyperlaneCoreDeployer is returning a nested object with ISM addresses
|
|
217
|
+
// from other chains, which don't need to be in the artifacts atm.
|
|
218
|
+
newAddresses = objMap(newAddresses, (_, newChainAddresses) => {
|
|
219
|
+
// For each chain in the addresses chainmap, filter the values to those that are just strings
|
|
220
|
+
return objFilter(newChainAddresses, (_, value) => typeof value === 'string');
|
|
221
|
+
});
|
|
222
|
+
const mergedAddresses = objMerge(otherAddresses, newAddresses);
|
|
223
|
+
for (const chainName of Object.keys(newContracts)) {
|
|
224
|
+
await registry.updateChain({
|
|
225
|
+
chainName,
|
|
226
|
+
addresses: mergedAddresses[chainName],
|
|
227
|
+
});
|
|
228
|
+
}
|
|
238
229
|
return mergedAddresses;
|
|
239
230
|
}
|
|
240
|
-
async function writeAgentConfig(
|
|
241
|
-
|
|
242
|
-
|
|
231
|
+
async function writeAgentConfig(context, artifacts, chains, outPath) {
|
|
232
|
+
if (context.isDryRun)
|
|
233
|
+
return;
|
|
234
|
+
log('Writing agent configs');
|
|
235
|
+
const { multiProvider, registry } = context;
|
|
236
|
+
const startBlocks = {};
|
|
237
|
+
const core = HyperlaneCore.fromAddressesMap(artifacts, multiProvider);
|
|
243
238
|
for (const chain of chains) {
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
startBlocks[chain] = await multiProvider
|
|
247
|
-
.getProvider(chain)
|
|
248
|
-
.getBlockNumber();
|
|
239
|
+
const mailbox = core.getContracts(chain).mailbox;
|
|
240
|
+
startBlocks[chain] = (await mailbox.deployedBlock()).toNumber();
|
|
249
241
|
}
|
|
250
|
-
const
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
242
|
+
const chainAddresses = await registry.getAddresses();
|
|
243
|
+
for (const chain of chains) {
|
|
244
|
+
if (!chainAddresses[chain].interchainGasPaymaster) {
|
|
245
|
+
chainAddresses[chain].interchainGasPaymaster =
|
|
246
|
+
ethers.constants.AddressZero;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const agentConfig = buildAgentConfig(chains, // Use only the chains that were deployed to
|
|
250
|
+
multiProvider, chainAddresses, startBlocks);
|
|
251
|
+
writeJson(outPath, agentConfig);
|
|
252
|
+
logGreen('Agent configs written');
|
|
257
253
|
}
|
|
258
254
|
//# sourceMappingURL=core.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/deploy/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/deploy/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { MultiProvider } from '@hyperlane-xyz/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Forks a provided network onto MultiProvider
|
|
4
|
+
* @param multiProvider the MultiProvider to be prepared
|
|
5
|
+
* @param chains the chain selection passed-in by the user
|
|
6
|
+
*/
|
|
7
|
+
export declare function forkNetworkToMultiProvider(multiProvider: MultiProvider, chain: string): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Ensures an anvil node is running locally.
|
|
10
|
+
*/
|
|
11
|
+
export declare function verifyAnvil(): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Evaluates if an error is related to the current dry-run.
|
|
14
|
+
* @param error the thrown error
|
|
15
|
+
* @param dryRun the chain name to execute the dry-run on
|
|
16
|
+
*/
|
|
17
|
+
export declare function evaluateIfDryRunFailure(error: any, dryRun: string): void;
|
|
18
|
+
export declare function completeDryRun(command: string): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=dry-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../../../src/deploy/dry-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EAId,MAAM,oBAAoB,CAAC;AAO5B;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,MAAM,iBAOd;AAED;;GAEG;AACH,wBAAsB,WAAW,kBAahC;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,QAKjE;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,iBAInD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ANVIL_RPC_METHODS, getLocalProvider, resetFork, setFork, } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { logGray, logGreen, warnYellow } from '../logger.js';
|
|
3
|
+
import { ENV } from '../utils/env.js';
|
|
4
|
+
import { toUpperCamelCase } from './utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* Forks a provided network onto MultiProvider
|
|
7
|
+
* @param multiProvider the MultiProvider to be prepared
|
|
8
|
+
* @param chains the chain selection passed-in by the user
|
|
9
|
+
*/
|
|
10
|
+
export async function forkNetworkToMultiProvider(multiProvider, chain) {
|
|
11
|
+
multiProvider = multiProvider.extendChainMetadata({
|
|
12
|
+
[chain]: { blocks: { confirmations: 0 } },
|
|
13
|
+
});
|
|
14
|
+
await setFork(multiProvider, chain);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Ensures an anvil node is running locally.
|
|
18
|
+
*/
|
|
19
|
+
export async function verifyAnvil() {
|
|
20
|
+
logGray('🔎 Verifying anvil node is running...');
|
|
21
|
+
const provider = getLocalProvider(ENV.ANVIL_IP_ADDR, ENV.ANVIL_PORT);
|
|
22
|
+
try {
|
|
23
|
+
await provider.send(ANVIL_RPC_METHODS.NODE_INFO, []);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error.message.includes('missing response'))
|
|
27
|
+
throw new Error(`No active anvil node detected.
|
|
28
|
+
\tPlease run \`anvil\` in a separate instance.`);
|
|
29
|
+
}
|
|
30
|
+
logGreen('✅ Successfully verified anvil node is running');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Evaluates if an error is related to the current dry-run.
|
|
34
|
+
* @param error the thrown error
|
|
35
|
+
* @param dryRun the chain name to execute the dry-run on
|
|
36
|
+
*/
|
|
37
|
+
export function evaluateIfDryRunFailure(error, dryRun) {
|
|
38
|
+
if (dryRun && error.message.includes('call revert exception'))
|
|
39
|
+
warnYellow('⛔️ [dry-run] The current RPC may not support forking. Please consider using a different RPC provider.');
|
|
40
|
+
}
|
|
41
|
+
export async function completeDryRun(command) {
|
|
42
|
+
await resetFork();
|
|
43
|
+
logGreen(`✅ ${toUpperCamelCase(command)} dry-run completed successfully`);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=dry-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../../src/deploy/dry-run.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,gBAAgB,EAChB,SAAS,EACT,OAAO,GACR,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,aAA4B,EAC5B,KAAa;IAEb,aAAa,GAAG,aAAa,CAAC,mBAAmB,CAAC;QAChD,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE;KAC1C,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,OAAO,CAAC,uCAAuC,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC;+CACyB,CAAC,CAAC;IAC/C,CAAC;IAED,QAAQ,CAAC,+CAA+C,CAAC,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAU,EAAE,MAAc;IAChE,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC3D,UAAU,CACR,uGAAuG,CACxG,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,MAAM,SAAS,EAAE,CAAC;IAElB,QAAQ,CAAC,KAAK,gBAAgB,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ChainName,
|
|
3
|
-
|
|
1
|
+
import { BigNumber } from 'ethers';
|
|
2
|
+
import { ChainMap, ChainName, IsmConfig, MultisigConfig } from '@hyperlane-xyz/sdk';
|
|
3
|
+
import { Address } from '@hyperlane-xyz/utils';
|
|
4
|
+
import { WriteCommandContext } from '../context/types.js';
|
|
5
|
+
export declare function runPreflightChecks({ context, origin, remotes, minGas, chainsToGasCheck, }: {
|
|
6
|
+
context: WriteCommandContext;
|
|
4
7
|
origin: ChainName;
|
|
5
8
|
remotes: ChainName[];
|
|
6
|
-
signer: ethers.Signer;
|
|
7
|
-
multiProvider: MultiProvider;
|
|
8
9
|
minGas: string;
|
|
10
|
+
chainsToGasCheck?: ChainName[];
|
|
9
11
|
}): Promise<void>;
|
|
10
|
-
export declare function runPreflightChecksForChains({
|
|
12
|
+
export declare function runPreflightChecksForChains({ context, chains, minGas, chainsToGasCheck, }: {
|
|
13
|
+
context: WriteCommandContext;
|
|
11
14
|
chains: ChainName[];
|
|
12
|
-
signer: ethers.Signer;
|
|
13
|
-
multiProvider: MultiProvider;
|
|
14
15
|
minGas: string;
|
|
16
|
+
chainsToGasCheck?: ChainName[];
|
|
15
17
|
}): Promise<void>;
|
|
18
|
+
export declare function isISMConfig(config: ChainMap<MultisigConfig> | ChainMap<IsmConfig>): boolean;
|
|
19
|
+
export declare function isZODISMConfig(filepath: string): boolean;
|
|
20
|
+
export declare function prepareDeploy(context: WriteCommandContext, userAddress: Address, chains: ChainName[]): Promise<Record<string, BigNumber>>;
|
|
21
|
+
export declare function completeDeploy(context: WriteCommandContext, command: string, initialBalances: Record<string, BigNumber>, userAddress: Address, chains: ChainName[]): Promise<void>;
|
|
22
|
+
export declare function toUpperCamelCase(string: string): string;
|
|
16
23
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/deploy/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/deploy/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,QAAQ,CAAC;AAE3C,OAAO,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,cAAc,EAEf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAgB,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQ1D,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,MAAM,EACN,OAAO,EACP,MAAM,EACN,gBAAgB,GACjB,EAAE;IACD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAC;CAChC,iBAgBA;AAED,wBAAsB,2BAA2B,CAAC,EAChD,OAAO,EACP,MAAM,EACN,MAAM,EACN,gBAAgB,GACjB,EAAE;IACD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IAGf,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAC;CAChC,iBAuBA;AAGD,wBAAgB,WAAW,CACzB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,GACrD,OAAO,CAET;AAGD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,SAAS,EAAE,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAapC;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAC1C,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,SAAS,EAAE,iBAqBpB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,UAE9C"}
|