sourcify 0.0.4

A lightweight wrapper for Sourcify and 4byte APIs for fetching Ethereum smart contract source code and signatures
Documentation
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(())
}