nifty_cli/commands/
revoke.rs

1use nifty_asset::{
2    instructions::{Revoke, RevokeInstructionArgs},
3    types::{DelegateInput, DelegateRole},
4};
5
6use super::*;
7
8pub struct RevokeArgs {
9    pub keypair_path: Option<PathBuf>,
10    pub rpc_url: Option<String>,
11    pub asset: Pubkey,
12    pub role: Vec<String>,
13    pub all: bool,
14}
15
16pub fn handle_revoke(args: RevokeArgs) -> Result<()> {
17    let config = CliConfig::new(args.keypair_path, args.rpc_url)?;
18
19    let signer_sk = config.keypair;
20    let signer = signer_sk.pubkey();
21    let asset = args.asset;
22
23    let roles = args
24        .role
25        .iter()
26        .map(|role| match role.to_lowercase().as_str() {
27            "burn" => DelegateRole::Burn,
28            "lock" => DelegateRole::Lock,
29            "transfer" => DelegateRole::Transfer,
30            _ => panic!("Invalid role: {}", role),
31        })
32        .collect();
33
34    let args = RevokeInstructionArgs {
35        delegate_input: if args.all {
36            DelegateInput::All
37        } else {
38            DelegateInput::Some { roles }
39        },
40    };
41
42    let ix = Revoke { asset, signer }.instruction(args);
43
44    let sig = send_and_confirm_tx(&config.client, &[&signer_sk], &[ix])?;
45
46    println!("Revoking the delegate on asset {asset} in tx: {sig}");
47
48    Ok(())
49}