Skip to content

Commit 7f3a772

Browse files
finish burn functionality
1 parent 19e2ebd commit 7f3a772

File tree

4 files changed

+28
-33
lines changed

4 files changed

+28
-33
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ cargo install metaboss
4545

4646
### Install From Source
4747

48+
Requires Rust 1.56 or later.
49+
4850
Install [Rust](https://www.rust-lang.org/tools/install).
4951

5052
```bash

src/burn.rs

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
use anyhow::Result;
2-
use metaplex_token_metadata::{id, instruction::update_metadata_accounts, state::Data};
2+
use metaplex_token_metadata::{
3+
id,
4+
instruction::update_metadata_accounts,
5+
state::{Data, Metadata},
6+
};
37
use retry::{delay::Exponential, retry};
48
use solana_client::rpc_client::RpcClient;
59
use solana_sdk::{
@@ -12,22 +16,18 @@ use spl_associated_token_account::get_associated_token_address;
1216
use spl_token;
1317
use std::str::FromStr;
1418

19+
use crate::decode::decode;
1520
use crate::derive::derive_metadata_pda;
1621
use crate::parse::parse_keypair;
1722

18-
pub fn burn_one(
19-
client: &RpcClient,
20-
keypair: String,
21-
owner_wallet: String,
22-
mint_address: String,
23-
) -> Result<()> {
23+
pub fn burn_one(client: &RpcClient, keypair: String, mint_address: String) -> Result<()> {
2424
let mint_pubkey = Pubkey::from_str(&mint_address)?;
2525
let keypair = parse_keypair(&keypair)?;
26-
let owner_pubkey = Pubkey::from_str(&owner_wallet)?;
26+
let owner_pubkey = keypair.pubkey();
2727

2828
let sig = burn(client, &keypair, &owner_pubkey, &mint_pubkey, 1)?;
2929

30-
println!("{}", sig);
30+
println!("TxId: {}", sig);
3131

3232
Ok(())
3333
}
@@ -59,24 +59,25 @@ pub fn burn(
5959
&[&signer.pubkey()],
6060
)?;
6161

62-
let metadata_pubkey = derive_metadata_pda(mint_pubkey);
62+
let mut instructions = vec![burn_ix, close_associated_token_account];
6363

64-
let data = default_data();
64+
let metadata: Metadata = decode(client, &mint_pubkey.to_string())?;
6565

66-
let clear_metadata_account = update_metadata_accounts(
67-
id(),
68-
metadata_pubkey,
69-
signer.pubkey(),
70-
None,
71-
Some(data),
72-
None,
73-
);
66+
if signer.pubkey() == metadata.update_authority {
67+
let metadata_pubkey = derive_metadata_pda(mint_pubkey);
7468

75-
let instructions = vec![
76-
burn_ix,
77-
close_associated_token_account,
78-
clear_metadata_account,
79-
];
69+
let data = default_data();
70+
71+
let clear_metadata_account = update_metadata_accounts(
72+
id(),
73+
metadata_pubkey,
74+
signer.pubkey(),
75+
None,
76+
Some(data),
77+
None,
78+
);
79+
instructions.push(clear_metadata_account);
80+
}
8081

8182
let (recent_blockhash, _) = client.get_recent_blockhash()?;
8283
let tx = Transaction::new_signed_with_payer(

src/opt.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,6 @@ pub enum BurnSubcommands {
7878
#[structopt(short, long)]
7979
keypair: String,
8080

81-
/// Owner wallet address
82-
#[structopt(short, long)]
83-
owner_wallet: String,
84-
8581
/// Token mint account
8682
#[structopt(short, long)]
8783
account: String,

src/process_subcommands.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@ use crate::update_metadata::*;
1212

1313
pub fn process_burn(client: &RpcClient, commands: BurnSubcommands) -> Result<()> {
1414
match commands {
15-
BurnSubcommands::One {
16-
keypair,
17-
owner_wallet,
18-
account,
19-
} => burn_one(client, keypair, owner_wallet, account),
15+
BurnSubcommands::One { keypair, account } => burn_one(client, keypair, account),
2016
}
2117
}
2218

0 commit comments

Comments
 (0)