From aad2c2d1ed79364703a7e93daa2171c73a02a312 Mon Sep 17 00:00:00 2001 From: ljankovic-txfusion <131957285+ljankovic-txfusion@users.noreply.github.com> Date: Wed, 15 Jan 2025 01:51:02 +0100 Subject: [PATCH] fix(cli): missing single chain resolver (#5156) ### Description - Removed `SingleChainResolver` in favor of a single MultiChainResolver class - Fixed chain resolution logic to properly handle: - Single chain selection via `argv.chain` - Multiple chain selection via `argv.chains` - Added proper handling for empty chain arrays to prevent unexpected behavior ### Drive-by changes ### Related issues None ### Backward compatibility Yes ### Testing Manual --------- Co-authored-by: Morteza Shojaei <31728528+mortezashojaei@users.noreply.github.com> Co-authored-by: mshojaei-txfusion <138107084+mshojaei-txfusion@users.noreply.github.com> --- .changeset/violet-knives-drop.md | 5 ++++ .../strategies/chain/MultiChainResolver.ts | 14 +++++++---- .../strategies/chain/SingleChainResolver.ts | 25 ------------------- 3 files changed, 14 insertions(+), 30 deletions(-) create mode 100644 .changeset/violet-knives-drop.md delete mode 100644 typescript/cli/src/context/strategies/chain/SingleChainResolver.ts diff --git a/.changeset/violet-knives-drop.md b/.changeset/violet-knives-drop.md new file mode 100644 index 0000000000..24320605a0 --- /dev/null +++ b/.changeset/violet-knives-drop.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/cli': minor +--- + +Fixing the chain resolver checks and handling for argv.chain diff --git a/typescript/cli/src/context/strategies/chain/MultiChainResolver.ts b/typescript/cli/src/context/strategies/chain/MultiChainResolver.ts index 8563e9e5d9..2bdd6f3d1a 100644 --- a/typescript/cli/src/context/strategies/chain/MultiChainResolver.ts +++ b/typescript/cli/src/context/strategies/chain/MultiChainResolver.ts @@ -138,16 +138,20 @@ export class MultiChainResolver implements ChainResolver { chains.push(argv.destination); } - if (!argv.chains) { - return Array.from( - new Set([...chains, ...this.getEvmChains(multiProvider)]), - ); + if (argv.chain) { + chains.push(argv.chain); + } + + if (!argv.chains && chains.length === 0) { + return Array.from(this.getEvmChains(multiProvider)); } return Array.from( new Set([ ...chains, - ...argv.chains.split(',').map((item: string) => item.trim()), + ...(argv.chains + ? argv.chains.split(',').map((item: string) => item.trim()) + : []), ]), ); } diff --git a/typescript/cli/src/context/strategies/chain/SingleChainResolver.ts b/typescript/cli/src/context/strategies/chain/SingleChainResolver.ts deleted file mode 100644 index 8dddaf3c4a..0000000000 --- a/typescript/cli/src/context/strategies/chain/SingleChainResolver.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ChainMap, ChainName } from '@hyperlane-xyz/sdk'; - -import { runSingleChainSelectionStep } from '../../../utils/chains.js'; - -import { ChainResolver } from './types.js'; - -/** - * @title SingleChainResolver - * @notice Strategy implementation for managing single-chain operations - * @dev Primarily used for operations like 'core:apply' and 'warp:read' - */ -export class SingleChainResolver implements ChainResolver { - /** - * @notice Determines the chain to be used for signing operations - * @dev Either uses the chain specified in argv or prompts for interactive selection - */ - async resolveChains(argv: ChainMap): Promise { - argv.chain ||= await runSingleChainSelectionStep( - argv.context.chainMetadata, - 'Select chain to connect:', - ); - - return [argv.chain]; // Explicitly return as single-item array - } -}