@@ -12,7 +12,7 @@ use foundry_block_explorers::{
12
12
errors:: EtherscanError ,
13
13
utils:: lookup_compiler_version,
14
14
verify:: { CodeFormat , VerifyContract } ,
15
- Client ,
15
+ Client , EtherscanApiVersion ,
16
16
} ;
17
17
use foundry_cli:: utils:: { get_provider, read_constructor_args_file, LoadConfig } ;
18
18
use foundry_common:: { abi:: encode_function_args, retry:: RetryError } ;
@@ -155,6 +155,7 @@ impl VerificationProvider for EtherscanVerificationProvider {
155
155
& args. verifier . verifier ,
156
156
args. verifier . verifier_url . as_deref ( ) ,
157
157
args. etherscan . key ( ) . as_deref ( ) ,
158
+ args. verifier . verifier_api_version . as_deref ( ) ,
158
159
& config,
159
160
) ?;
160
161
args. retry
@@ -224,6 +225,7 @@ impl EtherscanVerificationProvider {
224
225
& args. verifier . verifier ,
225
226
args. verifier . verifier_url . as_deref ( ) ,
226
227
args. etherscan . key ( ) . as_deref ( ) ,
228
+ args. verifier . verifier_api_version . as_deref ( ) ,
227
229
& config,
228
230
) ?;
229
231
let verify_args = self . create_verify_request ( args, context) . await ?;
@@ -256,13 +258,28 @@ impl EtherscanVerificationProvider {
256
258
verifier_type : & VerificationProviderType ,
257
259
verifier_url : Option < & str > ,
258
260
etherscan_key : Option < & str > ,
261
+ verifier_api_version : Option < & str > ,
259
262
config : & Config ,
260
263
) -> Result < Client > {
261
264
let etherscan_config = config. get_etherscan_config_with_chain ( Some ( chain) ) ?;
262
265
266
+ let api_version = match verifier_api_version {
267
+ Some ( api_version) => EtherscanApiVersion :: try_from ( api_version. to_string ( ) ) ?,
268
+ None => {
269
+ if verifier_type. is_etherscan ( ) {
270
+ etherscan_config
271
+ . as_ref ( )
272
+ . map ( |c| c. api_version )
273
+ . unwrap_or ( EtherscanApiVersion :: V2 )
274
+ } else {
275
+ EtherscanApiVersion :: V1
276
+ }
277
+ }
278
+ } ;
279
+
263
280
let etherscan_api_url = verifier_url
264
281
. or_else ( || {
265
- if verifier_type . is_etherscan_v2 ( ) {
282
+ if api_version == EtherscanApiVersion :: V2 {
266
283
None
267
284
} else {
268
285
etherscan_config. as_ref ( ) . map ( |c| c. api_url . as_str ( ) )
@@ -277,13 +294,8 @@ impl EtherscanVerificationProvider {
277
294
. or_else ( || chain. etherscan_urls ( ) . map ( |( _, url) | url) ) ;
278
295
let etherscan_key =
279
296
etherscan_key. or_else ( || etherscan_config. as_ref ( ) . map ( |c| c. key . as_str ( ) ) ) ;
280
- let etherscan_api_version = if verifier_type. is_etherscan_v2 ( ) {
281
- foundry_block_explorers:: EtherscanApiVersion :: V2
282
- } else {
283
- foundry_block_explorers:: EtherscanApiVersion :: V1
284
- } ;
285
297
286
- let mut builder = Client :: builder ( ) . with_api_version ( etherscan_api_version ) ;
298
+ let mut builder = Client :: builder ( ) . with_api_version ( api_version ) ;
287
299
288
300
builder = if let Some ( api_url) = api_url {
289
301
// we don't want any trailing slashes because this can cause cloudflare issues: <https://github.com/foundry-rs/foundry/pull/6079>
@@ -407,6 +419,7 @@ impl EtherscanVerificationProvider {
407
419
& args. verifier . verifier ,
408
420
args. verifier . verifier_url . as_deref ( ) ,
409
421
args. etherscan . key . as_deref ( ) ,
422
+ args. verifier . verifier_api_version . as_deref ( ) ,
410
423
& context. config ,
411
424
) ?;
412
425
@@ -476,7 +489,6 @@ async fn ensure_solc_build_metadata(version: Version) -> Result<Version> {
476
489
mod tests {
477
490
use super :: * ;
478
491
use clap:: Parser ;
479
- use foundry_block_explorers:: EtherscanApiVersion ;
480
492
use foundry_common:: fs;
481
493
use foundry_test_utils:: { forgetest_async, str} ;
482
494
use tempfile:: tempdir;
@@ -515,6 +527,7 @@ mod tests {
515
527
& args. verifier . verifier ,
516
528
args. verifier . verifier_url . as_deref ( ) ,
517
529
args. etherscan . key ( ) . as_deref ( ) ,
530
+ args. verifier . verifier_api_version . as_deref ( ) ,
518
531
& config,
519
532
)
520
533
. unwrap ( ) ;
@@ -543,6 +556,7 @@ mod tests {
543
556
& args. verifier . verifier ,
544
557
args. verifier . verifier_url . as_deref ( ) ,
545
558
args. etherscan . key ( ) . as_deref ( ) ,
559
+ args. verifier . verifier_api_version . as_deref ( ) ,
546
560
& config,
547
561
)
548
562
. unwrap ( ) ;
@@ -570,7 +584,7 @@ mod tests {
570
584
"0xd8509bee9c9bf012282ad33aba0d87241baf5064" ,
571
585
"src/Counter.sol:Counter" ,
572
586
"--verifier" ,
573
- "etherscan-v2 " ,
587
+ "etherscan" ,
574
588
"--chain" ,
575
589
"mumbai" ,
576
590
"--root" ,
@@ -587,6 +601,7 @@ mod tests {
587
601
& args. verifier . verifier ,
588
602
args. verifier . verifier_url . as_deref ( ) ,
589
603
args. etherscan . key ( ) . as_deref ( ) ,
604
+ args. verifier . verifier_api_version . as_deref ( ) ,
590
605
& config,
591
606
)
592
607
. unwrap ( ) ;
@@ -599,7 +614,7 @@ mod tests {
599
614
"0xd8509bee9c9bf012282ad33aba0d87241baf5064" ,
600
615
"src/Counter.sol:Counter" ,
601
616
"--verifier" ,
602
- "etherscan-v2 " ,
617
+ "etherscan" ,
603
618
"--chain" ,
604
619
"mumbai" ,
605
620
"--verifier-url" ,
@@ -610,7 +625,7 @@ mod tests {
610
625
611
626
let config = args. load_config ( ) . unwrap ( ) ;
612
627
613
- assert_eq ! ( args. verifier. verifier, VerificationProviderType :: EtherscanV2 ) ;
628
+ assert_eq ! ( args. verifier. verifier, VerificationProviderType :: Etherscan ) ;
614
629
615
630
let etherscan = EtherscanVerificationProvider :: default ( ) ;
616
631
let client = etherscan
@@ -619,6 +634,7 @@ mod tests {
619
634
& args. verifier . verifier ,
620
635
args. verifier . verifier_url . as_deref ( ) ,
621
636
args. etherscan . key ( ) . as_deref ( ) ,
637
+ args. verifier . verifier_api_version . as_deref ( ) ,
622
638
& config,
623
639
)
624
640
. unwrap ( ) ;
0 commit comments