arch_program 0.6.4

A Rust library for building programs that run inside the Arch Virtual Machine. Provides core functionality for creating instructions, managing accounts, handling program errors, and interacting with the Arch runtime environment. Includes utilities for logging, transaction handling, and Bitcoin UTXO management.
Documentation
//! Implementations of syscalls used when `arch-program` is built for non-SBF targets.

pub const UNIMPLEMENTED: u64 = 0;
use crate::{
    account::AccountInfo, clock::Clock, entrypoint::ProgramResult, instruction::Instruction,
    pubkey::Pubkey, utxo::UtxoMeta,
};
use base64::{engine::general_purpose::STANDARD as BASE64_STANDARD, Engine as _};

pub(crate) fn sol_log(message: &str) {
    println!("{message}");
}
pub(crate) fn _sol_log_64_(arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) {
    sol_log(&format!("{arg1:?}, {arg2:?},{arg3:?},{arg4:?},{arg5:?}"))
}
pub(crate) fn sol_memset(_s: *mut u8, _c: u8, _n: usize) {
    sol_log("UNAVAILABLE");
}
pub(crate) fn sol_memmove(_dst: *mut u8, _src: *const u8, _n: usize) {
    sol_log("UNAVAILABLE");
}
pub(crate) fn sol_memcpy(_dst: *mut u8, _src: *const u8, _n: usize) {
    sol_log("UNAVAILABLE");
}
pub(crate) fn sol_memcmp(_s1: *const u8, _s2: *const u8, _n: usize, _result: *mut i32) {
    sol_log("UNAVAILABLE");
}
pub(crate) fn _sol_set_return_data(_data: *const u8, _length: u64) {
    sol_log("UNAVAILABLE");
}
pub(crate) fn _sol_log_pubkey(_pubkey_addr: *const u8) {
    sol_log("UNAVAILABLE");
}
pub(crate) fn _sol_log_data(data: *const u8, data_len: u64) {
    let count = data_len as usize;
    let word = core::mem::size_of::<usize>();
    let mut parts: Vec<String> = Vec::with_capacity(count);
    unsafe {
        for i in 0..count {
            let base = data.add(i * 2 * word);
            let ptr_val = core::ptr::read_unaligned(base as *const usize);
            let len_val = core::ptr::read_unaligned(base.add(word) as *const usize);
            let bytes = if ptr_val == 0 || len_val == 0 {
                &[]
            } else {
                core::slice::from_raw_parts(ptr_val as *const u8, len_val)
            };
            parts.push(BASE64_STANDARD.encode(bytes));
        }
    }
    println!("Program data: {}", parts.join(" "));
}
pub(crate) fn _sol_get_return_data(_data: *mut u8, _length: u64, _program_id: *mut Pubkey) -> u64 {
    sol_log("UNAVAILABLE");
    UNIMPLEMENTED
}
pub(crate) fn arch_set_transaction_to_sign(_transaction_to_sign: *const u8, _length: usize) -> u64 {
    sol_log("UNAVAILABLE");
    UNIMPLEMENTED
}
pub(crate) fn arch_set_inputs_to_sign(_inputs_to_sign: *const u8, _length: usize) -> u64 {
    sol_log("UNAVAILABLE");
    UNIMPLEMENTED
}
pub(crate) fn arch_get_bitcoin_tx(_buf: *const u8, _buf_len: usize, _txid: &[u8; 32]) -> u64 {
    sol_log("UNAVAILABLE");
    UNIMPLEMENTED
}
pub(crate) fn arch_get_runes_from_output(
    _buf: *const u8,
    _buf_len: usize,
    _txid: &[u8; 32],
    _output_index: u32,
) -> u64 {
    sol_log("UNAVAILABLE");
    UNIMPLEMENTED
}
pub(crate) fn arch_get_rune_info(_buf: *const u8, _buf_len: usize, _block: u64, _tx: u64) -> u64 {
    sol_log("UNAVAILABLE");
    UNIMPLEMENTED
}
pub(crate) fn arch_get_network_xonly_pubkey(_data: *mut u8) -> u64 {
    sol_log("UNAVAILABLE");
    UNIMPLEMENTED
}
pub(crate) fn arch_validate_utxo_ownership(_utxo: *const UtxoMeta, _owner: *const Pubkey) -> u64 {
    sol_log("UNAVAILABLE");
    UNIMPLEMENTED
}
pub(crate) fn arch_get_account_script_pubkey(_buf: &mut [u8; 34], _pubkey: &Pubkey) {}

pub(crate) fn sol_invoke_signed(
    _instruction_addr: &Instruction,
    _account_infos: &[AccountInfo],
    _signers_seeds: &[&[&[u8]]],
) -> ProgramResult {
    sol_log("SyscallStubs: sol_invoke_signed() not available");
    Ok(())
}

pub(crate) fn sol_secp256k1_recover(
    _hash_addr: *const u8,
    _recovery_id_val: u64,
    _signature_addr: *const u8,
    _result_addr: *mut u8,
) -> u64 {
    sol_log("UNAVAILABLE");
    UNIMPLEMENTED
}

pub(crate) fn sol_log_compute_units() {
    sol_log("UNAVAILABLE");
}

pub(crate) fn get_remaining_compute_units() -> u64 {
    sol_log("UNAVAILABLE");
    UNIMPLEMENTED
}

pub(crate) fn arch_get_bitcoin_block_height() -> u64 {
    UNIMPLEMENTED
}

pub(crate) fn arch_get_clock(_clock: *mut Clock) -> u64 {
    UNIMPLEMENTED
}

pub(crate) fn arch_get_stack_height() -> u64 {
    UNIMPLEMENTED
}

pub(crate) fn arch_get_bitcoin_tx_confirmation(_txid: &[u8; 32], _buf: *const u8) -> u64 {
    sol_log("UNAVAILABLE");
    UNIMPLEMENTED
}

pub(crate) fn arch_get_transaction_to_sign(_buf: *mut u8, _length: usize) -> u64 {
    sol_log("UNAVAILABLE");
    UNIMPLEMENTED
}