nifty_cli/commands/
revoke.rs1use 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}