use super::*;
use leo_ast::NetworkName;
pub fn confirm(prompt: &str, skip_confirmation: bool) -> Result<bool> {
if skip_confirmation {
return Ok(true);
}
let result = Confirm::with_theme(&ColorfulTheme::default())
.with_prompt(prompt)
.default(false)
.interact()
.map_err(|e| crate::errors::custom(format!("Failed to prompt user: {e}")).into());
println!();
result
}
pub fn warn_and_confirm(warning: &str, skip_confirmation: bool) -> Result<bool> {
tracing::warn!("{warning}");
if skip_confirmation {
return Ok(true);
}
let result = Confirm::with_theme(&ColorfulTheme::default())
.with_prompt("Do you want to continue?")
.default(false)
.interact()
.map_err(|e| crate::errors::custom(format!("Failed to prompt user: {e}")).into());
println!();
result
}
pub fn confirm_fee<N: Network>(
fee: &snarkvm::prelude::Fee<N>,
private_key: &PrivateKey<N>,
address: &Address<N>,
endpoint: &str,
network: NetworkName,
context: &Context,
skip: bool,
) -> Result<bool> {
let total_cost = (*fee.amount()? as f64) / 1_000_000.0;
if fee.is_fee_public() {
let public_balance = get_public_balance(private_key, endpoint, network, context)? as f64 / 1_000_000.0;
println!("💰Your current public balance is {public_balance} credits.\n");
if public_balance < total_cost {
return Err(crate::errors::insufficient_balance(address, public_balance, total_cost).into());
}
}
confirm(&format!("This transaction will cost you {total_cost} credits. Do you want to proceed?"), skip)
}