1use {
2 super::*,
3 solana_instruction::Instruction,
4 solana_program_runtime::cpi::{
5 SyscallInvokeSigned, TranslatedAccount, cpi_common, translate_accounts_c,
6 translate_accounts_rust, translate_instruction_c, translate_instruction_rust,
7 },
8};
9
10declare_builtin_function!(
11 SyscallInvokeSignedRust,
13 fn rust(
14 invoke_context: &mut InvokeContext<'_, '_>,
15 instruction_addr: u64,
16 account_infos_addr: u64,
17 account_infos_len: u64,
18 signers_seeds_addr: u64,
19 signers_seeds_len: u64,
20 ) -> Result<u64, Error> {
21 cpi_common::<Self>(
22 invoke_context,
23 instruction_addr,
24 account_infos_addr,
25 account_infos_len,
26 signers_seeds_addr,
27 signers_seeds_len,
28 )
29 }
30);
31
32impl SyscallInvokeSigned for SyscallInvokeSignedRust {
33 fn translate_instruction(
34 addr: u64,
35 invoke_context: &InvokeContext,
36 ) -> Result<Instruction, Error> {
37 translate_instruction_rust(addr, invoke_context)
38 }
39
40 fn translate_accounts<'a>(
41 account_infos_addr: u64,
42 account_infos_len: u64,
43 invoke_context: &InvokeContext,
44 ) -> Result<Vec<TranslatedAccount<'a>>, Error> {
45 translate_accounts_rust(account_infos_addr, account_infos_len, invoke_context)
46 }
47}
48
49declare_builtin_function!(
50 SyscallInvokeSignedC,
52 fn rust(
53 invoke_context: &mut InvokeContext<'_, '_>,
54 instruction_addr: u64,
55 account_infos_addr: u64,
56 account_infos_len: u64,
57 signers_seeds_addr: u64,
58 signers_seeds_len: u64,
59 ) -> Result<u64, Error> {
60 cpi_common::<Self>(
61 invoke_context,
62 instruction_addr,
63 account_infos_addr,
64 account_infos_len,
65 signers_seeds_addr,
66 signers_seeds_len,
67 )
68 }
69);
70
71impl SyscallInvokeSigned for SyscallInvokeSignedC {
72 fn translate_instruction(
73 addr: u64,
74 invoke_context: &InvokeContext,
75 ) -> Result<Instruction, Error> {
76 translate_instruction_c(addr, invoke_context)
77 }
78
79 fn translate_accounts<'a>(
80 account_infos_addr: u64,
81 account_infos_len: u64,
82 invoke_context: &InvokeContext,
83 ) -> Result<Vec<TranslatedAccount<'a>>, Error> {
84 translate_accounts_c(account_infos_addr, account_infos_len, invoke_context)
85 }
86}