sourcify 0.0.2

A lightweight wrapper for Sourcify and 4byte APIs for fetching Ethereum smart contract source code and signatures
Documentation
use sourcify::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, &["sources", "abi", "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(())
}