Skip to content

Commit

Permalink
feat: add chainlist integration
Browse files Browse the repository at this point in the history
  • Loading branch information
marktoda committed Dec 26, 2024
1 parent 987ffe7 commit e9c5d31
Show file tree
Hide file tree
Showing 7 changed files with 349 additions and 33 deletions.
127 changes: 114 additions & 13 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ alloy = { version = "0.1.4", features = ["full"] }
alloy-primitives = "0.7.7"
anyhow = "1.0.86"
dirs = "5.0.1"
reqwest = "0.12.9"
serde = "1.0.204"
serde_json = "1.0.120"
structopt = "0.3.26"
Expand Down
2 changes: 2 additions & 0 deletions shell.nix
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ pkgs.mkShell {
inputsFrom = [(pkgs.callPackage ./default.nix {})];
# Additional tooling
buildInputs = with pkgs; [
openssl
pkg-config
rust-analyzer # LSP Server
rustfmt # Formatter
clippy # Linter
Expand Down
31 changes: 31 additions & 0 deletions src/chainlist.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
use anyhow::{anyhow, Result};
use serde::Deserialize;

#[derive(Deserialize, Debug)]
pub struct ChainlistEntry {
pub name: String,
#[serde(rename = "chainId")]
pub chain_id: u64,
pub rpc: Vec<String>,
}

pub async fn fetch_chain_data(
chain_id: Option<u64>,
name: Option<String>,
) -> Result<ChainlistEntry> {
let url = "https://chainid.network/chains.json";
let chains: Vec<ChainlistEntry> = reqwest::get(url).await?.json().await?;

let chain = if let Some(id) = chain_id {
chains.into_iter().find(|c| c.chain_id == id)
} else if let Some(name) = name {
let name_lower = name.to_lowercase();
chains
.into_iter()
.find(|c| c.name.to_lowercase() == name_lower)
} else {
None
};

chain.ok_or_else(|| anyhow!("Chain not found in chainlist"))
}
Loading

0 comments on commit e9c5d31

Please sign in to comment.