From 691dd662a8b1be2b1d204439bf91fdddd473bca7 Mon Sep 17 00:00:00 2001 From: ygd58 Date: Sun, 19 Apr 2026 15:49:00 +0200 Subject: [PATCH] feat: add EVM testnet chains (sepolia, base-sepolia, arbitrum-sepolia, optimism-sepolia, polygon-amoy) Closes #189 Adds named testnet chain entries to the KNOWN_CHAINS registry: - sepolia (eip155:11155111) - base-sepolia (eip155:84532) - arbitrum-sepolia (eip155:421614) - optimism-sepolia (eip155:11155420) - polygon-amoy (eip155:80002) These chains were already usable via CAIP-2 ID or bare chain ID due to the generic EVM namespace fallback, but lacked friendly names. Now users can use ows wallet info --chain base-sepolia or pass base-sepolia directly to sign commands. Adds 7 unit tests covering name, CAIP-2, and bare ID parsing. --- ows/crates/ows-core/src/chain.rs | 75 +++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/ows/crates/ows-core/src/chain.rs b/ows/crates/ows-core/src/chain.rs index 1f741115..25344055 100644 --- a/ows/crates/ows-core/src/chain.rs +++ b/ows/crates/ows-core/src/chain.rs @@ -190,6 +190,32 @@ pub const KNOWN_CHAINS: &[Chain] = &[ chain_type: ChainType::Evm, chain_id: "eip155:999", }, + // EVM testnets + Chain { + name: "sepolia", + chain_type: ChainType::Evm, + chain_id: "eip155:11155111", + }, + Chain { + name: "base-sepolia", + chain_type: ChainType::Evm, + chain_id: "eip155:84532", + }, + Chain { + name: "arbitrum-sepolia", + chain_type: ChainType::Evm, + chain_id: "eip155:421614", + }, + Chain { + name: "optimism-sepolia", + chain_type: ChainType::Evm, + chain_id: "eip155:11155420", + }, + Chain { + name: "polygon-amoy", + chain_type: ChainType::Evm, + chain_id: "eip155:80002", + }, ]; /// Parse a chain string into a `Chain`. Accepts: @@ -628,4 +654,51 @@ mod tests { assert_eq!(chain.name, "ethereum"); assert_eq!(chain.chain_id, "eip155:1"); } -} + #[test] + fn parse_base_sepolia_by_name() { + let chain = parse_chain("base-sepolia").unwrap(); + assert_eq!(chain.chain_id, "eip155:84532"); + assert_eq!(chain.chain_type, ChainType::Evm); + } + + #[test] + fn parse_sepolia_by_name() { + let chain = parse_chain("sepolia").unwrap(); + assert_eq!(chain.chain_id, "eip155:11155111"); + assert_eq!(chain.chain_type, ChainType::Evm); + } + + #[test] + fn parse_arbitrum_sepolia_by_name() { + let chain = parse_chain("arbitrum-sepolia").unwrap(); + assert_eq!(chain.chain_id, "eip155:421614"); + assert_eq!(chain.chain_type, ChainType::Evm); + } + + #[test] + fn parse_optimism_sepolia_by_name() { + let chain = parse_chain("optimism-sepolia").unwrap(); + assert_eq!(chain.chain_id, "eip155:11155420"); + assert_eq!(chain.chain_type, ChainType::Evm); + } + + #[test] + fn parse_polygon_amoy_by_name() { + let chain = parse_chain("polygon-amoy").unwrap(); + assert_eq!(chain.chain_id, "eip155:80002"); + assert_eq!(chain.chain_type, ChainType::Evm); + } + + #[test] + fn parse_base_sepolia_by_caip2() { + let chain = parse_chain("eip155:84532").unwrap(); + assert_eq!(chain.chain_id, "eip155:84532"); + } + + #[test] + fn parse_base_sepolia_by_chain_id() { + let chain = parse_chain("84532").unwrap(); + assert_eq!(chain.chain_id, "eip155:84532"); + } + +} \ No newline at end of file