light_merkle_tree_program/verifier_invoked_instructions/
insert_nullifier.rs1use anchor_lang::{
2 prelude::*,
3 solana_program::{pubkey::Pubkey, sysvar},
4};
5
6use crate::{
7 utils::{accounts::create_and_check_pda, constants::NULLIFIER_SEED},
8 RegisteredVerifier,
9};
10
11#[derive(Accounts)]
12pub struct InitializeNullifiers<'info> {
13 #[account(mut, seeds=[__program_id.to_bytes().as_ref()], bump,seeds::program=registered_verifier_pda.pubkey)]
15 pub authority: Signer<'info>,
16 pub system_program: Program<'info, System>,
17 #[account(seeds=[®istered_verifier_pda.pubkey.to_bytes()], bump )]
18 pub registered_verifier_pda: Account<'info, RegisteredVerifier>, }
20
21pub fn process_insert_nullifiers<'info>(
23 ctx: Context<'_, '_, '_, 'info, InitializeNullifiers<'info>>,
24 nullifiers: Vec<[u8; 32]>,
25) -> Result<()> {
26 let rent = <Rent as sysvar::Sysvar>::get()?;
27
28 for (nullifier_pda, nullifier) in ctx.remaining_accounts.iter().zip(nullifiers) {
29 create_and_check_pda(
30 ctx.program_id,
31 &ctx.accounts.authority.to_account_info(),
32 &nullifier_pda.to_account_info(),
33 &ctx.accounts.system_program.to_account_info(),
34 &rent,
35 &nullifier,
36 NULLIFIER_SEED,
37 1, 0, true, )
41 .unwrap();
42 nullifier_pda.to_account_info().data.borrow_mut()[0] = 1u8;
43 }
44 Ok(())
45}