use sourcify::{v2, Sourcify};
#[tokio::main]
async fn main() -> sourcify::Result<()> {
let chain_id = std::env::args().nth(1).unwrap_or_else(|| "1".to_string());
let address = std::env::args()
.nth(2)
.unwrap_or_else(|| "0xdAC17F958D2ee523a2206206994597C13D831ec7".to_string());
let client = Sourcify::new();
let contract = client
.v2()
.get_contract_with_fields(
chain_id,
&address,
&[v2::field::SOURCES, v2::field::ABI, v2::field::METADATA],
)
.await?;
match contract {
Some(contract) => {
let source_count = contract.sources.as_ref().map_or(0, |sources| sources.len());
println!(
"verified contract: {} on chain {}",
contract.address, contract.chain_id
);
println!("source files: {source_count}");
println!("has abi: {}", contract.abi.is_some());
println!("has metadata: {}", contract.metadata.is_some());
println!(
"source files: {:?}",
contract
.sources
.as_ref()
.map(|sources| sources.iter().next().map(|(_, x)| x.content.clone()))
);
}
None => println!("contract is not verified"),
}
Ok(())
}