From e17483e0262fefc54b98913201259ca7ba48d5f8 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Mon, 13 Oct 2025 18:01:59 -0300 Subject: [PATCH 1/4] Change precompute to 0 --- crates/common/crypto/kzg.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/common/crypto/kzg.rs b/crates/common/crypto/kzg.rs index 5f87483c2d9..968b64e9e82 100644 --- a/crates/common/crypto/kzg.rs +++ b/crates/common/crypto/kzg.rs @@ -46,7 +46,7 @@ pub fn verify_cell_kzg_proof_batch( ))); #[cfg(feature = "c-kzg")] { - let c_kzg_settings = c_kzg::ethereum_kzg_settings(8); + let c_kzg_settings = c_kzg::ethereum_kzg_settings(0); let mut cells = Vec::new(); for blob in blobs { cells.extend(c_kzg_settings.compute_cells(&(*blob).into())?.into_iter()); @@ -90,7 +90,7 @@ pub fn verify_blob_kzg_proof( #[cfg(feature = "c-kzg")] { c_kzg::KzgSettings::verify_blob_kzg_proof( - c_kzg::ethereum_kzg_settings(8), + c_kzg::ethereum_kzg_settings(0), &blob.into(), &commitment.into(), &proof.into(), @@ -120,7 +120,7 @@ pub fn verify_kzg_proof( #[cfg(feature = "c-kzg")] { c_kzg::KzgSettings::verify_kzg_proof( - c_kzg::ethereum_kzg_settings(8), + c_kzg::ethereum_kzg_settings(0), &commitment_bytes.into(), &z.into(), &y.into(), @@ -135,11 +135,11 @@ pub fn blob_to_kzg_commitment_and_proof(blob: &Blob) -> Result<(Commitment, Proo let blob: c_kzg::Blob = (*blob).into(); let commitment = - c_kzg::KzgSettings::blob_to_kzg_commitment(c_kzg::ethereum_kzg_settings(8), &blob)?; + c_kzg::KzgSettings::blob_to_kzg_commitment(c_kzg::ethereum_kzg_settings(0), &blob)?; let commitment_bytes = commitment.to_bytes(); let proof = c_kzg::KzgSettings::compute_blob_kzg_proof( - c_kzg::ethereum_kzg_settings(8), + c_kzg::ethereum_kzg_settings(0), &blob, &commitment_bytes, )?; From ca2c4d7623d07ef78e8e360dc69d53773e828e76 Mon Sep 17 00:00:00 2001 From: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> Date: Tue, 14 Oct 2025 17:51:41 -0300 Subject: [PATCH 2/4] Add risc0 feature to kzg --- crates/common/Cargo.toml | 3 ++- crates/common/crypto/Cargo.toml | 1 + crates/common/crypto/kzg.rs | 19 ++++++++++++++----- .../src/guest_program/src/risc0/Cargo.toml | 2 +- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index 7931d285e5f..aa2a5175785 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -38,7 +38,8 @@ hex-literal.workspace = true [features] default = [] c-kzg = ["ethrex-crypto/c-kzg"] - +risc0 = ["ethrex-crypto/risc0"] + [lib] path = "./common.rs" diff --git a/crates/common/crypto/Cargo.toml b/crates/common/crypto/Cargo.toml index d1de2c2e5be..7975810c9bb 100644 --- a/crates/common/crypto/Cargo.toml +++ b/crates/common/crypto/Cargo.toml @@ -18,3 +18,4 @@ thiserror.workspace = true [features] default = [] c-kzg = ["dep:c-kzg"] +risc0 = [] diff --git a/crates/common/crypto/kzg.rs b/crates/common/crypto/kzg.rs index 968b64e9e82..8ed0245b46d 100644 --- a/crates/common/crypto/kzg.rs +++ b/crates/common/crypto/kzg.rs @@ -10,6 +10,15 @@ pub const FIELD_ELEMENTS_PER_EXT_BLOB: usize = 2 * FIELD_ELEMENTS_PER_BLOB; pub const FIELD_ELEMENTS_PER_CELL: usize = 64; pub const BYTES_PER_CELL: usize = FIELD_ELEMENTS_PER_CELL * BYTES_PER_FIELD_ELEMENT; pub const CELLS_PER_EXT_BLOB: usize = FIELD_ELEMENTS_PER_EXT_BLOB / FIELD_ELEMENTS_PER_CELL; + +// https://github.com/ethereum/c-kzg-4844?tab=readme-ov-file#precompute +// For Risc0 we need this parameter to be 0. +// For the rest we keep the value 8 due to optimizations. +#[cfg(not(feature = "risc0"))] +pub const KZG_PRECOMPUTE: u64 = 8; +#[cfg(feature = "risc0")] +pub const KZG_PRECOMPUTE: u64 = 0; + type Bytes48 = [u8; 48]; type Blob = [u8; BYTES_PER_BLOB]; type Commitment = Bytes48; @@ -46,7 +55,7 @@ pub fn verify_cell_kzg_proof_batch( ))); #[cfg(feature = "c-kzg")] { - let c_kzg_settings = c_kzg::ethereum_kzg_settings(0); + let c_kzg_settings = c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE); let mut cells = Vec::new(); for blob in blobs { cells.extend(c_kzg_settings.compute_cells(&(*blob).into())?.into_iter()); @@ -90,7 +99,7 @@ pub fn verify_blob_kzg_proof( #[cfg(feature = "c-kzg")] { c_kzg::KzgSettings::verify_blob_kzg_proof( - c_kzg::ethereum_kzg_settings(0), + c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE), &blob.into(), &commitment.into(), &proof.into(), @@ -120,7 +129,7 @@ pub fn verify_kzg_proof( #[cfg(feature = "c-kzg")] { c_kzg::KzgSettings::verify_kzg_proof( - c_kzg::ethereum_kzg_settings(0), + c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE), &commitment_bytes.into(), &z.into(), &y.into(), @@ -135,11 +144,11 @@ pub fn blob_to_kzg_commitment_and_proof(blob: &Blob) -> Result<(Commitment, Proo let blob: c_kzg::Blob = (*blob).into(); let commitment = - c_kzg::KzgSettings::blob_to_kzg_commitment(c_kzg::ethereum_kzg_settings(0), &blob)?; + c_kzg::KzgSettings::blob_to_kzg_commitment(c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE), &blob)?; let commitment_bytes = commitment.to_bytes(); let proof = c_kzg::KzgSettings::compute_blob_kzg_proof( - c_kzg::ethereum_kzg_settings(0), + c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE), &blob, &commitment_bytes, )?; diff --git a/crates/l2/prover/src/guest_program/src/risc0/Cargo.toml b/crates/l2/prover/src/guest_program/src/risc0/Cargo.toml index f4b0cea8cee..1878b885654 100644 --- a/crates/l2/prover/src/guest_program/src/risc0/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/risc0/Cargo.toml @@ -20,7 +20,7 @@ guest_program = { path = "../../", default-features = false, features = [ rkyv = { version = "0.8.10", features = ["unaligned"] } -ethrex-common = { path = "../../../../../../common", default-features = false } +ethrex-common = { path = "../../../../../../common", default-features = false, features = ["risc0"] } ethrex-storage = { path = "../../../../../../storage", default-features = false } ethrex-rlp = { path = "../../../../../../common/rlp" } ethrex-vm = { path = "../../../../../../vm", default-features = false, features = [ From 2c5b849fd8db10749f02e7cb046861fe33f8b399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Paradelo?= Date: Wed, 15 Oct 2025 19:46:37 -0300 Subject: [PATCH 3/4] include c-kzg risc0 --- crates/common/crypto/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/common/crypto/Cargo.toml b/crates/common/crypto/Cargo.toml index 7975810c9bb..346f99cf22c 100644 --- a/crates/common/crypto/Cargo.toml +++ b/crates/common/crypto/Cargo.toml @@ -18,4 +18,4 @@ thiserror.workspace = true [features] default = [] c-kzg = ["dep:c-kzg"] -risc0 = [] +risc0 = ["c-kzg"] From 36be0a2ee2925aecc26048a3ba070c380cf25c6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Paradelo?= Date: Wed, 15 Oct 2025 19:47:31 -0300 Subject: [PATCH 4/4] fix lint --- crates/common/crypto/kzg.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/common/crypto/kzg.rs b/crates/common/crypto/kzg.rs index 8ed0245b46d..72c6d43e0b0 100644 --- a/crates/common/crypto/kzg.rs +++ b/crates/common/crypto/kzg.rs @@ -143,8 +143,10 @@ pub fn verify_kzg_proof( pub fn blob_to_kzg_commitment_and_proof(blob: &Blob) -> Result<(Commitment, Proof), KzgError> { let blob: c_kzg::Blob = (*blob).into(); - let commitment = - c_kzg::KzgSettings::blob_to_kzg_commitment(c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE), &blob)?; + let commitment = c_kzg::KzgSettings::blob_to_kzg_commitment( + c_kzg::ethereum_kzg_settings(KZG_PRECOMPUTE), + &blob, + )?; let commitment_bytes = commitment.to_bytes(); let proof = c_kzg::KzgSettings::compute_blob_kzg_proof(