squads_multisig/
pda.rs

1use squads_multisig_program::{
2    SEED_EPHEMERAL_SIGNER, SEED_MULTISIG, SEED_PREFIX, SEED_PROGRAM_CONFIG, SEED_PROPOSAL,
3    SEED_SPENDING_LIMIT, SEED_TRANSACTION, SEED_VAULT,
4};
5
6use crate::solana_program::pubkey::Pubkey;
7
8pub fn get_program_config_pda(program_id: Option<&Pubkey>) -> (Pubkey, u8) {
9    Pubkey::find_program_address(
10        &[SEED_PREFIX, SEED_PROGRAM_CONFIG],
11        program_id.unwrap_or(&squads_multisig_program::ID),
12    )
13}
14
15pub fn get_multisig_pda(create_key: &Pubkey, program_id: Option<&Pubkey>) -> (Pubkey, u8) {
16    Pubkey::find_program_address(
17        &[SEED_PREFIX, SEED_MULTISIG, create_key.to_bytes().as_ref()],
18        program_id.unwrap_or(&squads_multisig_program::ID),
19    )
20}
21
22pub fn get_vault_pda(
23    multisig_pda: &Pubkey,
24    index: u8,
25    program_id: Option<&Pubkey>,
26) -> (Pubkey, u8) {
27    Pubkey::find_program_address(
28        &[
29            SEED_PREFIX,
30            multisig_pda.to_bytes().as_ref(),
31            SEED_VAULT,
32            &[index],
33        ],
34        program_id.unwrap_or(&squads_multisig_program::ID),
35    )
36}
37
38pub fn get_transaction_pda(
39    multisig_pda: &Pubkey,
40    transaction_index: u64,
41    program_id: Option<&Pubkey>,
42) -> (Pubkey, u8) {
43    Pubkey::find_program_address(
44        &[
45            SEED_PREFIX,
46            multisig_pda.to_bytes().as_ref(),
47            SEED_TRANSACTION,
48            transaction_index.to_le_bytes().as_ref(),
49        ],
50        program_id.unwrap_or(&squads_multisig_program::ID),
51    )
52}
53
54pub fn get_proposal_pda(
55    multisig_pda: &Pubkey,
56    transaction_index: u64,
57    program_id: Option<&Pubkey>,
58) -> (Pubkey, u8) {
59    Pubkey::find_program_address(
60        &[
61            SEED_PREFIX,
62            multisig_pda.to_bytes().as_ref(),
63            SEED_TRANSACTION,
64            &transaction_index.to_le_bytes(),
65            SEED_PROPOSAL,
66        ],
67        program_id.unwrap_or(&squads_multisig_program::ID),
68    )
69}
70
71pub fn get_spending_limit_pda(
72    multisig_pda: &Pubkey,
73    create_key: &Pubkey,
74    program_id: Option<&Pubkey>,
75) -> (Pubkey, u8) {
76    Pubkey::find_program_address(
77        &[
78            SEED_PREFIX,
79            multisig_pda.to_bytes().as_ref(),
80            SEED_SPENDING_LIMIT,
81            create_key.to_bytes().as_ref(),
82        ],
83        program_id.unwrap_or(&squads_multisig_program::ID),
84    )
85}
86
87pub fn get_ephemeral_signer_pda(
88    transaction_pda: &Pubkey,
89    ephemeral_signer_index: u8,
90    program_id: Option<&Pubkey>,
91) -> (Pubkey, u8) {
92    Pubkey::find_program_address(
93        &[
94            SEED_PREFIX,
95            &transaction_pda.to_bytes(),
96            SEED_EPHEMERAL_SIGNER,
97            &ephemeral_signer_index.to_le_bytes(),
98        ],
99        program_id.unwrap_or(&squads_multisig_program::ID),
100    )
101}