From 223ad1041c740b656f748a9c1e34cea1a5754856 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Fri, 9 Feb 2024 14:14:03 +0100 Subject: [PATCH] fix: use join for check-by-address path --- crates/forge/bin/cmd/verify/sourcify.rs | 26 +++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/crates/forge/bin/cmd/verify/sourcify.rs b/crates/forge/bin/cmd/verify/sourcify.rs index 6c17d3f1293d..d30946f8945e 100644 --- a/crates/forge/bin/cmd/verify/sourcify.rs +++ b/crates/forge/bin/cmd/verify/sourcify.rs @@ -5,8 +5,9 @@ use foundry_cli::utils::{get_cached_entry_by_name, LoadConfig}; use foundry_common::{fs, retry::Retry}; use foundry_compilers::ConfigurableContractArtifact; use futures::FutureExt; +use reqwest::Url; use serde::{Deserialize, Serialize}; -use std::{collections::HashMap, path::PathBuf}; +use std::{collections::HashMap, path::PathBuf, str::FromStr}; pub static SOURCIFY_URL: &str = "https://sourcify.dev/server/"; @@ -69,13 +70,15 @@ impl VerificationProvider for SourcifyVerificationProvider { let resp = retry .run_async(|| { async { - let url = format!( - "{}check-by-addresses?addresses={}&chainIds={}", + let url = Url::from_str( args.verifier.verifier_url.as_deref().unwrap_or(SOURCIFY_URL), + )?; + let query = format!( + "check-by-addresses?addresses={}&chainIds={}", args.id, args.etherscan.chain.unwrap_or_default().id(), ); - + let url = url.join(&query)?; let response = reqwest::get(url).await?; if !response.status().is_success() { eyre::bail!( @@ -201,3 +204,18 @@ pub struct SourcifyResponseElement { #[serde(rename = "storageTimestamp")] storage_timestamp: Option, } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_check_addresses_url() { + let url = Url::from_str("https://server-verify.hashscan.io").unwrap(); + let url = url.join("check-by-addresses?addresses=0x1234&chainIds=1").unwrap(); + assert_eq!( + url.as_str(), + "https://server-verify.hashscan.io/check-by-addresses?addresses=0x1234&chainIds=1" + ); + } +}