mirror of
https://github.com/logos-blockchain/lssa-zkvm-testing.git
synced 2026-01-02 13:23:08 +00:00
add happy paths
This commit is contained in:
parent
1bcb3a05e7
commit
bdea1a2137
@ -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,
|
||||
)
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
@ -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,
|
||||
)
|
||||
|
||||
@ -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)?;
|
||||
|
||||
@ -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,
|
||||
]);
|
||||
}
|
||||
|
||||
@ -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>), ()> {
|
||||
|
||||
@ -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>;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user