@@ -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 ) ]
8287pub 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+
341416fn 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
0 commit comments