1use {
2 super::*,
3 solana_instruction::Instruction,
4 solana_program_runtime::cpi::{
5 cpi_common, translate_accounts_c, translate_accounts_rust, translate_instruction_c,
6 translate_instruction_rust, translate_signers_c, translate_signers_rust,
7 SyscallInvokeSigned, TranslatedAccount,
8 },
9};
10
11declare_builtin_function!(
12 SyscallInvokeSignedRust,
14 fn rust(
15 invoke_context: &mut InvokeContext,
16 instruction_addr: u64,
17 account_infos_addr: u64,
18 account_infos_len: u64,
19 signers_seeds_addr: u64,
20 signers_seeds_len: u64,
21 memory_mapping: &mut MemoryMapping,
22 ) -> Result<u64, Error> {
23 cpi_common::<Self>(
24 invoke_context,
25 instruction_addr,
26 account_infos_addr,
27 account_infos_len,
28 signers_seeds_addr,
29 signers_seeds_len,
30 memory_mapping,
31 )
32 }
33);
34
35impl SyscallInvokeSigned for SyscallInvokeSignedRust {
36 fn translate_instruction(
37 addr: u64,
38 memory_mapping: &MemoryMapping,
39 invoke_context: &mut InvokeContext,
40 check_aligned: bool,
41 ) -> Result<Instruction, Error> {
42 translate_instruction_rust(addr, memory_mapping, invoke_context, check_aligned)
43 }
44
45 fn translate_accounts<'a>(
46 account_infos_addr: u64,
47 account_infos_len: u64,
48 memory_mapping: &MemoryMapping<'_>,
49 invoke_context: &mut InvokeContext,
50 check_aligned: bool,
51 ) -> Result<Vec<TranslatedAccount<'a>>, Error> {
52 translate_accounts_rust(
53 account_infos_addr,
54 account_infos_len,
55 memory_mapping,
56 invoke_context,
57 check_aligned,
58 )
59 }
60
61 fn translate_signers(
62 program_id: &Pubkey,
63 signers_seeds_addr: u64,
64 signers_seeds_len: u64,
65 memory_mapping: &MemoryMapping,
66 check_aligned: bool,
67 ) -> Result<Vec<Pubkey>, Error> {
68 translate_signers_rust(
69 program_id,
70 signers_seeds_addr,
71 signers_seeds_len,
72 memory_mapping,
73 check_aligned,
74 )
75 }
76}
77
78declare_builtin_function!(
79 SyscallInvokeSignedC,
81 fn rust(
82 invoke_context: &mut InvokeContext,
83 instruction_addr: u64,
84 account_infos_addr: u64,
85 account_infos_len: u64,
86 signers_seeds_addr: u64,
87 signers_seeds_len: u64,
88 memory_mapping: &mut MemoryMapping,
89 ) -> Result<u64, Error> {
90 cpi_common::<Self>(
91 invoke_context,
92 instruction_addr,
93 account_infos_addr,
94 account_infos_len,
95 signers_seeds_addr,
96 signers_seeds_len,
97 memory_mapping,
98 )
99 }
100);
101
102impl SyscallInvokeSigned for SyscallInvokeSignedC {
103 fn translate_instruction(
104 addr: u64,
105 memory_mapping: &MemoryMapping,
106 invoke_context: &mut InvokeContext,
107 check_aligned: bool,
108 ) -> Result<Instruction, Error> {
109 translate_instruction_c(addr, memory_mapping, invoke_context, check_aligned)
110 }
111
112 fn translate_accounts<'a>(
113 account_infos_addr: u64,
114 account_infos_len: u64,
115 memory_mapping: &MemoryMapping<'_>,
116 invoke_context: &mut InvokeContext,
117 check_aligned: bool,
118 ) -> Result<Vec<TranslatedAccount<'a>>, Error> {
119 translate_accounts_c(
120 account_infos_addr,
121 account_infos_len,
122 memory_mapping,
123 invoke_context,
124 check_aligned,
125 )
126 }
127
128 fn translate_signers(
129 program_id: &Pubkey,
130 signers_seeds_addr: u64,
131 signers_seeds_len: u64,
132 memory_mapping: &MemoryMapping,
133 check_aligned: bool,
134 ) -> Result<Vec<Pubkey>, Error> {
135 translate_signers_c(
136 program_id,
137 signers_seeds_addr,
138 signers_seeds_len,
139 memory_mapping,
140 check_aligned,
141 )
142 }
143}