Skip to content

Commit 625e59b

Browse files
starknet_transaction_prover: bump stwo - compressed proofs (#13397)
1 parent cbe3c5b commit 625e59b

7 files changed

Lines changed: 29 additions & 41 deletions

File tree

Cargo.lock

Lines changed: 14 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,8 +324,8 @@ paste = "1.0.15"
324324
phf = "0.11"
325325
pretty_assertions = "1.4.0"
326326
primitive-types = "0.12.1"
327-
privacy-circuit-verify = { git = "https://github.com/starkware-libs/proving-utils", rev = "6f12ca27842b3f93078830863b4582d5af8a3339" }
328-
privacy-prove = { git = "https://github.com/starkware-libs/proving-utils", rev = "6f12ca27842b3f93078830863b4582d5af8a3339" }
327+
privacy-circuit-verify = { git = "https://github.com/starkware-libs/proving-utils", rev = "dbc39e745d23424f1997ce3505ce5f83805cefde" }
328+
privacy-prove = { git = "https://github.com/starkware-libs/proving-utils", rev = "dbc39e745d23424f1997ce3505ce5f83805cefde" }
329329
proc-macro2 = "1.0"
330330
prometheus-parse = "0.2.4"
331331
prost = "0.12.1"
-45.7 KB
Binary file not shown.

crates/starknet_proof_verifier/src/proof_verifier.rs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
use std::sync::Arc;
44

55
use apollo_sizeof::SizeOf;
6+
use privacy_circuit_verify::{verify_recursive_circuit, PrivacyProofOutput};
67
use serde::{Deserialize, Serialize};
78
use starknet_api::transaction::fields::{Proof, ProofFacts, PROOF_VERSION};
89
use starknet_types_core::felt::Felt;
@@ -18,9 +19,6 @@ pub enum VerifyProofError {
1819
InvalidProofVersion { expected: Felt, actual: Felt },
1920
#[error("Proof facts too short: expected at least 3 elements, got {length}.")]
2021
ProofFactsTooShort { length: usize },
21-
// TODO(AvivG): Remove this once PrivacyProofOutput holds u8 proof.
22-
#[error("Proof byte length {0} is not a multiple of 4.")]
23-
InvalidProofLength(usize),
2422
#[error("Proof verification failed: {0}")]
2523
Verification(String),
2624
}
@@ -34,7 +32,6 @@ impl PartialEq for VerifyProofError {
3432
Self::InvalidProofVersion { expected: exp_l, actual: act_l },
3533
Self::InvalidProofVersion { expected: exp_r, actual: act_r },
3634
) => exp_l == exp_r && act_l == act_r,
37-
(Self::InvalidProofLength(lhs), Self::InvalidProofLength(rhs)) => lhs == rhs,
3835
(Self::Verification(lhs), Self::Verification(rhs)) => lhs == rhs,
3936
(Self::ProofFactsTooShort { length: l }, Self::ProofFactsTooShort { length: r }) => {
4037
l == r
@@ -140,14 +137,9 @@ pub fn verify_proof(proof_facts: ProofFacts, proof: Proof) -> Result<(), VerifyP
140137

141138
// Reconstruct the output preimage from proof facts and verify the proof.
142139
let output_preimage = reconstruct_output_preimage(&proof_facts)?;
143-
// TODO(AvivG): this conversion is temporary until PrivacyProofOutput holds u8 proof.
144-
let (chunks, []) = proof.0.as_chunks::<4>() else {
145-
return Err(VerifyProofError::InvalidProofLength(proof.0.len()));
146-
};
147-
let proof_u32s: Vec<u32> = chunks.iter().map(|c| u32::from_be_bytes(*c)).collect();
148-
let proof_output =
149-
privacy_circuit_verify::PrivacyProofOutput { proof: proof_u32s, output_preimage };
150-
privacy_circuit_verify::verify_recursive_circuit(&proof_output)
140+
// TODO(Avi): Avoid cloning the proof.
141+
let proof_output = PrivacyProofOutput { proof: proof.0.to_vec(), output_preimage };
142+
verify_recursive_circuit(&proof_output)
151143
.map_err(|e| VerifyProofError::Verification(e.to_string()))?;
152144

153145
Ok(())

crates/starknet_transaction_prover/src/proving/prover.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,7 @@ pub(crate) async fn prove(
3434
.map_err(ProvingError::TaskJoin)?
3535
.map_err(ProvingError::ProverExecution)?;
3636

37-
// TODO(AvivG): this conversion is temporary until PrivacyProofOutput holds u8 proof.
38-
let proof_bytes: Vec<u8> = proof_output.proof.iter().flat_map(|n| n.to_be_bytes()).collect();
39-
let proof = Proof::from(proof_bytes);
37+
let proof = Proof::from(proof_output.proof);
4038
let program_output = ProgramOutput::from(proof_output.output_preimage);
4139

4240
Ok(ProverOutput { proof, program_output })

crates/starknet_transaction_prover/src/proving/prover_test.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use std::sync::Arc;
33

44
use apollo_infra_utils::path::resolve_project_relative_path;
55
use cairo_vm::vm::runners::cairo_pie::CairoPie;
6+
use privacy_circuit_verify::{verify_recursive_circuit, PrivacyProofOutput};
67
use privacy_prove::{prepare_recursive_prover_precomputes, RecursiveProverPrecomputes};
78
use starknet_api::transaction::fields::VIRTUAL_SNOS;
89
use starknet_proof_verifier::ProgramOutput;
@@ -46,15 +47,8 @@ async fn test_prove_cairo_pie_10_transfers() {
4647

4748
// Verify the proof using the circuit verifier.
4849
let output_preimage: Vec<starknet_types_core::felt::Felt> = output.program_output.0.to_vec();
49-
// TODO(AvivG): this conversion is temporary until PrivacyProofOutput holds u8 proof.
50-
let (chunks, []) = output.proof.0.as_chunks::<4>() else {
51-
panic!("Proof byte length {} is not a multiple of 4", output.proof.0.len());
52-
};
53-
let proof_u32s: Vec<u32> = chunks.iter().map(|c| u32::from_be_bytes(*c)).collect();
54-
let proof_output =
55-
privacy_circuit_verify::PrivacyProofOutput { proof: proof_u32s, output_preimage };
56-
privacy_circuit_verify::verify_recursive_circuit(&proof_output)
57-
.expect("Failed to verify proof");
50+
let proof_output = PrivacyProofOutput { proof: output.proof.0.to_vec(), output_preimage };
51+
verify_recursive_circuit(&proof_output).expect("Failed to verify proof");
5852

5953
// Read expected program output.
6054
let expected_program_output_str = fs::read_to_string(&expected_program_output_path)

crates/starknet_transaction_prover/src/proving/virtual_snos_prover.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ use std::time::Instant;
1010
use blockifier::state::contract_class_manager::ContractClassManager;
1111
use blockifier_reexecution::state_reader::rpc_objects::BlockId;
1212
use blockifier_reexecution::utils::get_chain_info;
13+
#[cfg(feature = "stwo_proving")]
14+
use privacy_prove::{prepare_recursive_prover_precomputes, RecursiveProverPrecomputes};
1315
use serde::{Deserialize, Serialize};
1416
use starknet_api::rpc_transaction::{RpcInvokeTransaction, RpcInvokeTransactionV3, RpcTransaction};
1517
use starknet_api::transaction::fields::{Fee, Proof, ProofFacts, ValidResourceBounds};
@@ -49,7 +51,7 @@ pub(crate) struct VirtualSnosProver<R: VirtualSnosRunner> {
4951
validate_zero_fee_fields: bool,
5052
/// Precomputed data for the recursive prover, prepared once at startup.
5153
#[cfg(feature = "stwo_proving")]
52-
precomputes: Arc<privacy_prove::RecursiveProverPrecomputes>,
54+
precomputes: Arc<RecursiveProverPrecomputes>,
5355
}
5456

5557
/// Type alias for the RPC-based virtual SNOS prover.
@@ -73,7 +75,7 @@ impl VirtualSnosProver<RpcRunnerFactory> {
7375
prover_config.runner_config.clone(),
7476
);
7577
#[cfg(feature = "stwo_proving")]
76-
let precomputes = privacy_prove::prepare_recursive_prover_precomputes()
78+
let precomputes = prepare_recursive_prover_precomputes()
7779
.expect("Failed to prepare recursive prover precomputes");
7880
Self {
7981
runner,
@@ -91,7 +93,7 @@ impl<R: VirtualSnosRunner> VirtualSnosProver<R> {
9193
#[allow(dead_code)]
9294
pub(crate) fn from_runner(runner: R) -> Self {
9395
#[cfg(feature = "stwo_proving")]
94-
let precomputes = privacy_prove::prepare_recursive_prover_precomputes()
96+
let precomputes = prepare_recursive_prover_precomputes()
9597
.expect("Failed to prepare recursive prover precomputes");
9698
Self {
9799
runner,

0 commit comments

Comments
 (0)