mirror of
https://github.com/logos-blockchain/lssa-zkvm-testing.git
synced 2026-01-06 23:33: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>(
|
let (receipt, _) = nssa::invoke_privacy_execution::<TransferMultipleProgram>(
|
||||||
&[sender, receiver_1, receiver_2],
|
&[sender, receiver_1, receiver_2],
|
||||||
&vec![30, 40],
|
vec![30, 40],
|
||||||
&visibilities,
|
&visibilities,
|
||||||
root,
|
root,
|
||||||
)
|
)
|
||||||
|
|||||||
@ -33,7 +33,7 @@ pub fn main() {
|
|||||||
|
|
||||||
let inputs_outputs = nssa::execute::<TransferMultipleProgram>(
|
let inputs_outputs = nssa::execute::<TransferMultipleProgram>(
|
||||||
&[sender, receiver_1, receiver_2],
|
&[sender, receiver_1, receiver_2],
|
||||||
&balance_to_move,
|
balance_to_move,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@ use core::{
|
|||||||
types::{Address, Commitment, Key, Nullifier},
|
types::{Address, Commitment, Key, Nullifier},
|
||||||
};
|
};
|
||||||
|
|
||||||
use nssa::program::TransferProgram;
|
use nssa::program::{PinataProgram, TransferProgram};
|
||||||
use risc0_zkvm::Receipt;
|
use risc0_zkvm::Receipt;
|
||||||
|
|
||||||
use crate::sequencer_mock::{MockedSequencer, ACCOUNTS_PRIVATE_KEYS};
|
use crate::sequencer_mock::{MockedSequencer, ACCOUNTS_PRIVATE_KEYS};
|
||||||
@ -52,9 +52,16 @@ fn main() {
|
|||||||
1,
|
1,
|
||||||
&mut sequencer,
|
&mut sequencer,
|
||||||
);
|
);
|
||||||
|
|
||||||
println!("Balances after deshielded execution");
|
println!("Balances after deshielded execution");
|
||||||
sequencer.print();
|
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 {
|
fn mint_fresh_account(address: Address) -> Account {
|
||||||
@ -77,7 +84,7 @@ fn send_shielded(
|
|||||||
let visibilities = vec![InputVisibiility::Public, InputVisibiility::Private(None)];
|
let visibilities = vec![InputVisibiility::Public, InputVisibiility::Private(None)];
|
||||||
let (receipt, nonces) = nssa::invoke_privacy_execution::<TransferProgram>(
|
let (receipt, nonces) = nssa::invoke_privacy_execution::<TransferProgram>(
|
||||||
&[sender_account, receiver_account.clone()],
|
&[sender_account, receiver_account.clone()],
|
||||||
&balance_to_move,
|
balance_to_move,
|
||||||
&visibilities,
|
&visibilities,
|
||||||
commitment_tree_root,
|
commitment_tree_root,
|
||||||
)
|
)
|
||||||
@ -116,7 +123,7 @@ fn send_private(
|
|||||||
];
|
];
|
||||||
let (receipt, nonces) = nssa::invoke_privacy_execution::<TransferProgram>(
|
let (receipt, nonces) = nssa::invoke_privacy_execution::<TransferProgram>(
|
||||||
&[from_account.clone(), receiver_account.clone()],
|
&[from_account.clone(), receiver_account.clone()],
|
||||||
&balance_to_move,
|
balance_to_move,
|
||||||
&visibilities,
|
&visibilities,
|
||||||
commitment_tree_root,
|
commitment_tree_root,
|
||||||
)
|
)
|
||||||
@ -154,7 +161,7 @@ fn send_deshielded(
|
|||||||
];
|
];
|
||||||
let (receipt, nonces) = nssa::invoke_privacy_execution::<TransferProgram>(
|
let (receipt, nonces) = nssa::invoke_privacy_execution::<TransferProgram>(
|
||||||
&[from_account.clone(), to_account],
|
&[from_account.clone(), to_account],
|
||||||
&balance_to_move,
|
balance_to_move,
|
||||||
&visibilities,
|
&visibilities,
|
||||||
commitment_tree_root,
|
commitment_tree_root,
|
||||||
)
|
)
|
||||||
|
|||||||
@ -134,7 +134,7 @@ impl MockedSequencer {
|
|||||||
.collect::<Result<_, _>>()?;
|
.collect::<Result<_, _>>()?;
|
||||||
|
|
||||||
// Execute
|
// Execute
|
||||||
let inputs_outputs = nssa::execute::<P>(&input_accounts, &instruction_data)?;
|
let inputs_outputs = nssa::execute::<P>(&input_accounts, instruction_data)?;
|
||||||
|
|
||||||
// Consistency checks
|
// Consistency checks
|
||||||
self.inputs_outputs_are_consistent(&input_accounts, &inputs_outputs)?;
|
self.inputs_outputs_are_consistent(&input_accounts, &inputs_outputs)?;
|
||||||
|
|||||||
@ -1,7 +1,10 @@
|
|||||||
use core::{account::Account, hash};
|
use core::{account::Account, hash};
|
||||||
use risc0_zkvm::guest::env;
|
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_ACCOUNT_ADDR: [u32; 8] = [0xcafe; 8];
|
||||||
const PINATA_PRICE: u128 = 100;
|
const PINATA_PRICE: u128 = 100;
|
||||||
|
|
||||||
@ -12,11 +15,11 @@ fn main() {
|
|||||||
let preimage: Vec<u32> = env::read();
|
let preimage: Vec<u32> = env::read();
|
||||||
|
|
||||||
assert_eq!(input_accounts.len(), 2);
|
assert_eq!(input_accounts.len(), 2);
|
||||||
let [pinata_account] = input_accounts.split_off(1).try_into().unwrap();
|
let [winner_account] = input_accounts.split_off(1).try_into().unwrap();
|
||||||
let [winner_account] = input_accounts.try_into().unwrap();
|
let [pinata_account] = input_accounts.try_into().unwrap();
|
||||||
|
|
||||||
assert_eq!(pinata_account.address, PINATA_ACCOUNT_ADDR);
|
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);
|
assert_eq!(hash(&preimage), TARGET_HASH);
|
||||||
|
|
||||||
let mut winner_account_post = winner_account.clone();
|
let mut winner_account_post = winner_account.clone();
|
||||||
@ -25,9 +28,9 @@ fn main() {
|
|||||||
winner_account_post.balance += PINATA_PRICE;
|
winner_account_post.balance += PINATA_PRICE;
|
||||||
|
|
||||||
env::commit(&vec![
|
env::commit(&vec![
|
||||||
winner_account,
|
|
||||||
pinata_account,
|
pinata_account,
|
||||||
winner_account_post,
|
winner_account,
|
||||||
pinata_account_post,
|
pinata_account_post,
|
||||||
|
winner_account_post,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,7 +18,7 @@ pub fn new_random_nonce() -> Nonce {
|
|||||||
|
|
||||||
fn write_inputs<P: Program>(
|
fn write_inputs<P: Program>(
|
||||||
input_accounts: &[Account],
|
input_accounts: &[Account],
|
||||||
instruction_data: &P::InstructionData,
|
instruction_data: P::InstructionData,
|
||||||
env_builder: &mut ExecutorEnvBuilder,
|
env_builder: &mut ExecutorEnvBuilder,
|
||||||
) -> Result<(), ()> {
|
) -> Result<(), ()> {
|
||||||
let input_accounts = input_accounts.to_vec();
|
let input_accounts = input_accounts.to_vec();
|
||||||
@ -29,7 +29,7 @@ fn write_inputs<P: Program>(
|
|||||||
|
|
||||||
fn execute_and_prove_inner<P: Program>(
|
fn execute_and_prove_inner<P: Program>(
|
||||||
input_accounts: &[Account],
|
input_accounts: &[Account],
|
||||||
instruction_data: &P::InstructionData,
|
instruction_data: P::InstructionData,
|
||||||
) -> Result<(Receipt, Vec<Account>), ()> {
|
) -> Result<(Receipt, Vec<Account>), ()> {
|
||||||
// Write inputs to the program
|
// Write inputs to the program
|
||||||
let mut env_builder = ExecutorEnv::builder();
|
let mut env_builder = ExecutorEnv::builder();
|
||||||
@ -49,7 +49,7 @@ fn execute_and_prove_inner<P: Program>(
|
|||||||
|
|
||||||
pub fn execute<P: Program>(
|
pub fn execute<P: Program>(
|
||||||
input_accounts: &[Account],
|
input_accounts: &[Account],
|
||||||
instruction_data: &P::InstructionData,
|
instruction_data: P::InstructionData,
|
||||||
) -> Result<Vec<Account>, ()> {
|
) -> Result<Vec<Account>, ()> {
|
||||||
// Write inputs to the program
|
// Write inputs to the program
|
||||||
let mut env_builder = ExecutorEnv::builder();
|
let mut env_builder = ExecutorEnv::builder();
|
||||||
@ -60,7 +60,7 @@ pub fn execute<P: Program>(
|
|||||||
let executor = default_executor();
|
let executor = default_executor();
|
||||||
let session_info = executor.execute(env, P::PROGRAM_ELF).map_err(|_| ())?;
|
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(|_| ())?;
|
let inputs_outputs: Vec<Account> = session_info.journal.decode().map_err(|_| ())?;
|
||||||
|
|
||||||
Ok(inputs_outputs)
|
Ok(inputs_outputs)
|
||||||
@ -68,7 +68,7 @@ pub fn execute<P: Program>(
|
|||||||
|
|
||||||
pub fn invoke_privacy_execution<P: Program>(
|
pub fn invoke_privacy_execution<P: Program>(
|
||||||
inputs: &[Account],
|
inputs: &[Account],
|
||||||
instruction_data: &P::InstructionData,
|
instruction_data: P::InstructionData,
|
||||||
visibilities: &[InputVisibiility],
|
visibilities: &[InputVisibiility],
|
||||||
commitment_tree_root: [u32; 8],
|
commitment_tree_root: [u32; 8],
|
||||||
) -> Result<(Receipt, Vec<Nonce>), ()> {
|
) -> Result<(Receipt, Vec<Nonce>), ()> {
|
||||||
|
|||||||
@ -29,8 +29,8 @@ impl Program for TransferMultipleProgram {
|
|||||||
|
|
||||||
pub struct PinataProgram;
|
pub struct PinataProgram;
|
||||||
impl Program for PinataProgram {
|
impl Program for PinataProgram {
|
||||||
const PROGRAM_ID: ProgramId = TRANSFER_MULTIPLE_ID;
|
const PROGRAM_ID: ProgramId = PINATA_ID;
|
||||||
const PROGRAM_ELF: &[u8] = TRANSFER_MULTIPLE_ELF;
|
const PROGRAM_ELF: &[u8] = PINATA_ELF;
|
||||||
/// Preimage of target hash to win price
|
/// Preimage of target hash to win price
|
||||||
type InstructionData = [u32; 8];
|
type InstructionData = Vec<u32>;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user