spl_governance/processor/
mod.rs1mod process_add_required_signatory;
4mod process_add_signatory;
5mod process_cancel_proposal;
6mod process_cast_vote;
7mod process_complete_proposal;
8mod process_create_governance;
9mod process_create_mint_governance;
10mod process_create_native_treasury;
11mod process_create_program_governance;
12mod process_create_proposal;
13mod process_create_realm;
14mod process_create_token_governance;
15mod process_create_token_owner_record;
16mod process_deposit_governing_tokens;
17mod process_execute_transaction;
18mod process_finalize_vote;
19mod process_flag_transaction_error;
20mod process_insert_transaction;
21mod process_refund_proposal_deposit;
22mod process_relinquish_vote;
23mod process_remove_required_signatory;
24mod process_remove_transaction;
25mod process_revoke_governing_tokens;
26mod process_set_governance_config;
27mod process_set_governance_delegate;
28mod process_set_realm_authority;
29mod process_set_realm_config;
30mod process_sign_off_proposal;
31mod process_update_program_metadata;
32mod process_withdraw_governing_tokens;
33
34use {
35 crate::{error::GovernanceError, instruction::GovernanceInstruction},
36 process_add_required_signatory::*,
37 process_add_signatory::*,
38 process_cancel_proposal::*,
39 process_cast_vote::*,
40 process_complete_proposal::*,
41 process_create_governance::*,
42 process_create_mint_governance::*,
43 process_create_native_treasury::*,
44 process_create_program_governance::*,
45 process_create_proposal::*,
46 process_create_realm::*,
47 process_create_token_governance::*,
48 process_create_token_owner_record::*,
49 process_deposit_governing_tokens::*,
50 process_execute_transaction::*,
51 process_finalize_vote::*,
52 process_flag_transaction_error::*,
53 process_insert_transaction::*,
54 process_refund_proposal_deposit::*,
55 process_relinquish_vote::*,
56 process_remove_required_signatory::*,
57 process_remove_transaction::*,
58 process_revoke_governing_tokens::*,
59 process_set_governance_config::*,
60 process_set_governance_delegate::*,
61 process_set_realm_authority::*,
62 process_set_realm_config::*,
63 process_sign_off_proposal::*,
64 process_update_program_metadata::*,
65 process_withdraw_governing_tokens::*,
66 solana_program::{
67 account_info::AccountInfo, borsh0_10::try_from_slice_unchecked, entrypoint::ProgramResult,
68 msg, program_error::ProgramError, pubkey::Pubkey,
69 },
70};
71
72pub fn process_instruction(
74 program_id: &Pubkey,
75 accounts: &[AccountInfo],
76 input: &[u8],
77) -> ProgramResult {
78 msg!("VERSION:{:?}", env!("CARGO_PKG_VERSION"));
79 let instruction: GovernanceInstruction =
82 try_from_slice_unchecked(input).map_err(|_| ProgramError::InvalidInstructionData)?;
83
84 if let GovernanceInstruction::InsertTransaction {
85 option_index,
86 index,
87 hold_up_time,
88 instructions: _,
89 } = instruction
90 {
91 msg!(
93 "GOVERNANCE-INSTRUCTION: InsertInstruction {{option_index: {:?}, index: {:?}, hold_up_time: {:?} }}",
94 option_index,
95 index,
96 hold_up_time
97 );
98 } else {
99 msg!("GOVERNANCE-INSTRUCTION: {:?}", instruction);
100 }
101
102 match instruction {
103 GovernanceInstruction::CreateRealm { name, config_args } => {
104 process_create_realm(program_id, accounts, name, config_args)
105 }
106
107 GovernanceInstruction::DepositGoverningTokens { amount } => {
108 process_deposit_governing_tokens(program_id, accounts, amount)
109 }
110
111 GovernanceInstruction::WithdrawGoverningTokens {} => {
112 process_withdraw_governing_tokens(program_id, accounts)
113 }
114
115 GovernanceInstruction::SetGovernanceDelegate {
116 new_governance_delegate,
117 } => process_set_governance_delegate(program_id, accounts, &new_governance_delegate),
118
119 GovernanceInstruction::CreateProgramGovernance {
120 config,
121 transfer_upgrade_authority,
122 } => process_create_program_governance(
123 program_id,
124 accounts,
125 config,
126 transfer_upgrade_authority,
127 ),
128
129 GovernanceInstruction::CreateMintGovernance {
130 config,
131 transfer_mint_authorities,
132 } => {
133 process_create_mint_governance(program_id, accounts, config, transfer_mint_authorities)
134 }
135
136 GovernanceInstruction::CreateTokenGovernance {
137 config,
138 transfer_account_authorities,
139 } => process_create_token_governance(
140 program_id,
141 accounts,
142 config,
143 transfer_account_authorities,
144 ),
145
146 GovernanceInstruction::CreateGovernance { config } => {
147 process_create_governance(program_id, accounts, config)
148 }
149
150 GovernanceInstruction::CreateProposal {
151 name,
152 description_link,
153 vote_type: proposal_type,
154 options,
155 use_deny_option,
156 proposal_seed,
157 } => process_create_proposal(
158 program_id,
159 accounts,
160 name,
161 description_link,
162 proposal_type,
163 options,
164 use_deny_option,
165 proposal_seed,
166 ),
167 GovernanceInstruction::AddSignatory { signatory } => {
168 process_add_signatory(program_id, accounts, signatory)
169 }
170 GovernanceInstruction::Legacy1 => {
171 Err(GovernanceError::InstructionDeprecated.into()) }
173 GovernanceInstruction::SignOffProposal {} => {
174 process_sign_off_proposal(program_id, accounts)
175 }
176 GovernanceInstruction::CastVote { vote } => process_cast_vote(program_id, accounts, vote),
177
178 GovernanceInstruction::FinalizeVote {} => process_finalize_vote(program_id, accounts),
179
180 GovernanceInstruction::RelinquishVote {} => process_relinquish_vote(program_id, accounts),
181
182 GovernanceInstruction::CancelProposal {} => process_cancel_proposal(program_id, accounts),
183
184 GovernanceInstruction::InsertTransaction {
185 option_index,
186 index,
187 hold_up_time,
188 instructions,
189 } => process_insert_transaction(
190 program_id,
191 accounts,
192 option_index,
193 index,
194 hold_up_time,
195 instructions,
196 ),
197
198 GovernanceInstruction::RemoveTransaction {} => {
199 process_remove_transaction(program_id, accounts)
200 }
201 GovernanceInstruction::ExecuteTransaction {} => {
202 process_execute_transaction(program_id, accounts)
203 }
204
205 GovernanceInstruction::SetGovernanceConfig { config } => {
206 process_set_governance_config(program_id, accounts, config)
207 }
208
209 GovernanceInstruction::FlagTransactionError {} => {
210 process_flag_transaction_error(program_id, accounts)
211 }
212 GovernanceInstruction::SetRealmAuthority { action } => {
213 process_set_realm_authority(program_id, accounts, action)
214 }
215 GovernanceInstruction::SetRealmConfig { config_args } => {
216 process_set_realm_config(program_id, accounts, config_args)
217 }
218 GovernanceInstruction::CreateTokenOwnerRecord {} => {
219 process_create_token_owner_record(program_id, accounts)
220 }
221 GovernanceInstruction::UpdateProgramMetadata {} => {
222 process_update_program_metadata(program_id, accounts)
223 }
224 GovernanceInstruction::CreateNativeTreasury {} => {
225 process_create_native_treasury(program_id, accounts)
226 }
227
228 GovernanceInstruction::RevokeGoverningTokens { amount } => {
229 process_revoke_governing_tokens(program_id, accounts, amount)
230 }
231
232 GovernanceInstruction::RefundProposalDeposit {} => {
233 process_refund_proposal_deposit(program_id, accounts)
234 }
235
236 GovernanceInstruction::CompleteProposal {} => {
237 process_complete_proposal(program_id, accounts)
238 }
239
240 GovernanceInstruction::AddRequiredSignatory { signatory } => {
241 process_add_required_signatory(program_id, accounts, signatory)
242 }
243 GovernanceInstruction::RemoveRequiredSignatory => {
244 process_remove_required_signatory(program_id, accounts)
245 }
246 }
247}