pub trait SyscallStubs: Sync + Send {
    fn sol_log(&self, message: &str) { ... }
    fn sol_log_compute_units(&self) { ... }
    fn sol_invoke_signed(
        &self, 
        _instruction: &Instruction, 
        _account_infos: &[AccountInfo<'_>], 
        _signers_seeds: &[&[&[u8]]]
    ) -> ProgramResult { ... }
    fn sol_get_clock_sysvar(&self, _var_addr: *mut u8) -> u64 { ... }
    fn sol_get_epoch_schedule_sysvar(&self, _var_addr: *mut u8) -> u64 { ... }
    fn sol_get_fees_sysvar(&self, _var_addr: *mut u8) -> u64 { ... }
    fn sol_get_rent_sysvar(&self, _var_addr: *mut u8) -> u64 { ... }
    unsafe fn sol_memcpy(&self, dst: *mut u8, src: *const u8, n: usize) { ... }
    unsafe fn sol_memmove(&self, dst: *mut u8, src: *const u8, n: usize) { ... }
    unsafe fn sol_memcmp(
        &self, 
        s1: *const u8, 
        s2: *const u8, 
        n: usize, 
        result: *mut i32
    ) { ... }
    unsafe fn sol_memset(&self, s: *mut u8, c: u8, n: usize) { ... }
}