Skip to content

Commit 97c40cf

Browse files
committed
CLI for admin remove new claim instruction.
1 parent dbde3d4 commit 97c40cf

File tree

4 files changed

+151
-15
lines changed

4 files changed

+151
-15
lines changed

cli/readme.md

Lines changed: 69 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,65 @@
1-
cargo run -- --mint 4dzPmLDFSpuaCcTUoQjw71Bq8u8RWgHJQcLS63Y8ZrZp \
2-
--rpc-url https://api.devnet.solana.com \
3-
--keypair-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/test.json \
1+
cargo run -- --mint Mant1sZcb8x2YMZe7RdqSfStCj4YxjmQByNKyHpLJK9 \
2+
--rpc-url "https://cosmopolitanism-saltwort-wclzzpyvrk-dedicated.helius-rpc.com/?api-key=21ddfc65-32a5-4870-9654-078d9cfd75db" \
3+
--keypair-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/seed.csv \
44
new-distributor \
5-
--clawback-receiver-token-account 5pT9ijgv2Qpxn4ux4u4crCCJhgAe4w7GoeaCPJKgP4NW \
6-
--start-vesting-ts 1738958910 \
7-
--end-vesting-ts 1739317492 \
8-
--merkle-tree-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/test_csv.csv \
9-
--clawback-start-ts 1739458492
5+
--clawback-receiver-token-account PYsq43ovMAvj3yuiF7jgfcfbCgASapELHKAQPDS6WfU \
6+
--start-vesting-ts 1739226501 \
7+
--end-vesting-ts 1802721780 \
8+
--merkle-tree-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/seed.csv \
9+
--clawback-start-ts 1802809200
10+
11+
12+
cargo run -- --mint Mant1sZcb8x2YMZe7RdqSfStCj4YxjmQByNKyHpLJK9 \
13+
--rpc-url "https://mainnet.helius-rpc.com/?api-key=40963904-fc44-47f3-bed3-f01a0047f70a" \
14+
--keypair-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/solvers.csv \
15+
new-distributor \
16+
--clawback-receiver-token-account PYsq43ovMAvj3yuiF7jgfcfbCgASapELHKAQPDS6WfU \
17+
--start-vesting-ts 1739270610 \
18+
--end-vesting-ts 1746960210 \
19+
--merkle-tree-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/solvers.csv \
20+
--clawback-start-ts 1747050225
21+
22+
cargo run -- --mint Mant1sZcb8x2YMZe7RdqSfStCj4YxjmQByNKyHpLJK9 \
23+
--rpc-url "https://cosmopolitanism-saltwort-wclzzpyvrk-dedicated.helius-rpc.com/?api-key=21ddfc65-32a5-4870-9654-078d9cfd75db" \
24+
--keypair-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/angels.csv \
25+
new-distributor \
26+
--clawback-receiver-token-account PYsq43ovMAvj3yuiF7jgfcfbCgASapELHKAQPDS6WfU \
27+
--start-vesting-ts 1739265171 \
28+
--end-vesting-ts 1802337171 \
29+
--merkle-tree-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/angels.csv \
30+
--clawback-start-ts 1802423571
31+
32+
cargo run -- --mint Mant1sZcb8x2YMZe7RdqSfStCj4YxjmQByNKyHpLJK9 \
33+
--rpc-url "https://cosmopolitanism-saltwort-wclzzpyvrk-dedicated.helius-rpc.com/?api-key=21ddfc65-32a5-4870-9654-078d9cfd75db" \
34+
--keypair-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/advisors.csv \
35+
new-distributor \
36+
--clawback-receiver-token-account PYsq43ovMAvj3yuiF7jgfcfbCgASapELHKAQPDS6WfU \
37+
--start-vesting-ts 1739269222 \
38+
--end-vesting-ts 1814434953 \
39+
--merkle-tree-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/advisors.csv \
40+
--clawback-start-ts 1814521353
41+
42+
43+
cargo run -- --mint Mant1sZcb8x2YMZe7RdqSfStCj4YxjmQByNKyHpLJK9 \
44+
--rpc-url "https://cosmopolitanism-saltwort-wclzzpyvrk-dedicated.helius-rpc.com/?api-key=21ddfc65-32a5-4870-9654-078d9cfd75db" \
45+
--keypair-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/cliff.csv \
46+
new-distributor \
47+
--clawback-receiver-token-account PYsq43ovMAvj3yuiF7jgfcfbCgASapELHKAQPDS6WfU \
48+
--start-vesting-ts 1751017353 \
49+
--end-vesting-ts 1829900553 \
50+
--merkle-tree-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/cliff.csv \
51+
--clawback-start-ts 1829986953
52+
53+
54+
cargo run -- --mint Mant1sZcb8x2YMZe7RdqSfStCj4YxjmQByNKyHpLJK9 \
55+
--rpc-url "https://cosmopolitanism-saltwort-wclzzpyvrk-dedicated.helius-rpc.com/?api-key=21ddfc65-32a5-4870-9654-078d9cfd75db" \
56+
--keypair-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/seriesaangular.csv \
57+
new-distributor \
58+
--clawback-receiver-token-account PYsq43ovMAvj3yuiF7jgfcfbCgASapELHKAQPDS6WfU \
59+
--start-vesting-ts 1754937145 \
60+
--end-vesting-ts 1818009145 \
61+
--merkle-tree-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/seriesaangular.csv \
62+
--clawback-start-ts 1818095545
1063

