goas/ledger: move prove_input to ProvedInput::prove
This commit is contained in:
parent
d424a95786
commit
5208164204
|
@ -10,6 +10,54 @@ pub struct ProvedInput {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ProvedInput {
|
impl ProvedInput {
|
||||||
|
pub fn prove(input: cl::InputWitness, note_commitments: &[cl::NoteCommitment]) -> Self {
|
||||||
|
let output_cm = input.to_output().commit_note();
|
||||||
|
|
||||||
|
let cm_leaves = note_commitment_leaves(note_commitments);
|
||||||
|
let cm_idx = note_commitments
|
||||||
|
.iter()
|
||||||
|
.position(|c| c == &output_cm)
|
||||||
|
.unwrap();
|
||||||
|
let cm_path = cl::merkle::path(cm_leaves, cm_idx);
|
||||||
|
|
||||||
|
let secrets = InputPrivate { input, cm_path };
|
||||||
|
|
||||||
|
let env = risc0_zkvm::ExecutorEnv::builder()
|
||||||
|
.write(&secrets)
|
||||||
|
.unwrap()
|
||||||
|
.build()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Obtain the default prover.
|
||||||
|
let prover = risc0_zkvm::default_prover();
|
||||||
|
|
||||||
|
use std::time::Instant;
|
||||||
|
let start_t = Instant::now();
|
||||||
|
|
||||||
|
// Proof information by proving the specified ELF binary.
|
||||||
|
// This struct contains the receipt along with statistics about execution of the guest
|
||||||
|
let opts = risc0_zkvm::ProverOpts::succinct();
|
||||||
|
let prove_info = prover
|
||||||
|
.prove_with_opts(env, nomos_cl_risc0_proofs::INPUT_ELF, &opts)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"STARK prover time: {:.2?}, total_cycles: {}",
|
||||||
|
start_t.elapsed(),
|
||||||
|
prove_info.stats.total_cycles
|
||||||
|
);
|
||||||
|
// extract the receipt.
|
||||||
|
let receipt = prove_info.receipt;
|
||||||
|
|
||||||
|
Self {
|
||||||
|
input: InputPublic {
|
||||||
|
cm_root: cl::merkle::root(cm_leaves),
|
||||||
|
input: input.commit(),
|
||||||
|
},
|
||||||
|
proof: InputProof { receipt },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn verify(&self) -> bool {
|
pub fn verify(&self) -> bool {
|
||||||
self.proof.verify(&self.input)
|
self.proof.verify(&self.input)
|
||||||
}
|
}
|
||||||
|
@ -35,57 +83,6 @@ impl InputProof {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn prove_input(
|
|
||||||
input: cl::InputWitness,
|
|
||||||
note_commitments: &[cl::NoteCommitment],
|
|
||||||
) -> ProvedInput {
|
|
||||||
let output_cm = input.to_output().commit_note();
|
|
||||||
|
|
||||||
let cm_leaves = note_commitment_leaves(note_commitments);
|
|
||||||
let cm_idx = note_commitments
|
|
||||||
.iter()
|
|
||||||
.position(|c| c == &output_cm)
|
|
||||||
.unwrap();
|
|
||||||
let cm_path = cl::merkle::path(cm_leaves, cm_idx);
|
|
||||||
|
|
||||||
let secrets = InputPrivate { input, cm_path };
|
|
||||||
|
|
||||||
let env = risc0_zkvm::ExecutorEnv::builder()
|
|
||||||
.write(&secrets)
|
|
||||||
.unwrap()
|
|
||||||
.build()
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
// Obtain the default prover.
|
|
||||||
let prover = risc0_zkvm::default_prover();
|
|
||||||
|
|
||||||
use std::time::Instant;
|
|
||||||
let start_t = Instant::now();
|
|
||||||
|
|
||||||
// Proof information by proving the specified ELF binary.
|
|
||||||
// This struct contains the receipt along with statistics about execution of the guest
|
|
||||||
let opts = risc0_zkvm::ProverOpts::succinct();
|
|
||||||
let prove_info = prover
|
|
||||||
.prove_with_opts(env, nomos_cl_risc0_proofs::INPUT_ELF, &opts)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
println!(
|
|
||||||
"STARK prover time: {:.2?}, total_cycles: {}",
|
|
||||||
start_t.elapsed(),
|
|
||||||
prove_info.stats.total_cycles
|
|
||||||
);
|
|
||||||
// extract the receipt.
|
|
||||||
let receipt = prove_info.receipt;
|
|
||||||
|
|
||||||
ProvedInput {
|
|
||||||
input: InputPublic {
|
|
||||||
cm_root: cl::merkle::root(cm_leaves),
|
|
||||||
input: input.commit(),
|
|
||||||
},
|
|
||||||
proof: InputProof { receipt },
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn note_commitment_leaves(note_commitments: &[cl::NoteCommitment]) -> [[u8; 32]; MAX_NOTE_COMMS] {
|
fn note_commitment_leaves(note_commitments: &[cl::NoteCommitment]) -> [[u8; 32]; MAX_NOTE_COMMS] {
|
||||||
let note_comm_bytes = Vec::from_iter(note_commitments.iter().map(|c| c.as_bytes().to_vec()));
|
let note_comm_bytes = Vec::from_iter(note_commitments.iter().map(|c| c.as_bytes().to_vec()));
|
||||||
let cm_leaves = cl::merkle::padded_leaves::<MAX_NOTE_COMMS>(¬e_comm_bytes);
|
let cm_leaves = cl::merkle::padded_leaves::<MAX_NOTE_COMMS>(¬e_comm_bytes);
|
||||||
|
@ -112,7 +109,7 @@ mod test {
|
||||||
|
|
||||||
let notes = vec![input.to_output().commit_note()];
|
let notes = vec![input.to_output().commit_note()];
|
||||||
|
|
||||||
let proved_input = prove_input(input, ¬es);
|
let proved_input = ProvedInput::prove(input, ¬es);
|
||||||
|
|
||||||
let expected_public_inputs = InputPublic {
|
let expected_public_inputs = InputPublic {
|
||||||
cm_root: cl::merkle::root(note_commitment_leaves(¬es)),
|
cm_root: cl::merkle::root(note_commitment_leaves(¬es)),
|
||||||
|
|
Loading…
Reference in New Issue