add happy paths

This commit is contained in:
Sergio Chouhy 2025-07-17 16:05:24 -03:00
parent 1bcb3a05e7
commit bdea1a2137
7 changed files with 32 additions and 22 deletions

View File

@ -53,7 +53,7 @@ fn main() {
let (receipt, _) = nssa::invoke_privacy_execution::<TransferMultipleProgram>(
&[sender, receiver_1, receiver_2],
&vec![30, 40],
vec![30, 40],
&visibilities,
root,
)

View File

@ -33,7 +33,7 @@ pub fn main() {
let inputs_outputs = nssa::execute::<TransferMultipleProgram>(
&[sender, receiver_1, receiver_2],
&balance_to_move,
balance_to_move,
)
.unwrap();

View File

@ -5,7 +5,7 @@ use core::{
types::{Address, Commitment, Key, Nullifier},
};
use nssa::program::TransferProgram;
use nssa::program::{PinataProgram, TransferProgram};
use risc0_zkvm::Receipt;
use crate::sequencer_mock::{MockedSequencer, ACCOUNTS_PRIVATE_KEYS};
@ -52,9 +52,16 @@ fn main() {
1,
&mut sequencer,
);
println!("Balances after deshielded execution");
sequencer.print();
// A public execution of the Pinata program
let preimage = bytes_to_words(b"NSSA Selective privacy is great!").to_vec();
sequencer
.invoke_public::<PinataProgram>(&[addresses[0], addresses[3]], preimage)
.unwrap();
println!("Balances after public piñata execution");
sequencer.print();
}
fn mint_fresh_account(address: Address) -> Account {
@ -77,7 +84,7 @@ fn send_shielded(
let visibilities = vec![InputVisibiility::Public, InputVisibiility::Private(None)];
let (receipt, nonces) = nssa::invoke_privacy_execution::<TransferProgram>(
&[sender_account, receiver_account.clone()],
&balance_to_move,
balance_to_move,
&visibilities,
commitment_tree_root,
)
@ -116,7 +123,7 @@ fn send_private(
];
let (receipt, nonces) = nssa::invoke_privacy_execution::<TransferProgram>(
&[from_account.clone(), receiver_account.clone()],
&balance_to_move,
balance_to_move,
&visibilities,
commitment_tree_root,
)
@ -154,7 +161,7 @@ fn send_deshielded(
];
let (receipt, nonces) = nssa::invoke_privacy_execution::<TransferProgram>(
&[from_account.clone(), to_account],
&balance_to_move,
balance_to_move,
&visibilities,
commitment_tree_root,
)

View File

@ -134,7 +134,7 @@ impl MockedSequencer {
.collect::<Result<_, _>>()?;
// Execute
let inputs_outputs = nssa::execute::<P>(&input_accounts, &instruction_data)?;
let inputs_outputs = nssa::execute::<P>(&input_accounts, instruction_data)?;
// Consistency checks
self.inputs_outputs_are_consistent(&input_accounts, &inputs_outputs)?;

View File

@ -1,7 +1,10 @@
use core::{account::Account, hash};
use risc0_zkvm::guest::env;
const TARGET_HASH: [u32; 8] = [1, 2, 3, 4, 5, 6, 7, 8];
// preimage is b"NSSA Selective privacy is great!"
const TARGET_HASH: [u32; 8] = [
1363824975, 720119575, 717909014, 2043925380, 717793160, 1495780600, 1253022833, 116132328,
];
const PINATA_ACCOUNT_ADDR: [u32; 8] = [0xcafe; 8];
const PINATA_PRICE: u128 = 100;
@ -12,11 +15,11 @@ fn main() {
let preimage: Vec<u32> = env::read();
assert_eq!(input_accounts.len(), 2);
let [pinata_account] = input_accounts.split_off(1).try_into().unwrap();
let [winner_account] = input_accounts.try_into().unwrap();
let [winner_account] = input_accounts.split_off(1).try_into().unwrap();
let [pinata_account] = input_accounts.try_into().unwrap();
assert_eq!(pinata_account.address, PINATA_ACCOUNT_ADDR);
assert_eq!(pinata_account.balance, PINATA_PRICE);
assert!(pinata_account.balance >= PINATA_PRICE);
assert_eq!(hash(&preimage), TARGET_HASH);
let mut winner_account_post = winner_account.clone();
@ -25,9 +28,9 @@ fn main() {
winner_account_post.balance += PINATA_PRICE;
env::commit(&vec![
winner_account,
pinata_account,
winner_account_post,
winner_account,
pinata_account_post,
winner_account_post,
]);
}

View File

@ -18,7 +18,7 @@ pub fn new_random_nonce() -> Nonce {
fn write_inputs<P: Program>(
input_accounts: &[Account],
instruction_data: &P::InstructionData,
instruction_data: P::InstructionData,
env_builder: &mut ExecutorEnvBuilder,
) -> Result<(), ()> {
let input_accounts = input_accounts.to_vec();
@ -29,7 +29,7 @@ fn write_inputs<P: Program>(
fn execute_and_prove_inner<P: Program>(
input_accounts: &[Account],
instruction_data: &P::InstructionData,
instruction_data: P::InstructionData,
) -> Result<(Receipt, Vec<Account>), ()> {
// Write inputs to the program
let mut env_builder = ExecutorEnv::builder();
@ -49,7 +49,7 @@ fn execute_and_prove_inner<P: Program>(
pub fn execute<P: Program>(
input_accounts: &[Account],
instruction_data: &P::InstructionData,
instruction_data: P::InstructionData,
) -> Result<Vec<Account>, ()> {
// Write inputs to the program
let mut env_builder = ExecutorEnv::builder();
@ -60,7 +60,7 @@ pub fn execute<P: Program>(
let executor = default_executor();
let session_info = executor.execute(env, P::PROGRAM_ELF).map_err(|_| ())?;
// Get proof and (inputs and) outputs
// Get (inputs and) outputs
let inputs_outputs: Vec<Account> = session_info.journal.decode().map_err(|_| ())?;
Ok(inputs_outputs)
@ -68,7 +68,7 @@ pub fn execute<P: Program>(
pub fn invoke_privacy_execution<P: Program>(
inputs: &[Account],
instruction_data: &P::InstructionData,
instruction_data: P::InstructionData,
visibilities: &[InputVisibiility],
commitment_tree_root: [u32; 8],
) -> Result<(Receipt, Vec<Nonce>), ()> {

View File

@ -29,8 +29,8 @@ impl Program for TransferMultipleProgram {
pub struct PinataProgram;
impl Program for PinataProgram {
const PROGRAM_ID: ProgramId = TRANSFER_MULTIPLE_ID;
const PROGRAM_ELF: &[u8] = TRANSFER_MULTIPLE_ELF;
const PROGRAM_ID: ProgramId = PINATA_ID;
const PROGRAM_ELF: &[u8] = PINATA_ELF;
/// Preimage of target hash to win price
type InstructionData = [u32; 8];
type InstructionData = Vec<u32>;
}