kaspa_cli_lib/modules/
transfer.rs1use crate::imports::*;
2
3#[derive(Default, Handler)]
4#[help("Transfer funds between wallet accounts")]
5pub struct Transfer;
6
7impl Transfer {
8 async fn main(self: Arc<Self>, ctx: &Arc<dyn Context>, argv: Vec<String>, _cmd: &str) -> Result<()> {
9 let ctx = ctx.clone().downcast_arc::<KaspaCli>()?;
10
11 let account = ctx.wallet().account()?;
12
13 if argv.len() < 2 {
14 tprintln!(ctx, "usage: transfer <account> <amount> <priority fee>");
15 return Ok(());
16 }
17
18 let target_account = argv.first().unwrap();
19 let target_account = ctx.find_accounts_by_name_or_id(target_account).await?;
20 if target_account.id() == account.id() {
21 return Err("Cannot transfer to the same account".into());
22 }
23 let amount_sompi = try_parse_required_nonzero_kaspa_as_sompi_u64(argv.get(1))?;
24 let priority_fee_sompi = try_parse_optional_kaspa_as_sompi_i64(argv.get(2))?.unwrap_or(0);
25 let target_address = target_account.receive_address()?;
26 let (wallet_secret, payment_secret) = ctx.ask_wallet_secret(Some(&account)).await?;
27
28 let abortable = Abortable::default();
29 let outputs = PaymentOutputs::from((target_address.clone(), amount_sompi));
30
31 let (summary, _ids) = account
33 .send(
34 outputs.into(),
35 priority_fee_sompi.into(),
36 None,
37 wallet_secret,
38 payment_secret,
39 &abortable,
40 Some(Arc::new(move |_ptx| {
41 })),
43 )
44 .await?;
45
46 tprintln!(ctx, "Transfer - {summary}");
47
48 Ok(())
49 }
50}