use stakewiz_rs::{QueryParams, StakewizClient};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = StakewizClient::new();
let vote_key = "GE6atKoWiQ2pt3zL7N13pjNHjdLVys8LinG8qeJLcAiL"; let v = client.get_validator(vote_key).await?;
println!(
"Validator: {} (rank #{})",
v.name.as_deref().unwrap_or("?"),
v.rank.unwrap_or(0)
);
println!(" Commission: {}%", v.commission.unwrap_or(0));
println!(" APY estimate: {:.2}%", v.apy_estimate.unwrap_or(0.0));
println!(" Wiz Score: {:.2}", v.wiz_score.unwrap_or(0.0));
println!(" Jito: {}", v.is_jito.unwrap_or(false));
println!();
let sanctum_vote = "LSTmLs1DENX82ihc7jU134mydiV3NDEPXsRrekAY6Ys";
let stakes = client.get_validator_stakes(sanctum_vote).await?;
println!("Sanctum validator has {} stake accounts", stakes.len());
let mut sorted = stakes.clone();
sorted.sort_by(|a, b| {
b.active_stake
.unwrap_or(0)
.cmp(&a.active_stake.unwrap_or(0))
});
for acc in sorted.iter().take(5) {
println!(
" {} — {:.2} SOL",
&acc.pubkey[..16],
acc.active_stake.unwrap_or(0) as f64 / 1e9
);
}
println!();
let params = QueryParams::new().sort_desc("epoch").limit(5);
let epoch_stakes = client
.get_validator_total_stakes(vote_key, Some(¶ms))
.await?;
println!("Recent epoch stakes for Laine:");
for es in &epoch_stakes {
println!(" Epoch {}: {:.2} SOL", es.epoch, es.stake);
}
println!();
let epoch_info = client.get_epoch_info().await?;
println!("Current epoch: {}", epoch_info.epoch);
println!(
" Progress: {:.1}%",
epoch_info.elapsed_seconds as f64 / epoch_info.duration_seconds as f64 * 100.0
);
println!(
" ~{:.1} hours remaining",
epoch_info.remaining_seconds as f64 / 3600.0
);
println!();
let cluster = client.get_cluster_stats().await?;
println!("Cluster averages:");
println!(" APY: {:.2}%", cluster.avg_apy.unwrap_or(0.0));
println!(" Avg commission: {:.1}%", cluster.avg_commission.unwrap_or(0.0));
println!(" Median stake: {:.0} SOL", cluster.median_stake.unwrap_or(0.0));
Ok(())
}