1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use super::*;

pub struct BurnArgs {
    pub keypair_path: Option<PathBuf>,
    pub rpc_url: Option<String>,
    pub asset: Pubkey,
    pub recipient: Option<Pubkey>,
}

pub fn handle_burn(args: BurnArgs) -> Result<()> {
    let config = CliConfig::new(args.keypair_path, args.rpc_url)?;

    let signer_sk = config.keypair;

    let signer = signer_sk.pubkey();
    let asset = args.asset;

    let data = config.client.get_account_data(&args.asset)?;
    let asset_account = Asset::from_bytes(&data).unwrap();

    let ix = Burn {
        asset,
        signer,
        recipient: args.recipient,
        group: if asset_account.group == Pubkey::default() {
            None
        } else {
            Some(asset_account.group)
        },
    }
    .instruction();

    let sig = send_and_confirm_tx(&config.client, &[&signer_sk], &[ix])?;

    println!("Burned asset {asset} in tx: {sig}");

    Ok(())
}