1164

1265

@@ -15,3 +68,11 @@ cargo run -- --mint Mant1sZcb8x2YMZe7RdqSfStCj4YxjmQByNKyHpLJK9 \
1568
--keypair-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/seed.csv \
1669
claim \
1770
--merkle-tree-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/seed.csv
71+
72+
73+
cargo run -- --mint Mant1sZcb8x2YMZe7RdqSfStCj4YxjmQByNKyHpLJK9 \
74+
--rpc-url "https://cosmopolitanism-saltwort-wclzzpyvrk-dedicated.helius-rpc.com/?api-key=21ddfc65-32a5-4870-9654-078d9cfd75db" \
75+
--keypair-path /Users/mykyta/development/composable/mantis-staking-program/solana/merkle-tree/test_fixtures/seriesaangular.csv \
76+
clawback-now \
77+
--amount 1331285000000000
78+

cli/src/bin/cli.rs

Lines changed: 78 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ pub enum Commands {
6666
ClawbackNow(ClawbackNowArgs),
6767
/// Create a Merkle tree, given a CSV of recipients
6868
CreateMerkleTree(CreateMerkleTreeArgs),
69+
AdminRemoveNewClaim(ClaimArgs),
6970
SetAdmin(SetAdminArgs),
7071
}
7172

@@ -77,6 +78,10 @@ pub struct ClaimArgs {
7778
pub merkle_tree_path: PathBuf,
7879
}
7980

