57 lines
1.5 KiB
Rust
Raw Normal View History

2025-12-22 15:52:42 +02:00
use common::error::ExecutionFailureKind;
use nssa::{Account, program::Program};
use nssa_core::program::InstructionData;
2025-12-22 15:52:42 +02:00
use crate::{WalletCore, program_facades::ProgramArgs};
pub mod public;
pub struct NativeTokenTransfer<'w>(pub &'w WalletCore);
2025-12-22 15:52:42 +02:00
#[derive(Debug, Clone, Copy)]
pub struct NativeBalanceToMove {
pub balance_to_move: u128,
}
2025-12-22 15:52:42 +02:00
#[derive(Debug, Clone, Copy)]
pub struct InitArgs {}
2025-12-22 15:52:42 +02:00
impl ProgramArgs for NativeBalanceToMove {
2026-01-15 12:05:35 +02:00
fn prepare_private_transfer(
2025-12-22 15:52:42 +02:00
&self,
) -> (
InstructionData,
Program,
impl FnOnce(&[&Account]) -> Result<(), ExecutionFailureKind>,
) {
let instruction_data = Program::serialize_instruction(self.balance_to_move).unwrap();
let program = Program::authenticated_transfer_program();
let tx_pre_check = move |accounts: &[&Account]| {
let from = accounts[0];
if from.balance >= self.balance_to_move {
Ok(())
} else {
Err(ExecutionFailureKind::InsufficientFundsError)
}
};
(instruction_data, program, tx_pre_check)
}
}
2025-12-22 15:52:42 +02:00
impl ProgramArgs for InitArgs {
2026-01-15 12:05:35 +02:00
fn prepare_private_transfer(
2025-12-22 15:52:42 +02:00
&self,
) -> (
InstructionData,
Program,
impl FnOnce(&[&Account]) -> Result<(), ExecutionFailureKind>,
) {
(
Program::serialize_instruction(0u128).unwrap(),
Program::authenticated_transfer_program(),
|_| Ok(()),
)
}
}