From 4bebce5b0a03e7a81f834fa79029c6cdfba310d0 Mon Sep 17 00:00:00 2001 From: Derek Rein Date: Tue, 3 Mar 2026 08:51:29 +0700 Subject: [PATCH] fix: resolve shorthand chain names for WalletConnect connect `--chain solana` was not resolving to the full CAIP-2 chain ID (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp), causing session proposals to fall back to EVM-only namespaces. Solana wallets (Jupiter, Phantom) correctly rejected the EVM-only proposal. - Add CHAIN_ALIASES mapping shorthand names to CAIP-2 IDs - `--chain evm` expands to top 20 EVM networks (not just Ethereum) - `--chain solana` resolves to Solana mainnet - Case-insensitive matching - Updated help text and JSDoc Co-Authored-By: Claude Opus 4.6 --- packages/cli-sdk/src/cli.ts | 2 +- packages/cli-sdk/src/client.ts | 33 +++++++++++++++++++++++++++++++-- packages/cli-sdk/src/types.ts | 2 +- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/packages/cli-sdk/src/cli.ts b/packages/cli-sdk/src/cli.ts index 54a1f4d..3acbcca 100644 --- a/packages/cli-sdk/src/cli.ts +++ b/packages/cli-sdk/src/cli.ts @@ -26,7 +26,7 @@ Commands: Options: --browser Use browser UI instead of terminal QR code --json Output as JSON (for whoami) - --chain Specify chain (e.g. eip155:10, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp) for connect + --chain Specify chain (e.g. evm, solana, eip155:10) for connect --version Show version number --help Show this help message diff --git a/packages/cli-sdk/src/client.ts b/packages/cli-sdk/src/client.ts index a0483c2..7a13681 100644 --- a/packages/cli-sdk/src/client.ts +++ b/packages/cli-sdk/src/client.ts @@ -33,6 +33,33 @@ const SOLANA_METHODS = ["solana_signTransaction", "solana_signMessage"]; const SOLANA_EVENTS: string[] = []; const DEFAULT_STORAGE_PATH = join(homedir(), ".walletconnect-cli"); +/** Shorthand chain names → CAIP-2 identifiers */ +const CHAIN_ALIASES: Record = { + solana: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + evm: [ + "eip155:1", // Ethereum + "eip155:137", // Polygon + "eip155:10", // Optimism + "eip155:42161", // Arbitrum One + "eip155:8453", // Base + "eip155:56", // BNB Chain + "eip155:43114", // Avalanche C-Chain + "eip155:100", // Gnosis + "eip155:250", // Fantom + "eip155:324", // zkSync Era + "eip155:59144", // Linea + "eip155:534352", // Scroll + "eip155:5000", // Mantle + "eip155:81457", // Blast + "eip155:7777777", // Zora + "eip155:1101", // Polygon zkEVM + "eip155:42220", // Celo + "eip155:1284", // Moonbeam + "eip155:1285", // Moonriver + "eip155:25", // Cronos + ], +}; + export class WalletConnectCLI extends EventEmitter { private readonly options: WalletConnectCLIOptions; private signClient: InstanceType | null = null; @@ -286,8 +313,10 @@ export class WalletConnectCLI extends EventEmitter { } private buildNamespaces(chains: string[]): Record { - const eipChains = chains.filter((c) => c.startsWith("eip155:")); - const solChains = chains.filter((c) => c.startsWith("solana:")); + const resolved = chains.flatMap((c) => CHAIN_ALIASES[c.toLowerCase()] ?? c); + + const eipChains = resolved.filter((c) => c.startsWith("eip155:")); + const solChains = resolved.filter((c) => c.startsWith("solana:")); const namespaces: Record = {}; diff --git a/packages/cli-sdk/src/types.ts b/packages/cli-sdk/src/types.ts index 217a126..5f8f3d1 100644 --- a/packages/cli-sdk/src/types.ts +++ b/packages/cli-sdk/src/types.ts @@ -9,7 +9,7 @@ export interface WalletConnectCLIOptions { storagePath?: string; /** Connection UI mode. Default: 'terminal' */ ui?: "terminal" | "browser"; - /** CAIP-2 chain IDs to request. Default: ['eip155:1'] */ + /** CAIP-2 chain IDs or shorthand names (e.g. 'ethereum', 'solana'). Default: ['eip155:1'] */ chains?: string[]; /** JSON-RPC methods to request. Default: common EVM signing methods */ methods?: string[];