From d1ebb831efc3017a85e9eef7997eec837b9ae858 Mon Sep 17 00:00:00 2001 From: Sergio Chouhy Date: Thu, 14 Aug 2025 14:30:04 -0300 Subject: [PATCH] refactor program input --- nssa/core/src/program.rs | 14 +++++++++++--- .../guest/src/bin/authenticated_transfer.rs | 11 ++++++----- nssa/test_program_methods/guest/src/bin/burner.rs | 9 ++++++--- .../guest/src/bin/data_changer.rs | 6 +++--- .../guest/src/bin/extra_output.rs | 6 +++--- nssa/test_program_methods/guest/src/bin/minter.rs | 6 +++--- .../guest/src/bin/missing_output.rs | 6 +++--- .../guest/src/bin/nonce_changer.rs | 6 +++--- .../guest/src/bin/program_owner_changer.rs | 6 +++--- .../guest/src/bin/simple_balance_transfer.rs | 9 ++++++--- 10 files changed, 47 insertions(+), 32 deletions(-) diff --git a/nssa/core/src/program.rs b/nssa/core/src/program.rs index e7b13db..ff8fd57 100644 --- a/nssa/core/src/program.rs +++ b/nssa/core/src/program.rs @@ -7,17 +7,25 @@ pub type ProgramId = [u32; 8]; pub type InstructionData = Vec; pub const DEFAULT_PROGRAM_ID: ProgramId = [0; 8]; +pub struct ProgramInput { + pub pre_states: Vec, + pub instruction: T, +} + #[derive(Serialize, Deserialize)] pub struct ProgramOutput { pub pre_states: Vec, pub post_states: Vec, } -pub fn read_nssa_inputs() -> (Vec, T) { +pub fn read_nssa_inputs() -> ProgramInput { let pre_states: Vec = env::read(); let words: InstructionData = env::read(); - let instruction_data = T::deserialize(&mut Deserializer::new(words.as_ref())).unwrap(); - (pre_states, instruction_data) + let instruction = T::deserialize(&mut Deserializer::new(words.as_ref())).unwrap(); + ProgramInput { + pre_states, + instruction, + } } pub fn write_nssa_outputs(pre_states: Vec, post_states: Vec) { diff --git a/nssa/program_methods/guest/src/bin/authenticated_transfer.rs b/nssa/program_methods/guest/src/bin/authenticated_transfer.rs index 74edad6..9e7f399 100644 --- a/nssa/program_methods/guest/src/bin/authenticated_transfer.rs +++ b/nssa/program_methods/guest/src/bin/authenticated_transfer.rs @@ -1,16 +1,17 @@ -use nssa_core::program::{read_nssa_inputs, write_nssa_outputs}; - -type Instruction = u128; +use nssa_core::program::{read_nssa_inputs, write_nssa_outputs, ProgramInput}; /// A transfer of balance program. /// To be used both in public and private contexts. fn main() { // Read input accounts. // It is expected to receive only two accounts: [sender_account, receiver_account] - let (input_accounts, balance_to_move) = read_nssa_inputs::(); + let ProgramInput { + pre_states, + instruction: balance_to_move, + } = read_nssa_inputs(); // Continue only if input_accounts is an array of two elements - let [sender, receiver] = match input_accounts.try_into() { + let [sender, receiver] = match pre_states.try_into() { Ok(array) => array, Err(_) => return, }; diff --git a/nssa/test_program_methods/guest/src/bin/burner.rs b/nssa/test_program_methods/guest/src/bin/burner.rs index 40ba46e..1ef7373 100644 --- a/nssa/test_program_methods/guest/src/bin/burner.rs +++ b/nssa/test_program_methods/guest/src/bin/burner.rs @@ -1,11 +1,14 @@ -use nssa_core::program::{read_nssa_inputs, write_nssa_outputs}; +use nssa_core::program::{read_nssa_inputs, write_nssa_outputs, ProgramInput}; type Instruction = u128; fn main() { - let (input_accounts, balance_to_burn) = read_nssa_inputs::(); + let ProgramInput { + pre_states, + instruction: balance_to_burn, + } = read_nssa_inputs::(); - let [pre] = match input_accounts.try_into() { + let [pre] = match pre_states.try_into() { Ok(array) => array, Err(_) => return, }; diff --git a/nssa/test_program_methods/guest/src/bin/data_changer.rs b/nssa/test_program_methods/guest/src/bin/data_changer.rs index 389bba0..c7d34a2 100644 --- a/nssa/test_program_methods/guest/src/bin/data_changer.rs +++ b/nssa/test_program_methods/guest/src/bin/data_changer.rs @@ -1,11 +1,11 @@ -use nssa_core::program::{read_nssa_inputs, write_nssa_outputs}; +use nssa_core::program::{read_nssa_inputs, write_nssa_outputs, ProgramInput}; type Instruction = (); fn main() { - let (input_accounts, _) = read_nssa_inputs::(); + let ProgramInput { pre_states, .. } = read_nssa_inputs::(); - let [pre] = match input_accounts.try_into() { + let [pre] = match pre_states.try_into() { Ok(array) => array, Err(_) => return, }; diff --git a/nssa/test_program_methods/guest/src/bin/extra_output.rs b/nssa/test_program_methods/guest/src/bin/extra_output.rs index 35069c6..3543d51 100644 --- a/nssa/test_program_methods/guest/src/bin/extra_output.rs +++ b/nssa/test_program_methods/guest/src/bin/extra_output.rs @@ -1,14 +1,14 @@ use nssa_core::{ account::Account, - program::{read_nssa_inputs, write_nssa_outputs}, + program::{read_nssa_inputs, write_nssa_outputs, ProgramInput}, }; type Instruction = (); fn main() { - let (input_accounts, _) = read_nssa_inputs::(); + let ProgramInput { pre_states, .. } = read_nssa_inputs::(); - let [pre] = match input_accounts.try_into() { + let [pre] = match pre_states.try_into() { Ok(array) => array, Err(_) => return, }; diff --git a/nssa/test_program_methods/guest/src/bin/minter.rs b/nssa/test_program_methods/guest/src/bin/minter.rs index 56ce113..2ec97a9 100644 --- a/nssa/test_program_methods/guest/src/bin/minter.rs +++ b/nssa/test_program_methods/guest/src/bin/minter.rs @@ -1,11 +1,11 @@ -use nssa_core::program::{read_nssa_inputs, write_nssa_outputs}; +use nssa_core::program::{read_nssa_inputs, write_nssa_outputs, ProgramInput}; type Instruction = (); fn main() { - let (input_accounts, _) = read_nssa_inputs::(); + let ProgramInput { pre_states, .. } = read_nssa_inputs::(); - let [pre] = match input_accounts.try_into() { + let [pre] = match pre_states.try_into() { Ok(array) => array, Err(_) => return, }; diff --git a/nssa/test_program_methods/guest/src/bin/missing_output.rs b/nssa/test_program_methods/guest/src/bin/missing_output.rs index d2bf37e..2174266 100644 --- a/nssa/test_program_methods/guest/src/bin/missing_output.rs +++ b/nssa/test_program_methods/guest/src/bin/missing_output.rs @@ -1,11 +1,11 @@ -use nssa_core::program::{read_nssa_inputs, write_nssa_outputs}; +use nssa_core::program::{read_nssa_inputs, write_nssa_outputs, ProgramInput}; type Instruction = (); fn main() { - let (input_accounts, _) = read_nssa_inputs::(); + let ProgramInput { pre_states, .. } = read_nssa_inputs::(); - let [pre1, _] = match input_accounts.try_into() { + let [pre1, _] = match pre_states.try_into() { Ok(array) => array, Err(_) => return, }; diff --git a/nssa/test_program_methods/guest/src/bin/nonce_changer.rs b/nssa/test_program_methods/guest/src/bin/nonce_changer.rs index 0aa7bbb..b3b2599 100644 --- a/nssa/test_program_methods/guest/src/bin/nonce_changer.rs +++ b/nssa/test_program_methods/guest/src/bin/nonce_changer.rs @@ -1,11 +1,11 @@ -use nssa_core::program::{read_nssa_inputs, write_nssa_outputs}; +use nssa_core::program::{read_nssa_inputs, write_nssa_outputs, ProgramInput}; type Instruction = (); fn main() { - let (input_accounts, _) = read_nssa_inputs::(); + let ProgramInput { pre_states, .. } = read_nssa_inputs::(); - let [pre] = match input_accounts.try_into() { + let [pre] = match pre_states.try_into() { Ok(array) => array, Err(_) => return, }; diff --git a/nssa/test_program_methods/guest/src/bin/program_owner_changer.rs b/nssa/test_program_methods/guest/src/bin/program_owner_changer.rs index 990c0fb..49947cd 100644 --- a/nssa/test_program_methods/guest/src/bin/program_owner_changer.rs +++ b/nssa/test_program_methods/guest/src/bin/program_owner_changer.rs @@ -1,11 +1,11 @@ -use nssa_core::program::{read_nssa_inputs, write_nssa_outputs}; +use nssa_core::program::{read_nssa_inputs, write_nssa_outputs, ProgramInput}; type Instruction = (); fn main() { - let (input_accounts, _) = read_nssa_inputs::(); + let ProgramInput { pre_states, .. } = read_nssa_inputs::(); - let [pre] = match input_accounts.try_into() { + let [pre] = match pre_states.try_into() { Ok(array) => array, Err(_) => return, }; diff --git a/nssa/test_program_methods/guest/src/bin/simple_balance_transfer.rs b/nssa/test_program_methods/guest/src/bin/simple_balance_transfer.rs index 7f131f6..13263c5 100644 --- a/nssa/test_program_methods/guest/src/bin/simple_balance_transfer.rs +++ b/nssa/test_program_methods/guest/src/bin/simple_balance_transfer.rs @@ -1,11 +1,14 @@ -use nssa_core::program::{read_nssa_inputs, write_nssa_outputs}; +use nssa_core::program::{read_nssa_inputs, write_nssa_outputs, ProgramInput}; type Instruction = u128; fn main() { - let (input_accounts, balance) = read_nssa_inputs::(); + let ProgramInput { + pre_states, + instruction: balance, + } = read_nssa_inputs::(); - let [sender_pre, receiver_pre] = match input_accounts.try_into() { + let [sender_pre, receiver_pre] = match pre_states.try_into() { Ok(array) => array, Err(_) => return, };