nifty_cli/commands/
lock.rs

1use nifty_asset::instructions::Lock;
2
3use super::*;
4
5pub struct LockArgs {
6    pub keypair_path: Option<PathBuf>,
7    pub rpc_url: Option<String>,
8    pub asset: Pubkey,
9    pub signer_keypair_path: Option<PathBuf>,
10}
11
12pub fn handle_lock(args: LockArgs) -> Result<()> {
13    let config = CliConfig::new(args.keypair_path, args.rpc_url)?;
14
15    let payer_sk = Keypair::from_bytes(&config.keypair.to_bytes())?;
16
17    // Use provided signer keypair, or default to the config keypair.
18    let signer_sk = if let Some(signer) = args.signer_keypair_path {
19        read_keypair_file(signer)
20            .map_err(|err| anyhow!("Failed to read signer keypair file: {}", err))?
21    } else {
22        Keypair::from_bytes(&config.keypair.to_bytes())?
23    };
24
25    let signer = signer_sk.pubkey();
26    let asset = args.asset;
27
28    let ix = Lock { asset, signer }.instruction();
29
30    let sig = send_and_confirm_tx(&config.client, &[&payer_sk, &signer_sk], &[ix])?;
31
32    println!("Locking asset {asset} in tx: {sig}");
33
34    Ok(())
35}