1
1
use crate :: {
2
- provider:: { VerificationContext , VerificationProvider } ,
2
+ provider:: { VerificationContext , VerificationProvider , VerificationProviderType } ,
3
3
retry:: RETRY_CHECK_ON_VERIFY ,
4
4
verify:: { VerifyArgs , VerifyCheckArgs } ,
5
5
} ;
@@ -152,6 +152,7 @@ impl VerificationProvider for EtherscanVerificationProvider {
152
152
let config = args. load_config ( ) ?;
153
153
let etherscan = self . client (
154
154
args. etherscan . chain . unwrap_or_default ( ) ,
155
+ & args. verifier . verifier ,
155
156
args. verifier . verifier_url . as_deref ( ) ,
156
157
args. etherscan . key ( ) . as_deref ( ) ,
157
158
& config,
@@ -220,6 +221,7 @@ impl EtherscanVerificationProvider {
220
221
let config = args. load_config ( ) ?;
221
222
let etherscan = self . client (
222
223
args. etherscan . chain . unwrap_or_default ( ) ,
224
+ & args. verifier . verifier ,
223
225
args. verifier . verifier_url . as_deref ( ) ,
224
226
args. etherscan . key ( ) . as_deref ( ) ,
225
227
& config,
@@ -251,6 +253,7 @@ impl EtherscanVerificationProvider {
251
253
pub ( crate ) fn client (
252
254
& self ,
253
255
chain : Chain ,
256
+ verifier_type : & VerificationProviderType ,
254
257
verifier_url : Option < & str > ,
255
258
etherscan_key : Option < & str > ,
256
259
config : & Config ,
@@ -275,10 +278,13 @@ impl EtherscanVerificationProvider {
275
278
builder = if let Some ( api_url) = api_url {
276
279
// we don't want any trailing slashes because this can cause cloudflare issues: <https://github.com/foundry-rs/foundry/pull/6079>
277
280
let api_url = api_url. trim_end_matches ( '/' ) ;
278
- builder
279
- . with_chain_id ( chain)
280
- . with_api_url ( api_url) ?
281
- . with_url ( base_url. unwrap_or ( api_url) ) ?
281
+ let base_url = if * verifier_type != VerificationProviderType :: Etherscan {
282
+ // If verifier is not Etherscan then set base url as api url without trialing /api.
283
+ api_url. strip_prefix ( "/api" ) . unwrap_or ( api_url)
284
+ } else {
285
+ base_url. unwrap_or ( api_url)
286
+ } ;
287
+ builder. with_chain_id ( chain) . with_api_url ( api_url) ?. with_url ( base_url) ?
282
288
} else {
283
289
builder. chain ( chain) ?
284
290
} ;
@@ -384,6 +390,7 @@ impl EtherscanVerificationProvider {
384
390
let provider = get_provider ( & context. config ) ?;
385
391
let client = self . client (
386
392
args. etherscan . chain . unwrap_or_default ( ) ,
393
+ & args. verifier . verifier ,
387
394
args. verifier . verifier_url . as_deref ( ) ,
388
395
args. etherscan . key . as_deref ( ) ,
389
396
& context. config ,
@@ -490,6 +497,7 @@ mod tests {
490
497
let client = etherscan
491
498
. client (
492
499
args. etherscan . chain . unwrap_or_default ( ) ,
500
+ & args. verifier . verifier ,
493
501
args. verifier . verifier_url . as_deref ( ) ,
494
502
args. etherscan . key ( ) . as_deref ( ) ,
495
503
& config,
@@ -517,6 +525,7 @@ mod tests {
517
525
let client = etherscan
518
526
. client (
519
527
args. etherscan . chain . unwrap_or_default ( ) ,
528
+ & args. verifier . verifier ,
520
529
args. verifier . verifier_url . as_deref ( ) ,
521
530
args. etherscan . key ( ) . as_deref ( ) ,
522
531
& config,
0 commit comments