@@ -1429,13 +1429,20 @@ impl Config {
14291429
14301430 // etherscan fallback via API key
14311431 if let Some ( key) = self . etherscan_api_key . as_ref ( ) {
1432- return Ok ( ResolvedEtherscanConfig :: create (
1432+ match ResolvedEtherscanConfig :: create (
14331433 key,
14341434 chain. or ( self . chain ) . unwrap_or_default ( ) ,
14351435 default_api_version,
1436- ) ) ;
1436+ ) {
1437+ Some ( config) => return Ok ( Some ( config) ) ,
1438+ None => {
1439+ return Err ( EtherscanConfigError :: UnknownChain (
1440+ String :: new ( ) ,
1441+ chain. unwrap_or_default ( ) ,
1442+ ) ) ;
1443+ }
1444+ }
14371445 }
1438-
14391446 Ok ( None )
14401447 }
14411448
@@ -5081,4 +5088,45 @@ mod tests {
50815088 . unwrap ( ) ;
50825089 assert_eq ! ( endpoint. url, "https://rpc.sophon.xyz" ) ;
50835090 }
5091+
5092+ #[ test]
5093+ fn test_get_etherscan_config_with_unknown_chain ( ) {
5094+ figment:: Jail :: expect_with ( |jail| {
5095+ jail. create_file (
5096+ "foundry.toml" ,
5097+ r#"
5098+ [etherscan]
5099+ mainnet = { chain = 3658348, key = "api-key"}
5100+ "# ,
5101+ ) ?;
5102+ let config = Config :: load ( ) . unwrap ( ) ;
5103+ let unknown_chain = Chain :: from_id ( 3658348 ) ;
5104+ let result = config. get_etherscan_config_with_chain ( Some ( unknown_chain) ) ;
5105+ assert ! ( result. is_err( ) ) ;
5106+ let error_msg = result. unwrap_err ( ) . to_string ( ) ;
5107+ assert ! ( error_msg. contains( "No known Etherscan API URL for chain `3658348`" ) ) ;
5108+ assert ! ( error_msg. contains( "Specify a `url`" ) ) ;
5109+ assert ! ( error_msg. contains( "Verify the chain `3658348` is correct" ) ) ;
5110+
5111+ Ok ( ( ) )
5112+ } ) ;
5113+ }
5114+
5115+ #[ test]
5116+ fn test_get_etherscan_config_with_existing_chain_and_url ( ) {
5117+ figment:: Jail :: expect_with ( |jail| {
5118+ jail. create_file (
5119+ "foundry.toml" ,
5120+ r#"
5121+ [etherscan]
5122+ mainnet = { chain = 1, key = "api-key" }
5123+ "# ,
5124+ ) ?;
5125+ let config = Config :: load ( ) . unwrap ( ) ;
5126+ let unknown_chain = Chain :: from_id ( 1 ) ;
5127+ let result = config. get_etherscan_config_with_chain ( Some ( unknown_chain) ) ;
5128+ assert ! ( result. is_ok( ) ) ;
5129+ Ok ( ( ) )
5130+ } ) ;
5131+ }
50845132}
0 commit comments