light_merkle_tree_program/instructions/
initialize_new_merkle_trees.rs

1use anchor_lang::prelude::*;
2
3use crate::{
4    event_merkle_tree::EventMerkleTree,
5    transaction_merkle_tree::state::TransactionMerkleTree,
6    utils::constants::{
7        EVENT_MERKLE_TREE_SEED, MERKLE_TREE_AUTHORITY_SEED, TRANSACTION_MERKLE_TREE_SEED,
8    },
9    MerkleTreeAuthority,
10};
11
12#[derive(Accounts)]
13pub struct InitializeNewMerkleTrees<'info> {
14    #[account(mut)]
15    pub authority: Signer<'info>,
16    #[account(
17        init,
18        seeds = [
19            TRANSACTION_MERKLE_TREE_SEED,
20            merkle_tree_authority_pda.transaction_merkle_tree_index.to_le_bytes().as_ref(),
21        ],
22        bump,
23        payer = authority,
24        space = TransactionMerkleTree::LEN,
25    )]
26    pub new_transaction_merkle_tree: AccountLoader<'info, TransactionMerkleTree>,
27    #[account(
28        init,
29        seeds = [
30            EVENT_MERKLE_TREE_SEED,
31            merkle_tree_authority_pda.event_merkle_tree_index.to_le_bytes().as_ref(),
32        ],
33        bump,
34        payer = authority,
35        space = EventMerkleTree::LEN,
36    )]
37    pub new_event_merkle_tree: AccountLoader<'info, EventMerkleTree>,
38    pub system_program: Program<'info, System>,
39    pub rent: Sysvar<'info, Rent>,
40    #[account(mut, seeds = [MERKLE_TREE_AUTHORITY_SEED], bump)]
41    pub merkle_tree_authority_pda: Account<'info, MerkleTreeAuthority>,
42}