goas: isolated test for zone stf proof
This commit is contained in:
parent
9541c4b34d
commit
341c8b44d3
|
@ -214,3 +214,79 @@ pub fn prove_user_atomic_transfer(atomic_transfer: UserAtomicTransfer) -> ledger
|
||||||
let receipt = prove_info.receipt;
|
let receipt = prove_info.receipt;
|
||||||
ledger::DeathProof::from_risc0(goas_risc0_proofs::USER_ATOMIC_TRANSFER_ID, receipt)
|
ledger::DeathProof::from_risc0(goas_risc0_proofs::USER_ATOMIC_TRANSFER_ID, receipt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use cl::{NoteWitness, OutputWitness, PartialTxWitness};
|
||||||
|
use common::{BoundTx, Deposit, Withdraw};
|
||||||
|
use ledger_proof_statements::death_constraint::DeathConstraintPublic;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn test_prove_zone_stf() {
|
||||||
|
let mut rng = rand::thread_rng();
|
||||||
|
|
||||||
|
let zone_start = ZoneNotes::new_with_balances("ZONE", BTreeMap::from_iter([]), &mut rng);
|
||||||
|
|
||||||
|
let bind = OutputWitness::public(
|
||||||
|
NoteWitness::basic(32, *common::ZONE_CL_FUNDS_UNIT),
|
||||||
|
cl::NullifierNonce([0u8; 32]),
|
||||||
|
);
|
||||||
|
|
||||||
|
let mut alice = common::new_account(&mut rng);
|
||||||
|
let alice_vk = alice.verifying_key().to_bytes();
|
||||||
|
|
||||||
|
let signed_deposit = SignedBoundTx::sign(
|
||||||
|
BoundTx {
|
||||||
|
tx: Tx::Deposit(Deposit {
|
||||||
|
to: alice_vk,
|
||||||
|
amount: 32,
|
||||||
|
}),
|
||||||
|
bind: bind.commit_note(),
|
||||||
|
},
|
||||||
|
&mut alice,
|
||||||
|
);
|
||||||
|
let signed_withdraw = SignedBoundTx::sign(
|
||||||
|
BoundTx {
|
||||||
|
tx: Tx::Withdraw(Withdraw {
|
||||||
|
from: alice_vk,
|
||||||
|
amount: 10,
|
||||||
|
}),
|
||||||
|
bind: bind.commit_note(),
|
||||||
|
},
|
||||||
|
&mut alice,
|
||||||
|
);
|
||||||
|
|
||||||
|
let zone_end = zone_start
|
||||||
|
.clone()
|
||||||
|
.run([signed_deposit.bound_tx.tx, signed_withdraw.bound_tx.tx]);
|
||||||
|
|
||||||
|
let ptx = PartialTxWitness {
|
||||||
|
inputs: vec![
|
||||||
|
cl::InputWitness::public(bind),
|
||||||
|
zone_start.state_input_witness(),
|
||||||
|
zone_start.fund_input_witness(),
|
||||||
|
],
|
||||||
|
outputs: vec![zone_end.state_note, zone_end.fund_note],
|
||||||
|
};
|
||||||
|
|
||||||
|
let txs = vec![
|
||||||
|
(signed_deposit, ptx.input_witness(0)),
|
||||||
|
(signed_withdraw, ptx.input_witness(0)),
|
||||||
|
];
|
||||||
|
|
||||||
|
let proof = prove_zone_stf(
|
||||||
|
zone_start.state.clone(),
|
||||||
|
txs,
|
||||||
|
ptx.input_witness(1),
|
||||||
|
ptx.output_witness(0),
|
||||||
|
ptx.output_witness(1),
|
||||||
|
);
|
||||||
|
|
||||||
|
assert!(proof.verify(DeathConstraintPublic {
|
||||||
|
nf: zone_start.state_input_witness().nullifier(),
|
||||||
|
ptx_root: ptx.commit().root(),
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -25,13 +25,13 @@ pub struct NullifierSecret(pub [u8; 16]);
|
||||||
// can be provided to anyone wishing to transfer
|
// can be provided to anyone wishing to transfer
|
||||||
// you a note
|
// you a note
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
pub struct NullifierCommitment([u8; 32]);
|
pub struct NullifierCommitment(pub [u8; 32]);
|
||||||
|
|
||||||
// To allow users to maintain fewer nullifier secrets, we
|
// To allow users to maintain fewer nullifier secrets, we
|
||||||
// provide a nonce to differentiate notes controlled by the same
|
// provide a nonce to differentiate notes controlled by the same
|
||||||
// secret. Each note is assigned a unique nullifier nonce.
|
// secret. Each note is assigned a unique nullifier nonce.
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
pub struct NullifierNonce([u8; 32]);
|
pub struct NullifierNonce(pub [u8; 32]);
|
||||||
|
|
||||||
// The nullifier attached to input notes to prove an input has not
|
// The nullifier attached to input notes to prove an input has not
|
||||||
// already been spent.
|
// already been spent.
|
||||||
|
|
Loading…
Reference in New Issue