mirror of
https://github.com/logos-blockchain/lssa-zkvm-testing.git
synced 2026-01-02 13:23:08 +00:00
improve docstrings
This commit is contained in:
parent
734206bf73
commit
29b56e3a32
@ -53,10 +53,19 @@ pub fn bytes_to_words(bytes: &[u8; 32]) -> [u32; 8] {
|
||||
words
|
||||
}
|
||||
|
||||
/// Verifies that a program public execution didn't break the chain's rules.
|
||||
/// `input_accounts` are the accounts provided as inputs to the program.
|
||||
/// `output_accounts` are the accounts post states after execution of the program
|
||||
pub fn post_execution_consistency_checks(
|
||||
/// Ensures that account transitions follow the rules of a well-behaved program.
|
||||
///
|
||||
/// A well-behaved program is one that:
|
||||
/// - does not change account addresses
|
||||
/// - does not change account nonces
|
||||
/// - does not change the `program_owner` field
|
||||
/// - only reduces the balance of accounts it owns
|
||||
/// - preserves the total token supply across all accounts
|
||||
///
|
||||
/// This function does **not** check that the output accounts are the result of correctly
|
||||
/// executing the program. That must be checked separately, either by re-executing
|
||||
/// the program with the inputs or by verifying a proof of correct execution.
|
||||
pub fn check_well_behaved_account_transition(
|
||||
input_accounts: &[Account],
|
||||
output_accounts: &[Account],
|
||||
program_id: ProgramId,
|
||||
@ -71,6 +80,7 @@ pub fn post_execution_consistency_checks(
|
||||
if account_pre.address != account_post.address {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Fail if the program modified the nonces of the input accounts
|
||||
if account_pre.nonce != account_post.nonce {
|
||||
return false;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
use core::{account::Account, post_execution_consistency_checks, types::Address};
|
||||
use core::{account::Account, check_well_behaved_account_transition, types::Address};
|
||||
|
||||
use crate::mocked_components::sequencer::error::Error;
|
||||
|
||||
@ -22,7 +22,7 @@ impl MockedSequencer {
|
||||
nssa::execute_onchain::<P>(&input_accounts, instruction_data).map_err(|_| Error::BadInput)?;
|
||||
|
||||
// Assert accounts pre- and post-states preserve chains invariants
|
||||
if !post_execution_consistency_checks(&input_accounts, &program_output.accounts_post, P::PROGRAM_ID) {
|
||||
if !check_well_behaved_account_transition(&input_accounts, &program_output.accounts_post, P::PROGRAM_ID) {
|
||||
return Err(Error::BadInput);
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
use core::{
|
||||
compute_nullifier, hash, is_in_tree, post_execution_consistency_checks,
|
||||
check_well_behaved_account_transition, compute_nullifier, hash, is_in_tree,
|
||||
types::{Nonce, PrivacyExecutionOutput, ProgramId, ProgramOutput},
|
||||
visibility::AccountVisibility,
|
||||
};
|
||||
@ -7,18 +7,15 @@ use risc0_zkvm::{guest::env, serde::to_vec};
|
||||
|
||||
/// Privacy execution logic.
|
||||
/// This is the circuit for proving correct off-chain executions of programs.
|
||||
/// It also verifies that the chain's invariants are not violated.
|
||||
/// It also verifies that the chain's invariants are not violated and the program is well-behaved.
|
||||
///
|
||||
/// Inputs:
|
||||
/// - Vec<Account>: The output of the inner program. This is assumed to include the accounts pre and
|
||||
/// - ProgramOuptut: The output of the inner program. This is includes the accounts pre and
|
||||
/// post-states of the execution of the inner program.
|
||||
///
|
||||
/// - Vec<AccountVisibility>: A vector indicating which accounts are private and which are public.
|
||||
///
|
||||
/// - Vec<Nonce>: The vector of nonces to be used for the output accounts. This is assumed to be
|
||||
/// sampled at random by the host program.
|
||||
///
|
||||
/// - [u32; 8]: The root of the commitment tree. Commitments of used private accounts will be
|
||||
/// - [u32; 8]: The root of the commitment tree. Commitments of input private accounts will be
|
||||
/// checked against this to prove that they belong to the tree.
|
||||
/// - ProgamId: The ID of the inner program.
|
||||
///
|
||||
@ -52,7 +49,7 @@ fn main() {
|
||||
env::verify(program_id, &to_vec(&inner_program_output).unwrap()).unwrap();
|
||||
|
||||
// Assert accounts pre- and post-states preserve chains invariants
|
||||
assert!(post_execution_consistency_checks(
|
||||
assert!(check_well_behaved_account_transition(
|
||||
&inner_program_output.accounts_pre,
|
||||
&inner_program_output.accounts_post,
|
||||
program_id
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user