cycles-quartz/apps/transfers/enclave/src/cli.rs

80 lines
2.2 KiB
Rust
Raw Normal View History

use std::{env, net::SocketAddr};
2024-02-22 20:48:13 +00:00
use clap::Parser;
use color_eyre::eyre::{eyre, Result};
use cosmrs::AccountId;
use quartz_common::enclave::types::Fmspc;
use tendermint::Hash;
2024-02-22 20:48:13 +00:00
use tendermint_light_client::types::{Height, TrustThreshold};
fn parse_trust_threshold(s: &str) -> Result<TrustThreshold> {
if let Some((l, r)) = s.split_once('/') {
TrustThreshold::new(l.parse()?, r.parse()?).map_err(Into::into)
} else {
Err(eyre!(
"invalid trust threshold: {s}, format must be X/Y where X and Y are integers"
))
}
}
#[derive(Debug, Parser)]
#[command(author, version, about, long_about = None)]
pub struct Cli {
/// RPC server address
#[clap(long, default_value_t = default_rpc_addr())]
2024-02-22 20:48:13 +00:00
pub rpc_addr: SocketAddr,
/// Identifier of the chain
#[clap(long)]
pub chain_id: String,
/// FMSPC (Family-Model-Stepping-Platform-Custom SKU)
#[clap(long)]
pub fmspc: Option<Fmspc>,
/// TcbInfo contract address
#[clap(long)]
pub tcbinfo_contract: Option<AccountId>,
/// DCAP verifier contract address
#[clap(long)]
pub dcap_verifier_contract: Option<AccountId>,
2024-02-22 20:48:13 +00:00
/// Height of the trusted header (AKA root-of-trust)
#[clap(long)]
pub trusted_height: Height,
/// Hash of the trusted header (AKA root-of-trust)
#[clap(long)]
pub trusted_hash: Hash,
/// Trust threshold
#[clap(long, value_parser = parse_trust_threshold, default_value_t = TrustThreshold::TWO_THIRDS)]
pub trust_threshold: TrustThreshold,
/// Trusting period, in seconds (default: two weeks)
#[clap(long, default_value = "1209600")]
pub trusting_period: u64,
/// Maximum clock drift, in seconds
#[clap(long, default_value = "5")]
pub max_clock_drift: u64,
/// Maximum block lag, in seconds
#[clap(long, default_value = "5")]
pub max_block_lag: u64,
#[clap(long, default_value = "127.0.0.1:11090")]
pub node_url: String,
#[clap(long, default_value = "admin")]
pub tx_sender: String,
2024-02-22 20:48:13 +00:00
}
fn default_rpc_addr() -> SocketAddr {
let port = env::var("QUARTZ_ENCLAVE_RPC_PORT").unwrap_or_else(|_| "11090".to_string());
format!("127.0.0.1:{}", port)
.parse()
.expect("Invalid socket address")
}