@@ -1429,13 +1429,20 @@ impl Config {
1429
1429
1430
1430
// etherscan fallback via API key
1431
1431
if let Some ( key) = self . etherscan_api_key . as_ref ( ) {
1432
- return Ok ( ResolvedEtherscanConfig :: create (
1432
+ match ResolvedEtherscanConfig :: create (
1433
1433
key,
1434
1434
chain. or ( self . chain ) . unwrap_or_default ( ) ,
1435
1435
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
+ }
1437
1445
}
1438
-
1439
1446
Ok ( None )
1440
1447
}
1441
1448
@@ -5081,4 +5088,45 @@ mod tests {
5081
5088
. unwrap ( ) ;
5082
5089
assert_eq ! ( endpoint. url, "https://rpc.sophon.xyz" ) ;
5083
5090
}
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
+ }
5084
5132
}
0 commit comments