81+
#[derive(Parser, Debug)]
82+
pub struct AdminRemoveNewClaim {
83+
}
84+
8085
// NewDistributor subcommand args
8186
#[derive(Parser, Debug)]
8287
pub struct NewDistributorArgs {
@@ -135,7 +140,7 @@ fn main() {
135140
// let mint = Pubkey::from_str("Mant1sZcb8x2YMZe7RdqSfStCj4YxjmQByNKyHpLJK9").unwrap();
136141
// // let escrow = Pubkey::from_str("HnCv1EJJ2sMN55TUDMLGJgSRf4MKvorQn8s1QGdpTqZy").unwrap();
137142
// // let escrow = Pubkey::from_str("57FXFvcgAYxvoWK7TyjtYjNx3sTG6vRFpoEUqs1Tj6Qu").unwrap();
138-
// let programid = Pubkey::from_str("DSfM7SNVJhQBZAznaoJuR3ZKsvVnz7FHWxwR1yCEfUiV").unwrap();
143+
// let programid = Pubkey::from_str("A7rDhNV2tVn5gS7g3yWeZAFpsixKXmRdjqHtLXLnYy41").unwrap();
139144

140145
// let (distributor, _bump) =
141146
// get_merkle_distributor_pda(&programid, &mint, 0);
@@ -161,6 +166,9 @@ fn main() {
161166
Commands::SetAdmin(set_admin_args) => {
162167
process_set_admin(&args, set_admin_args);
163168
}
169+
Commands::AdminRemoveNewClaim(args2) => {
170+
admin_remove_new_claim(&args, args2);
171+
}
164172
}
165173
}
166174

@@ -338,6 +346,73 @@ fn process_claim(args: &Args, claim_args: &ClaimArgs) {
338346
println!("successfully claimed tokens with signature {signature:#?}",);
339347
}
340348

349+
fn admin_remove_new_claim(args: &Args, claim_args: &ClaimArgs) {
350+
use dotenv::dotenv;
351+
dotenv().ok();
352+
353+
let env_siner_private_key = std::env::var("SIGNER_PRIV_KEY").expect("SIGNER_PRIV_KEY must be set.");
354+
let private_key_bytes = bs58::decode(env_siner_private_key).into_vec().unwrap();
355+
356+
let keypair = Keypair::from_bytes(&private_key_bytes).unwrap();
357+
println!("This is pubkey {}", keypair.pubkey().to_string());
358+
359+
let claimant = keypair.pubkey();
360+
361+
let claimant_wallet = Pubkey::from_str("G6JbPX7UxrxukQbpXSjPDTeRzoCRRyvZixtrbHGoy1pd").unwrap();
362+
363+
let (distributor, bump) =
364+
get_merkle_distributor_pda(&args.program_id, &args.mint, args.airdrop_version);
365+
println!("distributor pubkey {}", distributor);
366+
367+
let (claim_status_pda, _bump) = get_claim_status_pda(&args.program_id, &claimant_wallet, &distributor);
368+
println!("claim pda: {claim_status_pda}, bump: {bump}");
369+
370+
let client = RpcClient::new_with_commitment(&args.rpc_url, CommitmentConfig::confirmed());
371+
372+
let merkle_tree = AirdropMerkleTree::new_from_csv(&claim_args.merkle_tree_path)
373+
.expect("failed to load merkle tree from file");
374+
375+
376+
let node = merkle_tree.get_node(&claimant_wallet);
377+
378+
let clawback_ata = Pubkey::from_str("PYsq43ovMAvj3yuiF7jgfcfbCgASapELHKAQPDS6WfU").unwrap();
379+
let clawback_ata = get_associated_token_address(&clawback_ata, &args.mint);
380+
381+
let remove_admin_claim = Instruction {
382+
program_id: args.program_id,
383+
accounts: merkle_distributor::accounts::RemoveNewClaim {
384+
distributor,
385+
claim_status: claim_status_pda,
386+
from: get_associated_token_address(&distributor, &args.mint),
387+
to: clawback_ata,
388+
token_program: token::ID,
389+
admin: keypair.pubkey(),
390+
system_program: solana_program::system_program::ID,
391+
}
392+
.to_account_metas(None),
393+
data: merkle_distributor::instruction::AdminRemoveNewClaim {
394+
claimant: claimant_wallet,
395+
amount_unlocked: node.amount_unlocked(),
396+
amount_locked: node.amount_locked(),
397+
proof: node.proof.unwrap(),
398+
399+
}.data(),
400+
};
401+
402+
let tx = Transaction::new_signed_with_payer(
403+
&[remove_admin_claim],
404+
Some(&keypair.pubkey()),
405+
&[&keypair],
406+
client.get_latest_blockhash().unwrap(),
407+
);
408+
409+
let signature = client
410+
.send_and_confirm_transaction_with_spinner(&tx)
411+
.unwrap();
412+
413+
println!("Successfully remove claim admin! signature: {signature:#?}");
414+
}
415+
341416
fn check_distributor_onchain_matches(
342417
account: &Account,
343418
merkle_tree: &AirdropMerkleTree,
@@ -545,7 +620,7 @@ fn process_clawback_now(args: &Args, clawback_args: &ClawbackNowArgs) {
545620
distributor,
546621
from,
547622
to: clawback_ata,
548-
claimant: keypair.pubkey(),
623+
admin: keypair.pubkey(),
549624
system_program: solana_program::system_program::ID,
550625
token_program: token::ID,
551626
}
@@ -558,7 +633,7 @@ fn process_clawback_now(args: &Args, clawback_args: &ClawbackNowArgs) {
558633
let tx = Transaction::new_signed_with_payer(
559634
&[clawback_ix],
560635
Some(&keypair.pubkey()),
561-
&[&keypair, &keypair],
636+
&[&keypair],
562637
client.get_latest_blockhash().unwrap(),
563638
);
564639

programs/merkle-distributor/src/instructions/remove_new_claim.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,10 @@ pub struct RemoveNewClaim<'info> {
7979
#[allow(clippy::result_large_err)]
8080
pub fn handle_admin_remove_new_claim(
8181
ctx: Context<RemoveNewClaim>,
82+
claimant: Pubkey,
8283
amount_unlocked: u64,
8384
amount_locked: u64,
8485
proof: Vec<[u8; 32]>,
85-
claimant: Pubkey,
8686
) -> Result<()> {
8787
let distributor = &mut ctx.accounts.distributor;
8888

programs/merkle-distributor/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ security_txt! {
3030
source_code: "https://github.com/jito-foundation/distributor"
3131
}
3232

33-
declare_id!("DSfM7SNVJhQBZAznaoJuR3ZKsvVnz7FHWxwR1yCEfUiV");
33+
declare_id!("HZgU97aM4kvTehjqqXqnvSZL74jHEJaD6QYafkVPPM7G");
3434

3535
#[program]
3636
pub mod merkle_distributor {
@@ -109,12 +109,12 @@ pub mod merkle_distributor {
109109
#[allow(clippy::result_large_err)]
110110
pub fn admin_remove_new_claim(
111111
ctx: Context<RemoveNewClaim>,
112+
claimant: Pubkey,
112113
amount_unlocked: u64,
113114
amount_locked: u64,
114115
proof: Vec<[u8; 32]>,
115-
claimant: Pubkey,
116116
) -> Result<()> {
117-
handle_admin_remove_new_claim(ctx, amount_unlocked, amount_locked, proof, claimant)
117+
handle_admin_remove_new_claim(ctx, claimant, amount_unlocked, amount_locked, proof)
118118
}
119119

120120
#[allow(clippy::result_large_err)]

0 commit comments

Comments
 (0)