mirror of
https://github.com/logos-blockchain/lssa.git
synced 2026-01-04 06:13:10 +00:00
fix circuit and add test
This commit is contained in:
parent
2bcee59d39
commit
5190b486c4
@ -32,7 +32,9 @@ fn main() {
|
|||||||
|
|
||||||
// Check that the program is well behaved.
|
// Check that the program is well behaved.
|
||||||
// See the # Programs section for the definition of the `validate_execution` method.
|
// See the # Programs section for the definition of the `validate_execution` method.
|
||||||
validate_execution(&pre_states, &post_states, program_id);
|
if !validate_execution(&pre_states, &post_states, program_id) {
|
||||||
|
panic!();
|
||||||
|
}
|
||||||
|
|
||||||
let n_accounts = pre_states.len();
|
let n_accounts = pre_states.len();
|
||||||
if visibility_mask.len() != n_accounts {
|
if visibility_mask.len() != n_accounts {
|
||||||
|
|||||||
@ -45,4 +45,7 @@ pub enum NssaError {
|
|||||||
|
|
||||||
#[error("Invalid privacy preserving execution circuit proof")]
|
#[error("Invalid privacy preserving execution circuit proof")]
|
||||||
InvalidPrivacyPreservingProof,
|
InvalidPrivacyPreservingProof,
|
||||||
|
|
||||||
|
#[error("Circuit proving error")]
|
||||||
|
CircuitProvingError(String),
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,7 +55,9 @@ pub fn execute_and_prove(
|
|||||||
env_builder.write(&circuit_input).unwrap();
|
env_builder.write(&circuit_input).unwrap();
|
||||||
let env = env_builder.build().unwrap();
|
let env = env_builder.build().unwrap();
|
||||||
let prover = default_prover();
|
let prover = default_prover();
|
||||||
let prove_info = prover.prove(env, PRIVACY_PRESERVING_CIRCUIT_ELF).unwrap();
|
let prove_info = prover
|
||||||
|
.prove(env, PRIVACY_PRESERVING_CIRCUIT_ELF)
|
||||||
|
.map_err(|e| NssaError::CircuitProvingError(e.to_string()))?;
|
||||||
|
|
||||||
let proof = Proof(borsh::to_vec(&prove_info.receipt.inner)?);
|
let proof = Proof(borsh::to_vec(&prove_info.receipt.inner)?);
|
||||||
|
|
||||||
|
|||||||
@ -214,6 +214,7 @@ pub mod tests {
|
|||||||
use crate::{
|
use crate::{
|
||||||
Address, PublicKey, PublicTransaction, V01State,
|
Address, PublicKey, PublicTransaction, V01State,
|
||||||
error::NssaError,
|
error::NssaError,
|
||||||
|
execute_and_prove,
|
||||||
privacy_preserving_transaction::{
|
privacy_preserving_transaction::{
|
||||||
PrivacyPreservingTransaction, circuit, message::Message, witness_set::WitnessSet,
|
PrivacyPreservingTransaction, circuit, message::Message, witness_set::WitnessSet,
|
||||||
},
|
},
|
||||||
@ -1063,4 +1064,35 @@ pub mod tests {
|
|||||||
recipient_initial_balance + balance_to_move
|
recipient_initial_balance + balance_to_move
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_burner_program_should_fail_in_privacy_preserving_circuit() {
|
||||||
|
let keys = test_private_account_keys_1();
|
||||||
|
let private_account = AccountWithMetadata {
|
||||||
|
account: Account {
|
||||||
|
balance: 100,
|
||||||
|
..Account::default()
|
||||||
|
},
|
||||||
|
is_authorized: true,
|
||||||
|
};
|
||||||
|
let state = V01State::new_with_genesis_accounts(&[])
|
||||||
|
.with_private_account(&keys, &private_account.account);
|
||||||
|
|
||||||
|
let membership_proof = state
|
||||||
|
.get_proof_for_commitment(&Commitment::new(&keys.npk(), &private_account.account))
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let program = Program::burner();
|
||||||
|
let result = execute_and_prove(
|
||||||
|
&[private_account],
|
||||||
|
&Program::serialize_instruction(10u128).unwrap(),
|
||||||
|
&[1],
|
||||||
|
&[0xdeadbeef],
|
||||||
|
&[(keys.npk(), SharedSecretKey::new(&[0xca; 32], &keys.ivk()))],
|
||||||
|
&[(keys.nsk, membership_proof)],
|
||||||
|
&program,
|
||||||
|
);
|
||||||
|
|
||||||
|
assert!(matches!(result, Err(NssaError::CircuitProvingError(_))));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user