use canton_core::{Config, localnet};
use canton_ledger::{CantonClient, JsonClient};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
if let (Some(instance), Some(version)) = (localnet::instance(), localnet::splice_version()) {
println!("network `{instance}`, Splice {version}");
}
let grpc = CantonClient::connect_lazy(Config::from_env()?)?;
println!(
"gRPC {} -> Ledger API {}",
endpoint()?,
grpc.version().await?
);
let json = JsonClient::from_env()?;
println!("JSON -> Ledger API {}", json.version().await?);
match Config::from_env_for("app-user") {
Ok(config) => {
let user = CantonClient::connect_lazy(config)?;
println!("app-user -> Ledger API {}", user.version().await?);
}
Err(_) => println!("app-user -> not exported by this network"),
}
for alias in ["app-provider", "app-user", "sv"] {
match localnet::party(alias) {
Some(party) => println!("party {alias:<13} {party}"),
None => println!("party {alias:<13} (not resolved yet)"),
}
}
let offset = grpc.ledger_end().await?;
println!("ledger end at offset {offset}");
Ok(())
}
fn endpoint() -> Result<String, canton_core::Error> {
localnet::grpc_endpoint(None).ok_or_else(|| {
canton_core::Error::InvalidRequest("no endpoint in the environment".to_string())
})
}