mirror of
https://github.com/logos-blockchain/logos-blockchain-pocs.git
synced 2026-04-30 22:53:11 +00:00
mv covenant verification into ptx proof
This commit is contained in:
parent
fdab50a0e4
commit
baaf10a429
@ -1,6 +1,9 @@
|
||||
use ledger_proof_statements::ptx::{PtxPrivate, PtxPublic};
|
||||
|
||||
use crate::error::{Error, Result};
|
||||
use crate::{
|
||||
error::{Error, Result},
|
||||
ConstraintProof,
|
||||
};
|
||||
use cl::cl::{
|
||||
mmr::{MMRProof, MMR},
|
||||
PartialTxWitness,
|
||||
@ -16,17 +19,19 @@ impl ProvedPartialTx {
|
||||
pub fn prove(
|
||||
ptx_witness: PartialTxWitness,
|
||||
input_cm_proofs: Vec<(MMR, MMRProof)>,
|
||||
covenant_proofs: Vec<ConstraintProof>,
|
||||
) -> Result<ProvedPartialTx> {
|
||||
let ptx_private = PtxPrivate {
|
||||
ptx: ptx_witness,
|
||||
input_cm_proofs,
|
||||
};
|
||||
|
||||
let env = risc0_zkvm::ExecutorEnv::builder()
|
||||
.write(&ptx_private)
|
||||
.unwrap()
|
||||
.build()
|
||||
.unwrap();
|
||||
let mut env = risc0_zkvm::ExecutorEnv::builder();
|
||||
|
||||
for covenant_proof in covenant_proofs {
|
||||
env.add_assumption(covenant_proof.risc0_receipt);
|
||||
}
|
||||
let env = env.write(&ptx_private).unwrap().build().unwrap();
|
||||
|
||||
// Obtain the default prover.
|
||||
let prover = risc0_zkvm::default_prover();
|
||||
|
||||
@ -77,7 +77,17 @@ fn cross_transfer_transition(
|
||||
outputs: vec![transfer, change],
|
||||
balance_blinding: BalanceWitness::random_blinding(&mut rng),
|
||||
};
|
||||
let proved_ptx = ProvedPartialTx::prove(ptx_witness.clone(), vec![input_proof]).unwrap();
|
||||
|
||||
// Prove the constraints for alices input (she uses the no-op constraint)
|
||||
let constraint_proof =
|
||||
ConstraintProof::prove_nop(input.nullifier(), ptx_witness.commit().root());
|
||||
|
||||
let proved_ptx = ProvedPartialTx::prove(
|
||||
ptx_witness.clone(),
|
||||
vec![input_proof],
|
||||
vec![constraint_proof.clone()],
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let balance = ProvedBalance::prove(&BalancePrivate {
|
||||
balances: vec![ptx_witness.balance()],
|
||||
@ -89,10 +99,6 @@ fn cross_transfer_transition(
|
||||
balance,
|
||||
};
|
||||
|
||||
// Prove the constraints for alices input (she uses the no-op constraint)
|
||||
let constraint_proof =
|
||||
ConstraintProof::prove_nop(input.nullifier(), proved_ptx.public.ptx.root());
|
||||
|
||||
let ledger_a_transition = ProvedLedgerTransition::prove(
|
||||
ledger_a.clone(),
|
||||
zone_a,
|
||||
|
||||
@ -4,7 +4,6 @@ use cl::{
|
||||
};
|
||||
use ledger_proof_statements::{
|
||||
balance::BalancePublic,
|
||||
constraint::ConstraintPublic,
|
||||
ledger::{CrossZoneBundle, LedgerProofPrivate, LedgerProofPublic, LedgerPtxWitness},
|
||||
};
|
||||
use risc0_zkvm::{guest::env, serde};
|
||||
@ -81,14 +80,6 @@ fn process_ptx(
|
||||
assert_eq!(cm_mmr, &ledger.commitments); // we force commitment proofs w.r.t. latest MMR
|
||||
|
||||
ledger.assert_nf_update(input.nullifier, nf_proof);
|
||||
|
||||
env::verify(
|
||||
input.constraint.0,
|
||||
&serde::to_vec(&ConstraintPublic {
|
||||
ptx_root: ptx.ptx.root(),
|
||||
nf: input.nullifier,
|
||||
}).unwrap(),
|
||||
).unwrap();
|
||||
}
|
||||
|
||||
let mut outputs = vec![];
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/// Input Proof
|
||||
use ledger_proof_statements::ptx::{PtxPrivate, PtxPublic};
|
||||
use risc0_zkvm::guest::env;
|
||||
use ledger_proof_statements::{constraint::ConstraintPublic, ptx::{PtxPrivate, PtxPublic}};
|
||||
use risc0_zkvm::{serde, guest::env};
|
||||
|
||||
fn main() {
|
||||
let PtxPrivate {
|
||||
@ -8,12 +8,24 @@ fn main() {
|
||||
input_cm_proofs,
|
||||
} = env::read();
|
||||
|
||||
let ptx_commit = ptx.commit();
|
||||
let ptx_root = ptx_commit.root();
|
||||
|
||||
assert_eq!(ptx.inputs.len(), input_cm_proofs.len());
|
||||
let mut cm_mmr = Vec::new();
|
||||
for (input, (mmr, mmr_proof)) in ptx.inputs.iter().zip(input_cm_proofs) {
|
||||
let note_cm = input.note_commitment();
|
||||
assert!(mmr.verify_proof(¬e_cm.0, &mmr_proof));
|
||||
cm_mmr.push(mmr);
|
||||
|
||||
env::verify(
|
||||
input.note.constraint.0,
|
||||
&serde::to_vec(&ConstraintPublic {
|
||||
ptx_root,
|
||||
nf: input.nullifier(),
|
||||
}).unwrap(),
|
||||
).unwrap();
|
||||
|
||||
}
|
||||
|
||||
for output in ptx.outputs.iter() {
|
||||
@ -21,7 +33,7 @@ fn main() {
|
||||
}
|
||||
|
||||
env::commit(&PtxPublic {
|
||||
ptx: ptx.commit(),
|
||||
ptx: ptx_commit,
|
||||
cm_mmr,
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user