Skip to content

Commit dbde3d4

Browse files
committed
add clawback now cli
1 parent 2e0a1f3 commit dbde3d4

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

cli/src/bin/cli.rs

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ pub enum Commands {
6363
/// Clawback tokens from merkle distributor
6464
#[clap(hide = true)]
6565
Clawback(ClawbackArgs),
66+
ClawbackNow(ClawbackNowArgs),
6667
/// Create a Merkle tree, given a CSV of recipients
6768
CreateMerkleTree(CreateMerkleTreeArgs),
6869
SetAdmin(SetAdminArgs),
@@ -106,6 +107,12 @@ pub struct ClawbackArgs {
106107
pub clawback_keypair_path: PathBuf,
107108
}
108109

110+
#[derive(Parser, Debug)]
111+
pub struct ClawbackNowArgs {
112+
#[clap(long, env)]
113+
pub amount: u64,
114+
}
115+
109116
#[derive(Parser, Debug)]
110117
pub struct CreateMerkleTreeArgs {
111118
/// CSV path
@@ -124,6 +131,19 @@ pub struct SetAdminArgs {
124131
}
125132

126133
fn main() {
134+
135+
// let mint = Pubkey::from_str("Mant1sZcb8x2YMZe7RdqSfStCj4YxjmQByNKyHpLJK9").unwrap();
136+
// // let escrow = Pubkey::from_str("HnCv1EJJ2sMN55TUDMLGJgSRf4MKvorQn8s1QGdpTqZy").unwrap();
137+
// // let escrow = Pubkey::from_str("57FXFvcgAYxvoWK7TyjtYjNx3sTG6vRFpoEUqs1Tj6Qu").unwrap();
138+
// let programid = Pubkey::from_str("DSfM7SNVJhQBZAznaoJuR3ZKsvVnz7FHWxwR1yCEfUiV").unwrap();
139+
140+
// let (distributor, _bump) =
141+
// get_merkle_distributor_pda(&programid, &mint, 0);
142+
143+
// let from = get_associated_token_address(&distributor, &mint);
144+
// println!("from: {from}");
145+
// return;
146+
127147
let args = Args::parse();
128148

129149
match &args.command {
@@ -134,6 +154,7 @@ fn main() {
134154
process_claim(&args, claim_args);
135155
}
136156
Commands::Clawback(clawback_args) => process_clawback(&args, clawback_args),
157+
Commands::ClawbackNow(clawback_args) => process_clawback_now(&args, clawback_args),
137158
Commands::CreateMerkleTree(merkle_tree_args) => {
138159
process_create_merkle_tree(merkle_tree_args);
139160
}
@@ -492,6 +513,62 @@ fn process_clawback(args: &Args, clawback_args: &ClawbackArgs) {
492513
println!("Successfully clawed back funds! signature: {signature:#?}");
493514
}
494515

516+
fn process_clawback_now(args: &Args, clawback_args: &ClawbackNowArgs) {
517+
use dotenv::dotenv;
518+
dotenv().ok();
519+
520+
let env_siner_private_key = std::env::var("SIGNER_PRIV_KEY").expect("SIGNER_PRIV_KEY must be set.");
521+
let private_key_bytes = bs58::decode(env_siner_private_key).into_vec().unwrap();
522+
523+
let keypair = Keypair::from_bytes(&private_key_bytes).unwrap();
524+
println!("This is pubkey {}", keypair.pubkey().to_string());
525+
// let payer_keypair = read_keypair_file(&args.keypair_path).expect("Failed reading keypair file");
526+
// let clawback_keypair = read_keypair_file(&clawback_args.clawback_keypair_path)
527+
// .expect("Failed reading keypair file");
528+
529+
// let clawback_ata = get_associated_token_address(&clawback_keypair.pubkey(), &args.mint);
530+
let clawback_ata = Pubkey::from_str("PYsq43ovMAvj3yuiF7jgfcfbCgASapELHKAQPDS6WfU").unwrap();
531+
let clawback_ata = get_associated_token_address(&clawback_ata, &args.mint);
532+
533+
534+
let client = RpcClient::new_with_commitment(&args.rpc_url, CommitmentConfig::confirmed());
535+
536+
let (distributor, _bump) =
537+
get_merkle_distributor_pda(&args.program_id, &args.mint, args.airdrop_version);
538+
539+
let from = get_associated_token_address(&distributor, &args.mint);
540+
println!("from: {from}");
541+
542+
let clawback_ix = Instruction {
543+
program_id: args.program_id,
544+
accounts: merkle_distributor::accounts::ClawbackNow {
545+
distributor,
546+
from,
547+
to: clawback_ata,
548+
claimant: keypair.pubkey(),
549+
system_program: solana_program::system_program::ID,
550+
token_program: token::ID,
551+
}
552+
.to_account_metas(None),
553+
data: merkle_distributor::instruction::ClawbackNow {
554+
amount: clawback_args.amount,
555+
}.data(),
556+
};
557+
558+
let tx = Transaction::new_signed_with_payer(
559+
&[clawback_ix],
560+
Some(&keypair.pubkey()),
561+
&[&keypair, &keypair],
562+
client.get_latest_blockhash().unwrap(),
563+
);
564+
565+
let signature = client
566+
.send_and_confirm_transaction_with_spinner(&tx)
567+
.unwrap();
568+
569+
println!("Successfully clawed back funds! signature: {signature:#?}");
570+
}
571+
495572
fn process_create_merkle_tree(merkle_tree_args: &CreateMerkleTreeArgs) {
496573
let merkle_tree = AirdropMerkleTree::new_from_csv(&merkle_tree_args.csv_path).unwrap();
497574
merkle_tree.write_to_file(&merkle_tree_args.merkle_tree_path);

0 commit comments

Comments
 (0)