kaspa_cli_lib/modules/
estimate.rs

1use crate::imports::*;
2use kaspa_wallet_core::tx::PaymentDestination;
3
4#[derive(Default, Handler)]
5#[help("Estimate the fees for a transaction of a given amount")]
6pub struct Estimate;
7
8impl Estimate {
9    async fn main(self: Arc<Self>, ctx: &Arc<dyn Context>, argv: Vec<String>, _cmd: &str) -> Result<()> {
10        let ctx = ctx.clone().downcast_arc::<KaspaCli>()?;
11
12        let account = ctx.wallet().account()?;
13
14        if argv.is_empty() {
15            tprintln!(ctx, "usage: estimate <amount> [<priority fee>]");
16            return Ok(());
17        }
18
19        let amount_sompi = try_parse_required_nonzero_kaspa_as_sompi_u64(argv.first())?;
20        let priority_fee_sompi = try_parse_optional_kaspa_as_sompi_i64(argv.get(1))?.unwrap_or(0);
21        let abortable = Abortable::default();
22
23        // just use any address for an estimate (change address)
24        let change_address = account.change_address()?;
25        let destination = PaymentDestination::PaymentOutputs(PaymentOutputs::from((change_address.clone(), amount_sompi)));
26        let estimate = account.estimate(destination, priority_fee_sompi.into(), None, &abortable).await?;
27
28        tprintln!(ctx, "Estimate - {estimate}");
29
30        Ok(())
31    }
32}