diff --git a/risc0-selective-privacy-poc/examples/private_execution.rs b/risc0-selective-privacy-poc/examples/private_execution.rs index 433fac3..6a6edf2 100644 --- a/risc0-selective-privacy-poc/examples/private_execution.rs +++ b/risc0-selective-privacy-poc/examples/private_execution.rs @@ -53,7 +53,7 @@ fn main() { let (receipt, _) = nssa::invoke_privacy_execution::( &[sender, receiver_1, receiver_2], - &vec![30, 40], + vec![30, 40], &visibilities, root, ) diff --git a/risc0-selective-privacy-poc/examples/public_execution.rs b/risc0-selective-privacy-poc/examples/public_execution.rs index a72a490..e2fada7 100644 --- a/risc0-selective-privacy-poc/examples/public_execution.rs +++ b/risc0-selective-privacy-poc/examples/public_execution.rs @@ -33,7 +33,7 @@ pub fn main() { let inputs_outputs = nssa::execute::( &[sender, receiver_1, receiver_2], - &balance_to_move, + balance_to_move, ) .unwrap(); diff --git a/risc0-selective-privacy-poc/examples/sequencer.rs b/risc0-selective-privacy-poc/examples/sequencer.rs index e947f6c..e8a9957 100644 --- a/risc0-selective-privacy-poc/examples/sequencer.rs +++ b/risc0-selective-privacy-poc/examples/sequencer.rs @@ -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::(&[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::( &[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::( &[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::( &[from_account.clone(), to_account], - &balance_to_move, + balance_to_move, &visibilities, commitment_tree_root, ) diff --git a/risc0-selective-privacy-poc/examples/sequencer_mock/mod.rs b/risc0-selective-privacy-poc/examples/sequencer_mock/mod.rs index 79b5c25..e9b0680 100644 --- a/risc0-selective-privacy-poc/examples/sequencer_mock/mod.rs +++ b/risc0-selective-privacy-poc/examples/sequencer_mock/mod.rs @@ -134,7 +134,7 @@ impl MockedSequencer { .collect::>()?; // Execute - let inputs_outputs = nssa::execute::

(&input_accounts, &instruction_data)?; + let inputs_outputs = nssa::execute::

(&input_accounts, instruction_data)?; // Consistency checks self.inputs_outputs_are_consistent(&input_accounts, &inputs_outputs)?; diff --git a/risc0-selective-privacy-poc/program_methods/guest/src/bin/pinata.rs b/risc0-selective-privacy-poc/program_methods/guest/src/bin/pinata.rs index 95c1f55..ddcc45a 100644 --- a/risc0-selective-privacy-poc/program_methods/guest/src/bin/pinata.rs +++ b/risc0-selective-privacy-poc/program_methods/guest/src/bin/pinata.rs @@ -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 = 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, ]); } diff --git a/risc0-selective-privacy-poc/src/lib.rs b/risc0-selective-privacy-poc/src/lib.rs index 5e9e10c..1bef79c 100644 --- a/risc0-selective-privacy-poc/src/lib.rs +++ b/risc0-selective-privacy-poc/src/lib.rs @@ -18,7 +18,7 @@ pub fn new_random_nonce() -> Nonce { fn write_inputs( 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( fn execute_and_prove_inner( input_accounts: &[Account], - instruction_data: &P::InstructionData, + instruction_data: P::InstructionData, ) -> Result<(Receipt, Vec), ()> { // Write inputs to the program let mut env_builder = ExecutorEnv::builder(); @@ -49,7 +49,7 @@ fn execute_and_prove_inner( pub fn execute( input_accounts: &[Account], - instruction_data: &P::InstructionData, + instruction_data: P::InstructionData, ) -> Result, ()> { // Write inputs to the program let mut env_builder = ExecutorEnv::builder(); @@ -60,7 +60,7 @@ pub fn execute( 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 = session_info.journal.decode().map_err(|_| ())?; Ok(inputs_outputs) @@ -68,7 +68,7 @@ pub fn execute( pub fn invoke_privacy_execution( inputs: &[Account], - instruction_data: &P::InstructionData, + instruction_data: P::InstructionData, visibilities: &[InputVisibiility], commitment_tree_root: [u32; 8], ) -> Result<(Receipt, Vec), ()> { diff --git a/risc0-selective-privacy-poc/src/program/mod.rs b/risc0-selective-privacy-poc/src/program/mod.rs index ea6f896..984a5cb 100644 --- a/risc0-selective-privacy-poc/src/program/mod.rs +++ b/risc0-selective-privacy-poc/src/program/mod.rs @@ -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; }