fix: serialize write_inputs fields separately to match guest deserialization

This commit is contained in:
Moudy 2026-04-01 22:43:33 +02:00
parent 9ecf186851
commit 59d3d38448
22 changed files with 41 additions and 17 deletions

View File

@ -19,6 +19,7 @@ fn main() {
// Read inputs
let (
ProgramInput {
self_program_id: _,
pre_states,
instruction: greeting,
},

View File

@ -19,6 +19,7 @@ fn main() {
// Read inputs
let (
ProgramInput {
self_program_id: _,
pre_states,
instruction: greeting,
},

View File

@ -66,6 +66,7 @@ fn main() {
// Read input accounts.
let (
ProgramInput {
self_program_id: _,
pre_states,
instruction: (function_id, data),
},

View File

@ -27,6 +27,7 @@ fn main() {
// Read inputs
let (
ProgramInput {
self_program_id: _,
pre_states,
instruction: (),
},

View File

@ -33,6 +33,7 @@ fn main() {
// Read inputs
let (
ProgramInput {
self_program_id: _,
pre_states,
instruction: (),
},

View File

@ -88,7 +88,10 @@ impl Program {
.map_err(|e| NssaError::ProgramWriteInputFailed(e.to_string()))?;
let pre_states = pre_states.to_vec();
env_builder
.write(&(pre_states, instruction_data))
.write(&pre_states)
.map_err(|e| NssaError::ProgramWriteInputFailed(e.to_string()))?;
env_builder
.write(&instruction_data)
.map_err(|e| NssaError::ProgramWriteInputFailed(e.to_string()))?;
Ok(())
}

View File

@ -13,7 +13,8 @@ use nssa_core::program::{ProgramInput, ProgramOutput, read_nssa_inputs};
fn main() {
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction,
},

View File

@ -3,7 +3,8 @@ use nssa_core::program::{ProgramInput, ProgramOutput, read_nssa_inputs};
fn main() {
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction,
},

View File

@ -66,7 +66,8 @@ fn transfer(
fn main() {
// Read input accounts.
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: balance_to_move,
},

View File

@ -45,7 +45,8 @@ fn main() {
// Read input accounts.
// It is expected to receive only two accounts: [pinata_account, winner_account]
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: solution,
},

View File

@ -51,7 +51,8 @@ fn main() {
// It is expected to receive three accounts: [pinata_definition, pinata_token_holding,
// winner_token_holding]
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: solution,
},

View File

@ -11,7 +11,8 @@ use token_program::core::Instruction;
fn main() {
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction,
},

View File

@ -4,7 +4,8 @@ type Instruction = u128;
fn main() {
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: balance_to_burn,
},

View File

@ -12,7 +12,8 @@ type Instruction = (u128, ProgramId, u32, Option<PdaSeed>);
/// program.
fn main() {
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: (balance, auth_transfer_id, num_chain_calls, pda_seed),
},

View File

@ -5,7 +5,8 @@ type Instruction = (Option<Vec<u8>>, bool);
/// A program that optionally modifies the account data and optionally claims it.
fn main() {
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: (data_opt, should_claim),
},

View File

@ -4,7 +4,8 @@ type Instruction = ();
fn main() {
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: (),
},

View File

@ -5,7 +5,8 @@ type Instruction = Vec<u8>;
/// A program that modifies the account data by setting bytes sent in instruction.
fn main() {
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: data,
},

View File

@ -13,7 +13,8 @@ type Instruction = (u128, ProgramId);
/// but sets the `is_authorized` field of the first account to true.
fn main() {
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: (balance, transfer_program_id),
},

View File

@ -63,7 +63,8 @@ fn transfer(
fn main() {
// Read input accounts.
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: balance_to_move,
},

View File

@ -4,7 +4,8 @@ type Instruction = u128;
fn main() {
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: balance,
},

View File

@ -7,7 +7,8 @@ type Instruction = (BlockValidityWindow, TimestampValidityWindow);
fn main() {
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: (block_validity_window, timestamp_validity_window),
},

View File

@ -15,7 +15,8 @@ type Instruction = (BlockValidityWindow, ProgramId, BlockValidityWindow);
fn main() {
let (
ProgramInput { self_program_id: _,
ProgramInput {
self_program_id: _,
pre_states,
instruction: (block_validity_window, chained_program_id, chained_block_validity_window),
},