miraland_bpf_loader_program/syscalls/
sysvar.rs1use super::*;
2
3fn get_sysvar<T: std::fmt::Debug + Sysvar + SysvarId + Clone>(
4 sysvar: Result<Arc<T>, InstructionError>,
5 var_addr: u64,
6 check_aligned: bool,
7 memory_mapping: &mut MemoryMapping,
8 invoke_context: &mut InvokeContext,
9) -> Result<u64, Error> {
10 consume_compute_meter(
11 invoke_context,
12 invoke_context
13 .get_compute_budget()
14 .sysvar_base_cost
15 .saturating_add(size_of::<T>() as u64),
16 )?;
17 let var = translate_type_mut::<T>(memory_mapping, var_addr, check_aligned)?;
18
19 let sysvar: Arc<T> = sysvar?;
20 *var = T::clone(sysvar.as_ref());
21
22 Ok(SUCCESS)
23}
24
25declare_builtin_function!(
26 SyscallGetClockSysvar,
28 fn rust(
29 invoke_context: &mut InvokeContext,
30 var_addr: u64,
31 _arg2: u64,
32 _arg3: u64,
33 _arg4: u64,
34 _arg5: u64,
35 memory_mapping: &mut MemoryMapping,
36 ) -> Result<u64, Error> {
37 get_sysvar(
38 invoke_context.get_sysvar_cache().get_clock(),
39 var_addr,
40 invoke_context.get_check_aligned(),
41 memory_mapping,
42 invoke_context,
43 )
44 }
45);
46
47declare_builtin_function!(
48 SyscallGetEpochScheduleSysvar,
50 fn rust(
51 invoke_context: &mut InvokeContext,
52 var_addr: u64,
53 _arg2: u64,
54 _arg3: u64,
55 _arg4: u64,
56 _arg5: u64,
57 memory_mapping: &mut MemoryMapping,
58 ) -> Result<u64, Error> {
59 get_sysvar(
60 invoke_context.get_sysvar_cache().get_epoch_schedule(),
61 var_addr,
62 invoke_context.get_check_aligned(),
63 memory_mapping,
64 invoke_context,
65 )
66 }
67);
68
69declare_builtin_function!(
70 SyscallGetEpochRewardsSysvar,
72 fn rust(
73 invoke_context: &mut InvokeContext,
74 var_addr: u64,
75 _arg2: u64,
76 _arg3: u64,
77 _arg4: u64,
78 _arg5: u64,
79 memory_mapping: &mut MemoryMapping,
80 ) -> Result<u64, Error> {
81 get_sysvar(
82 invoke_context.get_sysvar_cache().get_epoch_rewards(),
83 var_addr,
84 invoke_context.get_check_aligned(),
85 memory_mapping,
86 invoke_context,
87 )
88 }
89);
90
91declare_builtin_function!(
92 SyscallGetFeesSysvar,
94 fn rust(
95 invoke_context: &mut InvokeContext,
96 var_addr: u64,
97 _arg2: u64,
98 _arg3: u64,
99 _arg4: u64,
100 _arg5: u64,
101 memory_mapping: &mut MemoryMapping,
102 ) -> Result<u64, Error> {
103 #[allow(deprecated)]
104 {
105 get_sysvar(
106 invoke_context.get_sysvar_cache().get_fees(),
107 var_addr,
108 invoke_context.get_check_aligned(),
109 memory_mapping,
110 invoke_context,
111 )
112 }
113 }
114);
115
116declare_builtin_function!(
117 SyscallGetRentSysvar,
119 fn rust(
120 invoke_context: &mut InvokeContext,
121 var_addr: u64,
122 _arg2: u64,
123 _arg3: u64,
124 _arg4: u64,
125 _arg5: u64,
126 memory_mapping: &mut MemoryMapping,
127 ) -> Result<u64, Error> {
128 get_sysvar(
129 invoke_context.get_sysvar_cache().get_rent(),
130 var_addr,
131 invoke_context.get_check_aligned(),
132 memory_mapping,
133 invoke_context,
134 )
135 }
136);
137
138declare_builtin_function!(
139 SyscallGetLastRestartSlotSysvar,
141 fn rust(
142 invoke_context: &mut InvokeContext,
143 var_addr: u64,
144 _arg2: u64,
145 _arg3: u64,
146 _arg4: u64,
147 _arg5: u64,
148 memory_mapping: &mut MemoryMapping,
149 ) -> Result<u64, Error> {
150 get_sysvar(
151 invoke_context.get_sysvar_cache().get_last_restart_slot(),
152 var_addr,
153 invoke_context.get_check_aligned(),
154 memory_mapping,
155 invoke_context,
156 )
157 }
158);