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}