2026-03-17 21:25:30 +03:00

39 lines
1.2 KiB
Rust

use common::error::ExecutionFailureKind;
use nssa::{Account, program::Program};
use nssa_core::program::InstructionData;
use crate::WalletCore;
pub mod deshielded;
pub mod private;
pub mod public;
pub mod shielded;
#[expect(clippy::multiple_inherent_impl, reason = "impl blocks split across multiple files for organization")]
pub struct NativeTokenTransfer<'wallet>(pub &'wallet WalletCore);
// TODO: handle large Err-variant properly
#[expect(clippy::result_large_err, reason = "ExecutionFailureKind is large, tracked by TODO")]
fn auth_transfer_preparation(
balance_to_move: u128,
) -> (
InstructionData,
Program,
impl FnOnce(&[&Account]) -> Result<(), ExecutionFailureKind>,
) {
let instruction_data = Program::serialize_instruction(balance_to_move).unwrap();
let program = Program::authenticated_transfer_program();
// TODO: handle large Err-variant properly
let tx_pre_check = move |accounts: &[&Account]| {
let from = accounts[0];
if from.balance >= balance_to_move {
Ok(())
} else {
Err(ExecutionFailureKind::InsufficientFundsError)
}
};
(instruction_data, program, tx_pre_check)
}