gpl_governance/processor/
mod.rs1mod process_add_signatory;
4mod process_cancel_proposal;
5mod process_cast_vote;
6mod process_create_account_governance;
7mod process_create_mint_governance;
8mod process_create_program_governance;
9mod process_create_proposal;
10mod process_create_realm;
11mod process_create_token_governance;
12mod process_create_token_owner_record;
13mod process_deposit_governing_tokens;
14mod process_execute_instruction;
15mod process_finalize_vote;
16mod process_flag_instruction_error;
17mod process_insert_instruction;
18mod process_relinquish_vote;
19mod process_remove_instruction;
20mod process_remove_signatory;
21mod process_set_governance_config;
22mod process_set_governance_delegate;
23mod process_set_realm_authority;
24mod process_set_realm_config;
25mod process_sign_off_proposal;
26mod process_withdraw_governing_tokens;
27
28use crate::instruction::GovernanceInstruction;
29
30use process_add_signatory::*;
31use process_cancel_proposal::*;
32use process_cast_vote::*;
33use process_create_account_governance::*;
34use process_create_mint_governance::*;
35use process_create_program_governance::*;
36use process_create_proposal::*;
37use process_create_realm::*;
38use process_create_token_governance::*;
39use process_create_token_owner_record::*;
40use process_deposit_governing_tokens::*;
41use process_execute_instruction::*;
42use process_finalize_vote::*;
43use process_flag_instruction_error::*;
44use process_insert_instruction::*;
45use process_relinquish_vote::*;
46use process_remove_instruction::*;
47use process_remove_signatory::*;
48use process_set_governance_config::*;
49use process_set_governance_delegate::*;
50use process_set_realm_authority::*;
51use process_set_realm_config::*;
52use process_sign_off_proposal::*;
53use process_withdraw_governing_tokens::*;
54
55use gemachain_program::{
56 account_info::AccountInfo, borsh::try_from_slice_unchecked, entrypoint::ProgramResult, msg,
57 program_error::ProgramError, pubkey::Pubkey,
58};
59
60pub fn process_instruction(
62 program_id: &Pubkey,
63 accounts: &[AccountInfo],
64 input: &[u8],
65) -> ProgramResult {
66 let instruction: GovernanceInstruction =
68 try_from_slice_unchecked(input).map_err(|_| ProgramError::InvalidInstructionData)?;
69
70 if let GovernanceInstruction::InsertInstruction {
71 index,
72 hold_up_time,
73 instruction: _,
74 } = instruction
75 {
76 msg!(
78 "GOVERNANCE-INSTRUCTION: InsertInstruction {{ index: {:?}, hold_up_time: {:?} }}",
79 index,
80 hold_up_time
81 );
82 } else {
83 msg!("GOVERNANCE-INSTRUCTION: {:?}", instruction);
84 }
85
86 match instruction {
87 GovernanceInstruction::CreateRealm { name, config_args } => {
88 process_create_realm(program_id, accounts, name, config_args)
89 }
90
91 GovernanceInstruction::DepositGoverningTokens { amount } => {
92 process_deposit_governing_tokens(program_id, accounts, amount)
93 }
94
95 GovernanceInstruction::WithdrawGoverningTokens {} => {
96 process_withdraw_governing_tokens(program_id, accounts)
97 }
98
99 GovernanceInstruction::SetGovernanceDelegate {
100 new_governance_delegate,
101 } => process_set_governance_delegate(program_id, accounts, &new_governance_delegate),
102
103 GovernanceInstruction::CreateProgramGovernance {
104 config,
105 transfer_upgrade_authority,
106 } => process_create_program_governance(
107 program_id,
108 accounts,
109 config,
110 transfer_upgrade_authority,
111 ),
112
113 GovernanceInstruction::CreateMintGovernance {
114 config,
115 transfer_mint_authority,
116 } => process_create_mint_governance(program_id, accounts, config, transfer_mint_authority),
117
118 GovernanceInstruction::CreateTokenGovernance {
119 config,
120 transfer_token_owner,
121 } => process_create_token_governance(program_id, accounts, config, transfer_token_owner),
122
123 GovernanceInstruction::CreateAccountGovernance { config } => {
124 process_create_account_governance(program_id, accounts, config)
125 }
126
127 GovernanceInstruction::CreateProposal {
128 name,
129 description_link,
130 governing_token_mint,
131 } => process_create_proposal(
132 program_id,
133 accounts,
134 name,
135 description_link,
136 governing_token_mint,
137 ),
138 GovernanceInstruction::AddSignatory { signatory } => {
139 process_add_signatory(program_id, accounts, signatory)
140 }
141 GovernanceInstruction::RemoveSignatory { signatory } => {
142 process_remove_signatory(program_id, accounts, signatory)
143 }
144 GovernanceInstruction::SignOffProposal {} => {
145 process_sign_off_proposal(program_id, accounts)
146 }
147 GovernanceInstruction::CastVote { vote } => process_cast_vote(program_id, accounts, vote),
148
149 GovernanceInstruction::FinalizeVote {} => process_finalize_vote(program_id, accounts),
150
151 GovernanceInstruction::RelinquishVote {} => process_relinquish_vote(program_id, accounts),
152
153 GovernanceInstruction::CancelProposal {} => process_cancel_proposal(program_id, accounts),
154
155 GovernanceInstruction::InsertInstruction {
156 index,
157 hold_up_time,
158 instruction,
159 } => process_insert_instruction(program_id, accounts, index, hold_up_time, instruction),
160
161 GovernanceInstruction::RemoveInstruction {} => {
162 process_remove_instruction(program_id, accounts)
163 }
164 GovernanceInstruction::ExecuteInstruction {} => {
165 process_execute_instruction(program_id, accounts)
166 }
167
168 GovernanceInstruction::SetGovernanceConfig { config } => {
169 process_set_governance_config(program_id, accounts, config)
170 }
171
172 GovernanceInstruction::FlagInstructionError {} => {
173 process_flag_instruction_error(program_id, accounts)
174 }
175 GovernanceInstruction::SetRealmAuthority {
176 new_realm_authority,
177 } => process_set_realm_authority(program_id, accounts, new_realm_authority),
178 GovernanceInstruction::SetRealmConfig { config_args } => {
179 process_set_realm_config(program_id, accounts, config_args)
180 }
181 GovernanceInstruction::CreateTokenOwnerRecord {} => {
182 process_create_token_owner_record(program_id, accounts)
183 }
184 }
185}