kaspa_cli_lib/modules/
address.rs

1use crate::imports::*;
2
3#[derive(Default, Handler)]
4#[help("Show or generate a new address for the current wallet account")]
5pub struct Address;
6
7impl Address {
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        if argv.is_empty() {
12            let address = ctx.account().await?.receive_address()?.to_string();
13            tprintln!(ctx, "\n{address}\n");
14        } else {
15            let op = argv.first().unwrap();
16            match op.as_str() {
17                "new" => {
18                    let account = ctx.wallet().account()?.as_derivation_capable()?;
19                    let ident = account.name_with_id();
20                    let new_address = account.new_receive_address().await?;
21                    tprintln!(ctx, "Generating new address for account {}", style(ident).cyan());
22                    tprintln!(ctx, "{}", style(new_address).blue());
23                }
24                v => {
25                    tprintln!(ctx, "unknown command: '{v}'\r\n");
26                    return self.display_help(ctx, argv).await;
27                }
28            }
29        }
30
31        Ok(())
32    }
33
34    async fn display_help(self: Arc<Self>, ctx: Arc<KaspaCli>, _argv: Vec<String>) -> Result<()> {
35        ctx.term().help(&[("address [new]", "Show current or generate a new account address")], None)?;
36
37        Ok(())
38    }
39}