@@ -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 ) ]
110117pub struct CreateMerkleTreeArgs {
111118 /// CSV path
@@ -124,6 +131,19 @@ pub struct SetAdminArgs {
124131}
125132
126133fn 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+
495572fn 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