From 2386371566c735584a726f62490703222ee35b9a Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 15:46:00 -0300 Subject: [PATCH 01/92] Adjust crates to make ZisK guest compile --- cmd/ethrex/Cargo.toml | 7 +++- crates/blockchain/Cargo.toml | 14 ++++--- crates/blockchain/error.rs | 2 +- crates/common/Cargo.toml | 11 ++++-- crates/common/common.rs | 3 ++ crates/common/errors.rs | 9 +++++ crates/common/types/block.rs | 7 ++-- crates/common/types/transaction.rs | 45 ++++++++++++++++------ crates/l2/common/Cargo.toml | 14 ++++++- crates/l2/common/src/utils.rs | 42 +++++++++++++++++--- crates/l2/monitor/widget/rich_accounts.rs | 2 +- crates/l2/networking/rpc/l2/transaction.rs | 7 ++-- crates/l2/networking/rpc/utils.rs | 4 +- crates/l2/sequencer/setup.rs | 3 +- crates/l2/tests/state_reconstruct.rs | 2 +- crates/l2/tests/tests.rs | 38 ++++++++++-------- crates/networking/rpc/utils.rs | 4 +- crates/vm/Cargo.toml | 10 +++-- crates/vm/levm/Cargo.toml | 15 +++++--- crates/vm/levm/src/constants.rs | 11 +++--- crates/vm/levm/src/precompiles.rs | 4 +- crates/vm/levm/src/utils.rs | 26 ++++++++----- 22 files changed, 195 insertions(+), 85 deletions(-) create mode 100644 crates/common/errors.rs diff --git a/cmd/ethrex/Cargo.toml b/cmd/ethrex/Cargo.toml index 958313131dc..dc08b663e9a 100644 --- a/cmd/ethrex/Cargo.toml +++ b/cmd/ethrex/Cargo.toml @@ -73,8 +73,13 @@ path = "./lib.rs" [features] debug = ["ethrex-vm/debug"] -default = ["rocksdb", "c-kzg", "metrics", "jemalloc", "dev"] +default = ["rocksdb", "c-kzg", "secp256k1", "metrics", "jemalloc", "dev"] dev = ["dep:ethrex-dev"] +secp256k1 = [ + "ethrex-common/secp256k1", + "ethrex-vm/secp256k1", + "ethrex-blockchain/secp256k1", +] c-kzg = [ "ethrex-vm/c-kzg", "ethrex-common/c-kzg", diff --git a/crates/blockchain/Cargo.toml b/crates/blockchain/Cargo.toml index 2e859496882..a50798855b7 100644 --- a/crates/blockchain/Cargo.toml +++ b/crates/blockchain/Cargo.toml @@ -9,11 +9,11 @@ documentation.workspace = true [dependencies] ethrex-rlp.workspace = true -ethrex-common.workspace = true +ethrex-common = { workspace = true, default-features = false } ethrex-storage.workspace = true ethrex-trie.workspace = true -ethrex-vm.workspace = true -secp256k1.workspace = true +ethrex-vm = { workspace = true, default-features = false } +ethrex-metrics = { path = "./metrics", default-features = false } thiserror.workspace = true sha3.workspace = true @@ -24,8 +24,6 @@ rustc-hash.workspace = true tokio = { workspace = true, features = ["time", "rt"] } tokio-util.workspace = true -ethrex-metrics = { path = "./metrics", default-features = false } - [dev-dependencies] serde_json.workspace = true hex = "0.4.3" @@ -35,9 +33,13 @@ tokio = { workspace = true, features = ["full"] } path = "./blockchain.rs" [features] -default = [] +default = ["secp256k1"] +secp256k1 = ["ethrex-common/secp256k1", "ethrex-vm/secp256k1"] c-kzg = ["ethrex-common/c-kzg", "ethrex-vm/c-kzg"] metrics = ["ethrex-metrics/transactions"] +sp1 = ["ethrex-common/sp1", "ethrex-vm/sp1"] +risc0 = ["ethrex-common/risc0", "ethrex-vm/risc0", "c-kzg"] +zisk = ["ethrex-common/zisk", "ethrex-vm/zisk"] [lints.clippy] unwrap_used = "deny" diff --git a/crates/blockchain/error.rs b/crates/blockchain/error.rs index e8769235d4f..8681c828aa9 100644 --- a/crates/blockchain/error.rs +++ b/crates/blockchain/error.rs @@ -131,7 +131,7 @@ pub enum MempoolError { #[error("Requested pooled transaction was not received")] RequestedPooledTxNotFound, #[error("Transaction sender is invalid {0}")] - InvalidTxSender(#[from] secp256k1::Error), + InvalidTxSender(#[from] ethrex_common::Error), #[error("Attempted to replace a pooled transaction with an underpriced transaction")] UnderpricedReplacement, } diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index b333a592d46..68542e821e0 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -21,7 +21,6 @@ thiserror.workspace = true sha2.workspace = true kzg-rs.workspace = true sha3.workspace = true -secp256k1.workspace = true once_cell = "1.20.2" libc = "0.2" crc32fast.workspace = true @@ -33,13 +32,19 @@ url.workspace = true rkyv.workspace = true rustc-hash.workspace = true +secp256k1 = { workspace = true, optional = true } +k256 = { workspace = true, optional = true } + [dev-dependencies] hex-literal.workspace = true [features] -default = [] +default = ["secp256k1"] c-kzg = ["ethrex-crypto/c-kzg"] -risc0 = ["ethrex-crypto/risc0"] +secp256k1 = ["dep:secp256k1"] +risc0 = ["ethrex-crypto/risc0", "dep:k256"] +zisk = ["dep:k256"] +sp1 = ["dep:k256"] [lib] path = "./common.rs" diff --git a/crates/common/common.rs b/crates/common/common.rs index e35696f772f..9d6b550f293 100644 --- a/crates/common/common.rs +++ b/crates/common/common.rs @@ -5,9 +5,12 @@ pub mod types; pub use bytes::Bytes; pub mod base64; pub use ethrex_trie::{TrieLogger, TrieWitness}; +pub mod errors; pub mod evm; pub mod fd_limit; pub mod genesis_utils; pub mod rkyv_utils; pub mod tracing; pub mod utils; + +pub use errors::Error; diff --git a/crates/common/errors.rs b/crates/common/errors.rs new file mode 100644 index 00000000000..e3a9abad106 --- /dev/null +++ b/crates/common/errors.rs @@ -0,0 +1,9 @@ +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] + #[error("secp256k1 error: {0}")] + Secp256k1(#[from] secp256k1::Error), + #[cfg(any(feature = "zisk", feature = "risc0", feature = "sp1"))] + #[error("k256 error: {0}")] + K256(#[from] k256::ecdsa::Error), +} diff --git a/crates/common/types/block.rs b/crates/common/types/block.rs index 2348d13f028..883a22cc201 100644 --- a/crates/common/types/block.rs +++ b/crates/common/types/block.rs @@ -2,6 +2,7 @@ use super::{ BASE_FEE_MAX_CHANGE_DENOMINATOR, ChainConfig, Fork, ForkBlobSchedule, GAS_LIMIT_ADJUSTMENT_FACTOR, GAS_LIMIT_MINIMUM, INITIAL_BASE_FEE, }; +use crate::errors::Error; use crate::utils::keccak; use crate::{ Address, H256, U256, @@ -250,15 +251,13 @@ impl BlockBody { } } - pub fn get_transactions_with_sender( - &self, - ) -> Result, secp256k1::Error> { + pub fn get_transactions_with_sender(&self) -> Result, Error> { // Recovering addresses is computationally expensive. // Computing them in parallel greatly reduces execution time. self.transactions .par_iter() .map(|tx| Ok((tx, tx.sender()?))) - .collect::, secp256k1::Error>>() + .collect::, Error>>() } } diff --git a/crates/common/types/transaction.rs b/crates/common/types/transaction.rs index c3bc9243944..4b6be4d2456 100644 --- a/crates/common/types/transaction.rs +++ b/crates/common/types/transaction.rs @@ -1,14 +1,12 @@ use std::{cmp::min, fmt::Display}; -use crate::utils::keccak; +use crate::{errors::Error, utils::keccak}; use bytes::Bytes; use ethereum_types::{Address, H256, Signature, U256}; pub use mempool::MempoolTransaction; use rkyv::{Archive, Deserialize as RDeserialize, Serialize as RSerialize}; -use secp256k1::{Message, ecdsa::RecoveryId}; use serde::{Serialize, ser::SerializeStruct}; pub use serde_impl::{AccessListEntry, GenericTransaction, GenericTransactionError}; -use sha3::{Digest, Keccak256}; use ethrex_rlp::{ constants::RLP_NULL, @@ -934,7 +932,7 @@ impl RLPDecode for PrivilegedL2Transaction { } impl Transaction { - pub fn sender(&self) -> Result { + pub fn sender(&self) -> Result { match self { Transaction::LegacyTransaction(tx) => { let signature_y_parity = match self.chain_id() { @@ -968,6 +966,7 @@ impl Transaction { sig[32..64].copy_from_slice(&tx.s.to_big_endian()); sig[64] = signature_y_parity as u8; recover_address_from_message(Signature::from_slice(&sig), &Bytes::from(buf)) + .map_err(Error::from) } Transaction::EIP2930Transaction(tx) => { let mut buf = vec![self.tx_type() as u8]; @@ -986,6 +985,7 @@ impl Transaction { sig[32..64].copy_from_slice(&tx.signature_s.to_big_endian()); sig[64] = tx.signature_y_parity as u8; recover_address_from_message(Signature::from_slice(&sig), &Bytes::from(buf)) + .map_err(Error::from) } Transaction::EIP1559Transaction(tx) => { let mut buf = vec![self.tx_type() as u8]; @@ -1005,6 +1005,7 @@ impl Transaction { sig[32..64].copy_from_slice(&tx.signature_s.to_big_endian()); sig[64] = tx.signature_y_parity as u8; recover_address_from_message(Signature::from_slice(&sig), &Bytes::from(buf)) + .map_err(Error::from) } Transaction::EIP4844Transaction(tx) => { let mut buf = vec![self.tx_type() as u8]; @@ -1026,6 +1027,7 @@ impl Transaction { sig[32..64].copy_from_slice(&tx.signature_s.to_big_endian()); sig[64] = tx.signature_y_parity as u8; recover_address_from_message(Signature::from_slice(&sig), &Bytes::from(buf)) + .map_err(Error::from) } Transaction::EIP7702Transaction(tx) => { let mut buf = vec![self.tx_type() as u8]; @@ -1046,6 +1048,7 @@ impl Transaction { sig[32..64].copy_from_slice(&tx.signature_s.to_big_endian()); sig[64] = tx.signature_y_parity as u8; recover_address_from_message(Signature::from_slice(&sig), &Bytes::from(buf)) + .map_err(Error::from) } Transaction::PrivilegedL2Transaction(tx) => Ok(tx.from), } @@ -1261,32 +1264,52 @@ impl Transaction { } } +#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] pub fn recover_address_from_message( signature: Signature, message: &Bytes, ) -> Result { + use sha2::Digest; // Hash message - let payload: [u8; 32] = Keccak256::new_with_prefix(message.as_ref()) - .finalize() - .into(); + let payload: [u8; 32] = sha3::Keccak256::digest(message).into(); recover_address(signature, H256::from_slice(&payload)) } +#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] pub fn recover_address(signature: Signature, payload: H256) -> Result { + use sha2::Digest; // Create signature let signature_bytes = signature.to_fixed_bytes(); let signature = secp256k1::ecdsa::RecoverableSignature::from_compact( &signature_bytes[..64], - RecoveryId::try_from(signature_bytes[64] as i32)?, // cannot fail + secp256k1::ecdsa::RecoveryId::try_from(signature_bytes[64] as i32)?, // cannot fail )?; // Recover public key - let public = secp256k1::SECP256K1 - .recover_ecdsa(&Message::from_digest(payload.to_fixed_bytes()), &signature)?; + let public = secp256k1::SECP256K1.recover_ecdsa( + &secp256k1::Message::from_digest(payload.to_fixed_bytes()), + &signature, + )?; // Hash public key to obtain address - let hash = Keccak256::new_with_prefix(&public.serialize_uncompressed()[1..]).finalize(); + let hash = sha3::Keccak256::digest(&public.serialize_uncompressed()[1..]); Ok(Address::from_slice(&hash[12..])) } +#[cfg(any(feature = "zisk", feature = "risc0", feature = "sp1"))] +pub fn recover_address_from_message( + _signature: Signature, + _message: &Bytes, +) -> Result { + todo!() +} + +#[cfg(any(feature = "zisk", feature = "risc0", feature = "sp1"))] +pub fn recover_address( + _signature: Signature, + _payload: H256, +) -> Result { + todo!() +} + fn derive_legacy_chain_id(v: U256) -> Option { let v = v.as_u64(); //TODO: Could panic if v is bigger than Max u64 if v == 27 || v == 28 { diff --git a/crates/l2/common/Cargo.toml b/crates/l2/common/Cargo.toml index c0d2b8a9c4b..203aa94bd5d 100644 --- a/crates/l2/common/Cargo.toml +++ b/crates/l2/common/Cargo.toml @@ -18,7 +18,6 @@ thiserror.workspace = true serde.workspace = true lambdaworks-crypto.workspace = true sha3.workspace = true -secp256k1.workspace = true hex.workspace = true serde_with.workspace = true # We do not need to enable the "unaligned" feature here since we are just using @@ -26,6 +25,9 @@ serde_with.workspace = true # inside a guest program rkyv.workspace = true +secp256k1 = { workspace = true, optional = true } +k256 = { workspace = true, optional = true } + [lints.clippy] unwrap_used = "deny" expect_used = "deny" @@ -34,3 +36,13 @@ as_conversions = "deny" unnecessary_cast = "warn" panic = "deny" redundant_clone = "warn" + +[features] +default = ["secp256k1"] + +secp256k1 = ["dep:secp256k1"] +k256 = ["dep:k256"] + +sp1 = ["k256"] +risc0 = ["k256"] +zisk = ["k256"] diff --git a/crates/l2/common/src/utils.rs b/crates/l2/common/src/utils.rs index 96568d84aeb..b8940a70de5 100644 --- a/crates/l2/common/src/utils.rs +++ b/crates/l2/common/src/utils.rs @@ -1,12 +1,14 @@ -use ethrex_common::Address; -use ethrex_common::utils::keccak; -use secp256k1::SecretKey; +#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] +pub fn get_address_from_secret_key( + secret_key_bytes: &[u8], +) -> Result { + let secret_key = secp256k1::SecretKey::from_slice(secret_key_bytes) + .map_err(|e| format!("Failed to parse secret key from slice: {e}"))?; -pub fn get_address_from_secret_key(secret_key: &SecretKey) -> Result { let public_key = secret_key .public_key(secp256k1::SECP256K1) .serialize_uncompressed(); - let hash = keccak(&public_key[1..]); + let hash = ethrex_common::utils::keccak(&public_key[1..]); // Get the last 20 bytes of the hash let address_bytes: [u8; 20] = hash @@ -16,5 +18,33 @@ pub fn get_address_from_secret_key(secret_key: &SecretKey) -> Result Result { + use k256::elliptic_curve::sec1::ToEncodedPoint; + + let secret_key = k256::SecretKey::from_slice(secret_key_bytes) + .map_err(|e| format!("Failed to parse secret key from slice: {e}"))?; + + let public_key = secret_key.public_key().to_encoded_point(false); + let hash = ethrex_common::utils::keccak( + public_key + .as_bytes() + .get(1..) + .ok_or(String::from("failed to slice public key"))?, + ); + + // Get the last 20 bytes of the hash + let address_bytes: [u8; 20] = hash + .as_ref() + .get(12..32) + .ok_or("Failed to get_address_from_secret_key: error slicing address_bytes".to_owned())? + .try_into() + .map_err(|err| format!("Failed to get_address_from_secret_key: {err}"))?; + + Ok(ethrex_common::Address::from(address_bytes)) } diff --git a/crates/l2/monitor/widget/rich_accounts.rs b/crates/l2/monitor/widget/rich_accounts.rs index 5818791ceca..9c210bc0787 100644 --- a/crates/l2/monitor/widget/rich_accounts.rs +++ b/crates/l2/monitor/widget/rich_accounts.rs @@ -59,7 +59,7 @@ impl RichAccountsTable { for pk in private_keys.iter() { let secret_key = SecretKey::from_slice(&parse_hex(pk)?) .map_err(|e| MonitorError::DecodingError(format!("Invalid private key: {e}")))?; - let address = get_address_from_secret_key(&secret_key).map_err(|e| { + let address = get_address_from_secret_key(&secret_key.secret_bytes()).map_err(|e| { MonitorError::DecodingError(format!("Failed to get address from private key: {e}")) })?; let get_balance = rollup_client diff --git a/crates/l2/networking/rpc/l2/transaction.rs b/crates/l2/networking/rpc/l2/transaction.rs index 29d96a99328..b44a6776ff7 100644 --- a/crates/l2/networking/rpc/l2/transaction.rs +++ b/crates/l2/networking/rpc/l2/transaction.rs @@ -121,9 +121,10 @@ impl RpcHandler for SponsoredTx { )); } } - let sponsor_address = get_address_from_secret_key(&context.sponsor_pk).map_err(|_| { - RpcErr::InvalidEthrexL2Message("Ethrex L2 Rpc method not enabled".to_string()) - })?; + let sponsor_address = get_address_from_secret_key(&context.sponsor_pk.secret_bytes()) + .map_err(|_| { + RpcErr::InvalidEthrexL2Message("Ethrex L2 Rpc method not enabled".to_string()) + })?; let latest_block_number = context .l1_ctx .storage diff --git a/crates/l2/networking/rpc/utils.rs b/crates/l2/networking/rpc/utils.rs index 67d28534a91..527f36003fd 100644 --- a/crates/l2/networking/rpc/utils.rs +++ b/crates/l2/networking/rpc/utils.rs @@ -37,8 +37,8 @@ impl From for RpcErr { } } -impl From for RpcErr { - fn from(error: secp256k1::Error) -> Self { +impl From for RpcErr { + fn from(error: ethrex_common::Error) -> Self { Self::L1RpcErr(error.into()) } } diff --git a/crates/l2/sequencer/setup.rs b/crates/l2/sequencer/setup.rs index caecd5e9708..f71acd8874d 100644 --- a/crates/l2/sequencer/setup.rs +++ b/crates/l2/sequencer/setup.rs @@ -72,7 +72,8 @@ pub async fn register_tdx_key( eth_client, TxType::EIP1559, tdx_address, - get_address_from_secret_key(private_key).map_err(ProofCoordinatorError::InternalError)?, + get_address_from_secret_key(&private_key.secret_bytes()) + .map_err(ProofCoordinatorError::InternalError)?, calldata.into(), Overrides { max_fee_per_gas: Some(gas_price), diff --git a/crates/l2/tests/state_reconstruct.rs b/crates/l2/tests/state_reconstruct.rs index cb566e55793..eed2e449f8d 100644 --- a/crates/l2/tests/state_reconstruct.rs +++ b/crates/l2/tests/state_reconstruct.rs @@ -47,7 +47,7 @@ async fn test_state_reconstruct() { .unwrap_or(pk) .parse::() .unwrap(); - get_address_from_secret_key(&secret_key).unwrap() + get_address_from_secret_key(&secret_key.secret_bytes()).unwrap() }) .collect::>(); diff --git a/crates/l2/tests/tests.rs b/crates/l2/tests/tests.rs index 05cf9e7a175..462d7f893bc 100644 --- a/crates/l2/tests/tests.rs +++ b/crates/l2/tests/tests.rs @@ -922,8 +922,8 @@ async fn test_forced_withdrawal( ) -> Result { let native_token_is_eth = native_token_l1_address == Address::zero(); println!("forced_withdrawal: Testing forced withdrawal"); - let rich_address = - get_address_from_secret_key(&rich_wallet_private_key).expect("Failed to get address"); + let rich_address = get_address_from_secret_key(&rich_wallet_private_key.secret_bytes()) + .expect("Failed to get address"); let l1_initial_native_balance = if native_token_is_eth { l1_client .get_balance(rich_address, BlockIdentifier::Tag(BlockTag::Latest)) @@ -1114,7 +1114,7 @@ async fn test_deposit( let native_token_is_eth = native_token_l1_address == Address::zero(); println!("test_deposit: Fetching initial balances on L1 and L2"); - let rich_wallet_address = get_address_from_secret_key(rich_wallet_private_key) + let rich_wallet_address = get_address_from_secret_key(&rich_wallet_private_key.secret_bytes()) .expect("Failed to get address from l1 rich wallet pk"); let deposit_value = std::env::var("INTEGRATION_TEST_DEPOSIT_VALUE") @@ -1342,8 +1342,10 @@ async fn test_transfer( returnerer_private_key: SecretKey, ) -> Result { println!("test_transfer: Transferring funds on L2"); - let transferer_address = get_address_from_secret_key(&transferer_private_key).unwrap(); - let returner_address = get_address_from_secret_key(&returnerer_private_key).unwrap(); + let transferer_address = + get_address_from_secret_key(&transferer_private_key.secret_bytes()).unwrap(); + let returner_address = + get_address_from_secret_key(&returnerer_private_key.secret_bytes()).unwrap(); println!( "test_transfer: Performing transfer from {transferer_address:#x} to {returner_address:#x}" @@ -1389,8 +1391,10 @@ async fn test_transfer_with_privileged_tx( receiver_private_key: SecretKey, ) -> Result { println!("transfer_with_ptx: Transferring funds on L2 through a deposit"); - let transferer_address = get_address_from_secret_key(&transferer_private_key).unwrap(); - let receiver_address = get_address_from_secret_key(&receiver_private_key).unwrap(); + let transferer_address = + get_address_from_secret_key(&transferer_private_key.secret_bytes()).unwrap(); + let receiver_address = + get_address_from_secret_key(&receiver_private_key.secret_bytes()).unwrap(); println!("transfer_with_ptx: Fetching receiver's initial balance on L2"); @@ -1446,7 +1450,8 @@ async fn test_gas_burning( rich_wallet_private_key: SecretKey, ) -> Result { println!("test_gas_burning: Transferring funds on L2 through a deposit"); - let rich_address = get_address_from_secret_key(&rich_wallet_private_key).unwrap(); + let rich_address = + get_address_from_secret_key(&rich_wallet_private_key.secret_bytes()).unwrap(); let l2_gas_limit = 2_000_000; let l1_extra_gas_limit = 400_000; @@ -1484,8 +1489,10 @@ async fn test_privileged_tx_not_enough_balance( println!( "ptx_not_enough_balance: Starting test for privileged transaction with insufficient balance" ); - let rich_address = get_address_from_secret_key(&rich_wallet_private_key).unwrap(); - let receiver_address = get_address_from_secret_key(&receiver_private_key).unwrap(); + let rich_address = + get_address_from_secret_key(&rich_wallet_private_key.secret_bytes()).unwrap(); + let receiver_address = + get_address_from_secret_key(&receiver_private_key.secret_bytes()).unwrap(); println!("ptx_not_enough_balance: Fetching initial balances on L1 and L2"); @@ -1546,7 +1553,8 @@ async fn perform_transfer( transfer_value: U256, test: &str, ) -> Result { - let transferer_address = get_address_from_secret_key(transferer_private_key).unwrap(); + let transferer_address = + get_address_from_secret_key(&transferer_private_key.secret_bytes()).unwrap(); let transferer_initial_l2_balance = l2_client .get_balance(transferer_address, BlockIdentifier::Tag(BlockTag::Latest)) @@ -1625,7 +1633,7 @@ async fn test_n_withdraws( ) -> Result<(), Box> { let native_token_is_eth = native_token_l1_address == Address::zero(); println!("test_n_withdraws: Withdrawing funds from L2 to L1"); - let withdrawer_address = get_address_from_secret_key(withdrawer_private_key)?; + let withdrawer_address = get_address_from_secret_key(&withdrawer_private_key.secret_bytes())?; let withdraw_value = std::env::var("INTEGRATION_TEST_WITHDRAW_VALUE") .map(|value| U256::from_dec_str(&value).expect("Invalid withdraw value")) .unwrap_or(U256::from(100000000000000000000u128)); @@ -2059,8 +2067,8 @@ async fn test_call_to_contract_with_deposit( caller_private_key: &SecretKey, test: &str, ) -> Result<()> { - let caller_address = - get_address_from_secret_key(caller_private_key).expect("Failed to get address"); + let caller_address = get_address_from_secret_key(&caller_private_key.secret_bytes()) + .expect("Failed to get address"); println!("{test}: Checking balances before call"); @@ -2388,7 +2396,7 @@ async fn get_rich_accounts_balance( for pk in private_keys.iter() { let secret_key = parse_private_key(pk)?; - let address = get_address_from_secret_key(&secret_key)?; + let address = get_address_from_secret_key(&secret_key.secret_bytes())?; let get_balance = l2_client .get_balance(address, BlockIdentifier::Tag(BlockTag::Latest)) .await?; diff --git a/crates/networking/rpc/utils.rs b/crates/networking/rpc/utils.rs index ec39d9efd90..7e95440061f 100644 --- a/crates/networking/rpc/utils.rs +++ b/crates/networking/rpc/utils.rs @@ -161,8 +161,8 @@ impl From for RpcErr { } } -impl From for RpcErr { - fn from(err: secp256k1::Error) -> Self { +impl From for RpcErr { + fn from(err: ethrex_common::Error) -> Self { Self::Internal(format!("Cryptography error: {err}")) } } diff --git a/crates/vm/Cargo.toml b/crates/vm/Cargo.toml index 9ae87fdb635..33817360a70 100644 --- a/crates/vm/Cargo.toml +++ b/crates/vm/Cargo.toml @@ -6,7 +6,7 @@ authors.workspace = true documentation.workspace = true [dependencies] -ethrex-common.workspace = true +ethrex-common = { workspace = true, default-features = false } ethrex-levm = { path = "./levm", default-features = false } ethrex-trie.workspace = true ethrex-rlp.workspace = true @@ -30,12 +30,14 @@ ethereum-types.workspace = true path = "./lib.rs" [features] -default = [] +default = ["secp256k1"] +secp256k1 = ["ethrex-levm/secp256k1", "ethrex-common/secp256k1"] c-kzg = ["ethrex-levm/c-kzg", "ethrex-common/c-kzg"] -sp1 = ["ethrex-levm/sp1"] -risc0 = ["ethrex-levm/risc0", "c-kzg"] +sp1 = ["ethrex-levm/sp1", "ethrex-common/sp1"] +risc0 = ["ethrex-levm/risc0", "ethrex-common/risc0", "c-kzg"] +zisk = ["ethrex-levm/zisk", "ethrex-common/zisk"] debug = ["ethrex-levm/debug"] diff --git a/crates/vm/levm/Cargo.toml b/crates/vm/levm/Cargo.toml index b2fdf9a43b1..3ed5dce04ba 100644 --- a/crates/vm/levm/Cargo.toml +++ b/crates/vm/levm/Cargo.toml @@ -7,7 +7,7 @@ documentation.workspace = true [dependencies] lazy_static.workspace = true -ethrex-common.workspace = true +ethrex-common = { workspace = true, default-features = false } ethrex-crypto.workspace = true ethrex-rlp.workspace = true derive_more = { version = "1.0.0", features = ["full"] } @@ -20,7 +20,6 @@ serde_json.workspace = true sha3 = "0.10.8" datatest-stable = "0.2.9" walkdir = "2.5.0" -secp256k1.workspace = true p256 = { version = "0.13.2", features = [ "ecdsa", "arithmetic", @@ -41,9 +40,11 @@ ark-bn254 = "0.5.0" ark-ec = "0.5.0" ark-ff = "0.5.0" strum = { version = "0.27.1", features = ["derive"] } -k256 = "0.13.4" substrate-bn = { version = "0.6.0", optional = true } +secp256k1 = { workspace = true, optional = true } +k256 = { workspace = true, optional = true } + bitvec = { version = "1.0.1", features = ["alloc"] } rustc-hash.workspace = true @@ -54,12 +55,14 @@ colored = "2.1.0" spinoff = "0.8.0" [features] -default = [] +default = ["secp256k1", "dep:k256"] +secp256k1 = ["dep:secp256k1"] c-kzg = ["ethrex-common/c-kzg", "ethrex-crypto/c-kzg"] ethereum_foundation_tests = [] debug = [] -sp1 = ["dep:substrate-bn"] -risc0 = ["dep:substrate-bn", "c-kzg"] +sp1 = ["dep:substrate-bn", "dep:k256"] +risc0 = ["dep:substrate-bn", "dep:k256", "c-kzg"] +zisk = ["dep:substrate-bn", "dep:k256"] [lints.rust] unsafe_code = "warn" diff --git a/crates/vm/levm/src/constants.rs b/crates/vm/levm/src/constants.rs index 6c0eafac08b..4a212f6b2b9 100644 --- a/crates/vm/levm/src/constants.rs +++ b/crates/vm/levm/src/constants.rs @@ -3,7 +3,6 @@ use p256::{ FieldElement as P256FieldElement, NistP256, elliptic_curve::{Curve, bigint::U256 as P256Uint, ff::PrimeField}, }; -use std::sync::LazyLock; pub const WORD_SIZE_IN_BYTES_USIZE: usize = 32; pub const WORD_SIZE_IN_BYTES_U64: u64 = 32; @@ -71,10 +70,12 @@ pub const VALID_BLOB_PREFIXES: [u8; 2] = [0x01, 0x02]; pub const LAST_AVAILABLE_BLOCK_LIMIT: U256 = U256([256, 0, 0, 0]); // EIP7702 - EOA Load Code -pub static SECP256K1_ORDER: LazyLock = - LazyLock::new(|| U256::from_big_endian(&secp256k1::constants::CURVE_ORDER)); -pub static SECP256K1_ORDER_OVER2: LazyLock = - LazyLock::new(|| *SECP256K1_ORDER / U256::from(2)); +#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] +pub static SECP256K1_ORDER: std::sync::LazyLock = + std::sync::LazyLock::new(|| U256::from_big_endian(&secp256k1::constants::CURVE_ORDER)); +#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] +pub static SECP256K1_ORDER_OVER2: std::sync::LazyLock = + std::sync::LazyLock::new(|| *SECP256K1_ORDER / U256::from(2)); pub const MAGIC: u8 = 0x05; pub const SET_CODE_DELEGATION_BYTES: [u8; 3] = [0xef, 0x01, 0x00]; // Set the code of authority to be 0xef0100 || address. This is a delegation designation. diff --git a/crates/vm/levm/src/precompiles.rs b/crates/vm/levm/src/precompiles.rs index 3bb885d6edf..da15fd4e01a 100644 --- a/crates/vm/levm/src/precompiles.rs +++ b/crates/vm/levm/src/precompiles.rs @@ -374,7 +374,7 @@ pub(crate) fn fill_with_zeros(calldata: &Bytes, target_len: usize) -> Bytes { padded_calldata.into() } -#[cfg(all(not(feature = "sp1"), not(feature = "risc0")))] +#[cfg(all(not(feature = "sp1"), not(feature = "risc0"), not(feature = "zisk")))] pub fn ecrecover(calldata: &Bytes, gas_remaining: &mut u64, _fork: Fork) -> Result { use sha3::Keccak256; @@ -442,7 +442,7 @@ pub fn ecrecover(calldata: &Bytes, gas_remaining: &mut u64, _fork: Fork) -> Resu /// [64..128): r||s (64 bytes) /// /// Returns the recovered address. -#[cfg(any(feature = "sp1", feature = "risc0"))] +#[cfg(any(feature = "sp1", feature = "risc0", feature = "zisk"))] pub fn ecrecover(calldata: &Bytes, gas_remaining: &mut u64, _fork: Fork) -> Result { use ethrex_common::utils::keccak; use k256::ecdsa::{RecoveryId, Signature, VerifyingKey}; diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index c6709341e2c..dfd4aa4ba9d 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -23,13 +23,6 @@ use ethrex_common::{ utils::{keccak, u256_to_big_endian}, }; use ethrex_common::{types::TxKind, utils::u256_from_big_endian_const}; -use ethrex_rlp; -use ethrex_rlp::encode::RLPEncode; -use secp256k1::{ - Message, - ecdsa::{RecoverableSignature, RecoveryId}, -}; -use sha3::{Digest, Keccak256}; use std::collections::{BTreeMap, HashMap}; pub type Storage = HashMap; @@ -349,9 +342,21 @@ pub fn get_authorized_address_from_code(code: &Bytes) -> Result Result, VMError> { + todo!() +} + +#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] pub fn eip7702_recover_address( auth_tuple: &AuthorizationTuple, ) -> Result, VMError> { + use ethrex_rlp::encode::RLPEncode; + use sha2::Digest; + use sha3::Keccak256; + if auth_tuple.s_signature > *SECP256K1_ORDER_OVER2 || U256::zero() >= auth_tuple.s_signature { return Ok(None); } @@ -369,7 +374,7 @@ pub fn eip7702_recover_address( hasher.update(rlp_buf); let bytes = &mut hasher.finalize(); - let Ok(message) = Message::from_digest_slice(bytes) else { + let Ok(message) = secp256k1::Message::from_digest_slice(bytes) else { return Ok(None); }; @@ -379,13 +384,14 @@ pub fn eip7702_recover_address( ] .concat(); - let Ok(recovery_id) = RecoveryId::try_from( + let Ok(recovery_id) = secp256k1::ecdsa::RecoveryId::try_from( TryInto::::try_into(auth_tuple.y_parity).map_err(|_| InternalError::TypeConversion)?, ) else { return Ok(None); }; - let Ok(signature) = RecoverableSignature::from_compact(&bytes, recovery_id) else { + let Ok(signature) = secp256k1::ecdsa::RecoverableSignature::from_compact(&bytes, recovery_id) + else { return Ok(None); }; From 32b6a0e47f2611ecfb78442cb70e5846309d6c08 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 15:46:28 -0300 Subject: [PATCH 02/92] Add ZisK guest --- .../src/guest_program/src/zisk/Cargo.lock | 3351 +++++++++++++++++ .../src/guest_program/src/zisk/Cargo.toml | 25 + .../src/guest_program/src/zisk/src/main.rs | 28 + 3 files changed, 3404 insertions(+) create mode 100644 crates/l2/prover/src/guest_program/src/zisk/Cargo.lock create mode 100644 crates/l2/prover/src/guest_program/src/zisk/Cargo.toml create mode 100644 crates/l2/prover/src/guest_program/src/zisk/src/main.rs diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock new file mode 100644 index 00000000000..afdc3bd7ef2 --- /dev/null +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock @@ -0,0 +1,3351 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "addchain" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570" +dependencies = [ + "num-bigint 0.3.3", + "num-integer", + "num-traits", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +dependencies = [ + "windows-sys 0.60.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.60.2", +] + +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "ark-bn254" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "educe", + "fnv", + "hashbrown 0.15.5", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "arrayvec", + "digest", + "educe", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-traits", + "paste", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.108", +] + +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash", + "ark-ff", + "ark-serialize", + "ark-std", + "educe", + "fnv", + "hashbrown 0.15.5", +] + +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "arrayvec", + "digest", + "num-bigint 0.4.6", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "ark-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "git+https://github.com/lambdaclass/bls12_381?branch=expose-fp-struct#219174187bd78154cec35b0809799fc2c991a579" +dependencies = [ + "digest", + "ff", + "group", + "pairing", + "rand_core", + "subtle", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + +[[package]] +name = "bytecheck" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0caa33a2c0edca0419d15ac723dff03f1956f7978329b1e3b5fdaaaed9d3ca8b" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "rancor", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "bytemuck" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +dependencies = [ + "serde", +] + +[[package]] +name = "camino" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" + +[[package]] +name = "cc" +version = "1.2.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chrono" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link", +] + +[[package]] +name = "clap" +version = "4.5.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "clap_lex" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_format" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.108", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "datatest-stable" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "833306ca7eec4d95844e65f0d7502db43888c5c1006c6c517e8cf51a27d15431" +dependencies = [ + "camino", + "fancy-regex", + "libtest-mimic", + "walkdir", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "syn 2.0.108", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pem-rfc7468", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "enum-ordinalize" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "escape8259" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5692dd7b5a1978a5aeb0ce83b7655c58ca8efdcb79d21036ea249da95afec2c6" + +[[package]] +name = "ethbloom" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c321610643004cf908ec0f5f2aa0d8f1f8e14b540562a2887a1111ff1ecbf7b" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-rlp", + "impl-serde", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ab15ed80916029f878e0267c3a9f92b67df55e79af370bf66199059ae2b4ee3" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-rlp", + "impl-serde", + "primitive-types", + "uint", +] + +[[package]] +name = "ethrex-blockchain" +version = "5.0.0" +dependencies = [ + "bytes", + "ethrex-common", + "ethrex-metrics", + "ethrex-rlp", + "ethrex-storage", + "ethrex-trie", + "ethrex-vm", + "hex", + "rustc-hash", + "sha3", + "thiserror", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "ethrex-common" +version = "5.0.0" +dependencies = [ + "bytes", + "crc32fast", + "ethereum-types", + "ethrex-crypto", + "ethrex-rlp", + "ethrex-trie", + "hex", + "k256", + "kzg-rs", + "lazy_static", + "libc", + "once_cell", + "rayon", + "rkyv", + "rustc-hash", + "serde", + "serde_json", + "sha2", + "sha3", + "thiserror", + "tinyvec", + "tracing", + "url", +] + +[[package]] +name = "ethrex-crypto" +version = "5.0.0" +dependencies = [ + "kzg-rs", + "thiserror", +] + +[[package]] +name = "ethrex-l2-common" +version = "5.0.0" +dependencies = [ + "bytes", + "ethereum-types", + "ethrex-common", + "ethrex-rlp", + "ethrex-storage", + "ethrex-trie", + "ethrex-vm", + "hex", + "k256", + "lambdaworks-crypto", + "rkyv", + "serde", + "serde_with", + "sha3", + "thiserror", +] + +[[package]] +name = "ethrex-levm" +version = "5.0.0" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "bitvec", + "bls12_381", + "bytes", + "datatest-stable", + "derive_more", + "ethrex-common", + "ethrex-crypto", + "ethrex-rlp", + "k256", + "lambdaworks-math", + "lazy_static", + "malachite", + "p256", + "ripemd", + "rustc-hash", + "serde", + "serde_json", + "sha2", + "sha3", + "strum", + "substrate-bn", + "thiserror", + "walkdir", +] + +[[package]] +name = "ethrex-metrics" +version = "5.0.0" +dependencies = [ + "ethrex-common", + "serde", + "serde_json", + "thiserror", + "tracing-subscriber", +] + +[[package]] +name = "ethrex-rlp" +version = "5.0.0" +dependencies = [ + "bytes", + "ethereum-types", + "hex", + "lazy_static", + "snap", + "thiserror", + "tinyvec", +] + +[[package]] +name = "ethrex-storage" +version = "5.0.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bytes", + "ethereum-types", + "ethrex-common", + "ethrex-rlp", + "ethrex-trie", + "hex", + "qfilter", + "rayon", + "rustc-hash", + "serde", + "serde_json", + "sha3", + "thiserror", + "tracing", +] + +[[package]] +name = "ethrex-threadpool" +version = "0.1.0" +dependencies = [ + "crossbeam", +] + +[[package]] +name = "ethrex-trie" +version = "5.0.0" +dependencies = [ + "anyhow", + "bytes", + "crossbeam", + "digest", + "ethereum-types", + "ethrex-rlp", + "ethrex-threadpool", + "hex", + "lazy_static", + "serde", + "serde_json", + "sha3", + "smallvec", + "thiserror", + "tracing", +] + +[[package]] +name = "ethrex-vm" +version = "5.0.0" +dependencies = [ + "bincode", + "bytes", + "derive_more", + "dyn-clone", + "ethereum-types", + "ethrex-common", + "ethrex-levm", + "ethrex-rlp", + "ethrex-trie", + "hex", + "lazy_static", + "rkyv", + "serde", + "sha3", + "thiserror", + "tracing", +] + +[[package]] +name = "fancy-regex" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298" +dependencies = [ + "bit-set", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "bitvec", + "byteorder", + "ff_derive", + "rand_core", + "subtle", +] + +[[package]] +name = "ff_derive" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f10d12652036b0e99197587c6ba87a8fc3031986499973c030d8b44fcc151b60" +dependencies = [ + "addchain", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "guest_program" +version = "5.0.0" +dependencies = [ + "bytes", + "ethrex-blockchain", + "ethrex-common", + "ethrex-crypto", + "ethrex-l2-common", + "ethrex-rlp", + "ethrex-storage", + "ethrex-trie", + "ethrex-vm", + "hex", + "rkyv", + "serde", + "serde_json", + "serde_with", + "thiserror", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" + +[[package]] +name = "icu_properties" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impl-codec" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d40b9d5e17727407e55028eafc22b2dc68781786e6d7eb8a21103f5058e3a14" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-rlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54ed8ad1f3877f7e775b8cbf30ed1bd3209a95401817f19a0eb4402d13f8cf90" +dependencies = [ + "rlp", +] + +[[package]] +name = "impl-serde" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a143eada6a1ec4aefa5049037a26a6d597bfd64f8c026d07b77133e02b7dd0b" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +dependencies = [ + "equivalent", + "hashbrown 0.16.0", + "serde", + "serde_core", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "js-sys" +version = "0.3.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "git+https://github.com/0xPolygonHermez/zisk-patch-elliptic-curves.git?tag=patch-k256-0.13.4-zisk-0.13.0#bdfa69f4094d4a7f25d30341127bec885beed57b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature", + "ziskos", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "kzg-rs" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9201effeea3fcc93b587904ae2df9ce97e433184b9d6d299e9ebc9830a546636" +dependencies = [ + "ff", + "hex", + "serde_arrays", + "sha2", + "sp1_bls12_381", + "spin", +] + +[[package]] +name = "lambdaworks-crypto" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ec4b462bbec171e1af821f3d9fff72e17de93b3d1022f29aa70fec8262c1cee" +dependencies = [ + "lambdaworks-math", + "serde", + "sha2", + "sha3", +] + +[[package]] +name = "lambdaworks-math" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "708d148956bcdc21ae5c432b4e20bbaa26fd68d5376a3a6c461f41095abea0ba" +dependencies = [ + "rayon", + "serde", + "serde_json", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "lib-c" +version = "0.13.0" +source = "git+https://github.com/0xPolygonHermez/zisk.git?tag=v0.13.0#ea1ed4c518992a170fc59ec19f1228eb4829a9e1" + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libtest-mimic" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5297962ef19edda4ce33aaa484386e0a5b3d7f2f4e037cbeee00503ef6b29d33" +dependencies = [ + "anstream", + "anstyle", + "clap", + "escape8259", +] + +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "malachite" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec410515e231332b14cd986a475d1c3323bcfa4c7efc038bfa1d5b410b1c57e4" +dependencies = [ + "malachite-base", + "malachite-nz", + "malachite-q", +] + +[[package]] +name = "malachite-base" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c738d3789301e957a8f7519318fcbb1b92bb95863b28f6938ae5a05be6259f34" +dependencies = [ + "hashbrown 0.15.5", + "itertools 0.14.0", + "libm", + "ryu", +] + +[[package]] +name = "malachite-nz" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1707c9a1fa36ce21749b35972bfad17bbf34cf5a7c96897c0491da321e387d3b" +dependencies = [ + "itertools 0.14.0", + "libm", + "malachite-base", + "wide", +] + +[[package]] +name = "malachite-q" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d764801aa4e96bbb69b389dcd03b50075345131cd63ca2e380bca71cc37a3675" +dependencies = [ + "itertools 0.14.0", + "malachite-base", + "malachite-nz", +] + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "munge" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c" +dependencies = [ + "munge_macro", +] + +[[package]] +name = "munge_macro" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "p3-baby-bear" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7521838ecab2ddf4f7bc4ceebad06ec02414729598485c1ada516c39900820e8" +dependencies = [ + "num-bigint 0.4.6", + "p3-field", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "rand", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46414daedd796f1eefcdc1811c0484e4bced5729486b6eaba9521c572c76761a" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-field" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48948a0516b349e9d1cdb95e7236a6ee010c44e68c5cc78b4b92bf1c4022a0d9" +dependencies = [ + "itertools 0.12.1", + "num-bigint 0.4.6", + "num-traits", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-matrix" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4de3f373589477cb735ea58e125898ed20935e03664b4614c7fac258b3c42f" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand", + "serde", + "tracing", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3968ad1160310296eb04f91a5f4edfa38fe1d6b2b8cd6b5c64e6f9b7370979e" + +[[package]] +name = "p3-mds" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2356b1ed0add6d5dfbf7a338ce534a6fde827374394a52cec16a0840af6e97c9" +dependencies = [ + "itertools 0.12.1", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rand", +] + +[[package]] +name = "p3-poseidon2" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da1eec7e1b6900581bedd95e76e1ef4975608dd55be9872c9d257a8a9651c3a" +dependencies = [ + "gcd", + "p3-field", + "p3-mds", + "p3-symmetric", + "rand", + "serde", +] + +[[package]] +name = "p3-symmetric" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb439bea1d822623b41ff4b51e3309e80d13cadf8b86d16ffd5e6efb9fdc360" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "serde", +] + +[[package]] +name = "p3-util" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c2c2010678b9332b563eaa38364915b585c1a94b5ca61e2c7541c087ddda5c" +dependencies = [ + "serde", +] + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group", +] + +[[package]] +name = "parity-scale-codec" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "primitive-types" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "ptr_meta" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "qfilter" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "746341cd2357c9a4df2d951522b4a8dd1ef553e543119899ad7bf87e938c8fbe" +dependencies = [ + "xxhash-rust", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rancor" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee" +dependencies = [ + "ptr_meta", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "regex-automata" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" + +[[package]] +name = "rend" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest", +] + +[[package]] +name = "rkyv" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35a640b26f007713818e9a9b65d34da1cf58538207b052916a83d80e43f3ffa4" +dependencies = [ + "bytecheck", + "bytes", + "hashbrown 0.15.5", + "indexmap 2.12.0", + "munge", + "ptr_meta", + "rancor", + "rend", + "rkyv_derive", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd83f5f173ff41e00337d97f6572e416d022ef8a19f371817259ae960324c482" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "rlp" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa24e92bb2a83198bb76d661a71df9f7076b8c420b8696e4d3d97d50d94479e3" +dependencies = [ + "bytes", + "rustc-hex", +] + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1317c3bf3e7df961da95b0a56a172a02abead31276215a0497241a7624b487ce" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_arrays" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94a16b99c5ea4fe3daccd14853ad260ec00ea043b2708d1fd1da3106dcd8d9df" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "serde_json" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", +] + +[[package]] +name = "serde_with" +version = "3.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.12.0", + "schemars 0.9.0", + "schemars 1.0.5", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "git+https://github.com/0xPolygonHermez/zisk-patch-hashes.git?branch=zisk-patch-sha2%2Fv0.10.9#6b70e479ca16f1fa8c2db77fdc872b5f2aad2d03" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", + "ziskos", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "git+https://github.com/0xPolygonHermez/zisk-patch-hashes.git?branch=zisk-patch-sha3%2Fv0.10.8#c404b04f733ab18bf0d0f5540249e6120519cc3e" +dependencies = [ + "digest", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "snap" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" + +[[package]] +name = "sp1-lib" +version = "5.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fce8ad0f153443d09d398eccb650a0b2dcbf829470e394e4bf60ec4379c7af93" +dependencies = [ + "bincode", + "serde", + "sp1-primitives", +] + +[[package]] +name = "sp1-primitives" +version = "5.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0244dee3a7a0f88cf71c3edf518f4fc97794ae870a107cbe7c810ac3fbf879cb" +dependencies = [ + "bincode", + "blake3", + "cfg-if", + "hex", + "lazy_static", + "num-bigint 0.4.6", + "p3-baby-bear", + "p3-field", + "p3-poseidon2", + "p3-symmetric", + "serde", + "sha2", +] + +[[package]] +name = "sp1_bls12_381" +version = "0.8.0-sp1-5.0.0" +source = "git+https://github.com/han0110/bls12_381.git?branch=zisk-patch%2Fv0.8.0-upgrade-sp1-lib#22ea7cde224b60114a0408c3b7bab2902f53922e" +dependencies = [ + "cfg-if", + "ff", + "group", + "pairing", + "rand_core", + "sp1-lib", + "subtle", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "substrate-bn" +version = "0.6.0" +source = "git+https://github.com/0xPolygonHermez/zisk-patch-bn.git?tag=patch-0.6.0-zisk-0.13.0#3c8e959c901285124e5bd9a92cb4a5a64333a9c1" +dependencies = [ + "byteorder", + "crunchy", + "lazy_static", + "rand", + "rustc-hex", + "ziskos", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "time-macros" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "pin-project-lite", +] + +[[package]] +name = "tokio-util" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "futures-util", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap 2.12.0", + "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "uint" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unicode-ident" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "url" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.108", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wide" +version = "0.7.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +dependencies = [ + "memchr", +] + +[[package]] +name = "writeable" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "xxhash-rust" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" + +[[package]] +name = "yoke" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "ziskos" +version = "0.13.0" +source = "git+https://github.com/0xPolygonHermez/zisk.git?tag=v0.13.0#ea1ed4c518992a170fc59ec19f1228eb4829a9e1" +dependencies = [ + "cfg-if", + "getrandom", + "lazy_static", + "lib-c", + "num-bigint 0.4.6", + "num-traits", + "rand", + "static_assertions", + "tiny-keccak", +] + +[[package]] +name = "zkvm-zisk-program" +version = "0.1.0" +dependencies = [ + "guest_program", + "rkyv", + "sha2", + "ziskos", +] diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml new file mode 100644 index 00000000000..6957303f6b3 --- /dev/null +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml @@ -0,0 +1,25 @@ +[package] +version = "0.1.0" +name = "zkvm-zisk-program" +edition = "2024" + +[workspace] + +[dependencies] +ziskos = { git = "https://github.com/0xPolygonHermez/zisk.git", tag = "v0.13.0" } +guest_program = { path = "../../", default-features = false, features = [ + "zisk", +] } + +sha2 = "0.10.9" +rkyv = "0.8.10" + +[patch.crates-io] +sha2 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", branch = "zisk-patch-sha2/v0.10.9" } +sha3 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", branch = "zisk-patch-sha3/v0.10.8" } +k256 = { git = "https://github.com/0xPolygonHermez/zisk-patch-elliptic-curves.git", tag = "patch-k256-0.13.4-zisk-0.13.0" } +substrate-bn = { git = "https://github.com/0xPolygonHermez/zisk-patch-bn.git", tag = "patch-0.6.0-zisk-0.13.0" } +sp1_bls12_381 = { git = "https://github.com/han0110/bls12_381.git", branch = "zisk-patch/v0.8.0-upgrade-sp1-lib" } + +[features] +l2 = ["guest_program/l2"] diff --git a/crates/l2/prover/src/guest_program/src/zisk/src/main.rs b/crates/l2/prover/src/guest_program/src/zisk/src/main.rs new file mode 100644 index 00000000000..b16fc1d2a41 --- /dev/null +++ b/crates/l2/prover/src/guest_program/src/zisk/src/main.rs @@ -0,0 +1,28 @@ +#![no_main] + +use guest_program::{execution::execution_program, input::ProgramInput}; +use rkyv::rancor::Error; +use sha2::{Digest, Sha256}; + +ziskos::entrypoint!(main); + +pub fn main() { + println!("start reading input"); + let input = ziskos::read_input(); + let input = rkyv::from_bytes::(&input).unwrap(); + println!("finish reading input"); + + println!("start execution"); + let output = execution_program(input).unwrap(); + println!("finish execution"); + + println!("start hashing output"); + let output = Sha256::digest(output.encode()); + println!("finish hashing output"); + + println!("start revealing output"); + output.chunks_exact(4).enumerate().for_each(|(idx, bytes)| { + ziskos::set_output(idx, u32::from_le_bytes(bytes.try_into().unwrap())) + }); + println!("finish revealing output"); +} From 9eacacfc8e83457de38e4efe7249735e50ffc81f Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 15:46:36 -0300 Subject: [PATCH 03/92] Fix clippy warnings --- .../prover/src/guest_program/src/execution.rs | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/crates/l2/prover/src/guest_program/src/execution.rs b/crates/l2/prover/src/guest_program/src/execution.rs index 9622beff371..688eab5cb00 100644 --- a/crates/l2/prover/src/guest_program/src/execution.rs +++ b/crates/l2/prover/src/guest_program/src/execution.rs @@ -18,20 +18,21 @@ use ethrex_common::{ }; #[cfg(feature = "l2")] use ethrex_l2_common::l1_messages::L1Message; +use ethrex_l2_common::privileged_transactions::get_block_privileged_transactions; use ethrex_vm::{Evm, EvmError, GuestProgramStateWrapper, VmDatabase}; -use std::collections::{BTreeMap, HashMap}; +#[cfg(feature = "l2")] +use std::collections::BTreeMap; +use std::collections::HashMap; #[cfg(feature = "l2")] use ethrex_common::types::{ BlobsBundleError, Commitment, PrivilegedL2Transaction, Proof, Receipt, blob_from_bytes, kzg_commitment_to_versioned_hash, }; +#[cfg(feature = "l2")] use ethrex_l2_common::{ l1_messages::get_block_l1_messages, - privileged_transactions::{ - PrivilegedTransactionError, compute_privileged_transactions_hash, - get_block_privileged_transactions, - }, + privileged_transactions::{PrivilegedTransactionError, compute_privileged_transactions_hash}, state_diff::{StateDiff, StateDiffError, prepare_state_diff}, }; @@ -199,6 +200,8 @@ pub fn stateless_validation_l2( // Check state diffs are valid let blob_versioned_hash = if !validium { + use std::collections::BTreeMap; + use bytes::Bytes; use ethrex_common::types::Code; @@ -249,6 +252,8 @@ pub fn stateless_validation_l2( }) } +// receipts, account_updates, and last_block_header are only used in L2 +#[cfg_attr(not(feature = "l2"), expect(dead_code))] struct StatelessResult { receipts: Vec>, initial_state_hash: H256, @@ -273,7 +278,7 @@ fn execute_stateless( blocks: &[Block], execution_witness: ExecutionWitness, elasticity_multiplier: u64, - fee_configs: Option>, + _fee_configs: Option>, ) -> Result { let guest_program_state: GuestProgramState = execution_witness .try_into() @@ -293,7 +298,7 @@ fn execute_stateless( #[cfg(feature = "l2")] let parent_block_header_clone = guest_program_state.parent_block_header.clone(); #[cfg(feature = "l2")] - let fee_configs = fee_configs.ok_or_else(|| StatelessExecutionError::FeeConfigNotFound)?; + let fee_configs = _fee_configs.ok_or_else(|| StatelessExecutionError::FeeConfigNotFound)?; let mut wrapped_db = GuestProgramStateWrapper::new(guest_program_state); let chain_config = wrapped_db.get_chain_config().map_err(|_| { @@ -334,7 +339,7 @@ fn execute_stateless( let mut acc_receipts = Vec::new(); let mut non_privileged_count = 0; - for (i, block) in blocks.iter().enumerate() { + for (_i, block) in blocks.iter().enumerate() { // Validate the block validate_block( block, @@ -349,7 +354,7 @@ fn execute_stateless( let mut vm = Evm::new_for_l2( wrapped_db.clone(), fee_configs - .get(i) + .get(_i) .cloned() .ok_or_else(|| StatelessExecutionError::FeeConfigNotFound)?, )?; From 80bf07406d211e1fd53507f8237e13df95227ee8 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 15:47:01 -0300 Subject: [PATCH 04/92] Add ZisK backend --- Cargo.lock | 3 +- Cargo.toml | 5 +- crates/l2/prover/Cargo.toml | 3 +- crates/l2/prover/src/backend/mod.rs | 3 + crates/l2/prover/src/backend/zisk.rs | 61 +++++++++++++++++++ crates/l2/prover/src/guest_program/Cargo.toml | 15 ++++- crates/l2/prover/src/guest_program/build.rs | 61 +++++++++++++++++++ crates/l2/prover/src/guest_program/src/lib.rs | 8 +++ 8 files changed, 154 insertions(+), 5 deletions(-) create mode 100644 crates/l2/prover/src/backend/zisk.rs diff --git a/Cargo.lock b/Cargo.lock index 06f830f89e9..8317f253a9f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3352,7 +3352,6 @@ dependencies = [ "ethrex-vm", "hex", "rustc-hash 2.1.1", - "secp256k1", "serde_json", "sha3", "thiserror 2.0.17", @@ -3373,6 +3372,7 @@ dependencies = [ "ethrex-trie", "hex", "hex-literal", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "kzg-rs", "lazy_static", "libc", @@ -3500,6 +3500,7 @@ dependencies = [ "ethrex-trie", "ethrex-vm", "hex", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "lambdaworks-crypto 0.11.0", "rkyv", "secp256k1", diff --git a/Cargo.toml b/Cargo.toml index 0a00799c305..f876bd80247 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -49,8 +49,8 @@ inherits = "release" debug = 2 [workspace.dependencies] -ethrex-blockchain = { path = "./crates/blockchain" } -ethrex-common = { path = "./crates/common" } +ethrex-blockchain = { path = "./crates/blockchain", default-features = false } +ethrex-common = { path = "./crates/common", default-features = false } ethrex-config = { path = "./crates/common/config" } ethrex-p2p = { path = "./crates/networking/p2p" } ethrex-rpc = { path = "./crates/networking/rpc" } @@ -118,6 +118,7 @@ tempfile = "3.8" uuid = { version = "1.18.1", features = ["v4"] } tower-http = { version = "0.6.2", features = ["cors"] } indexmap = { version = "2.11.4" } +k256 = "0.13.4" rocksdb = "0.24.0" diff --git a/crates/l2/prover/Cargo.toml b/crates/l2/prover/Cargo.toml index 8772d296d19..7576412968e 100644 --- a/crates/l2/prover/Cargo.toml +++ b/crates/l2/prover/Cargo.toml @@ -35,7 +35,7 @@ ethrex-l2 = { path = "../", default-features = false } ethrex-l2-common = { workspace = true } ethrex-sdk.workspace = true -guest_program = { path = "./src/guest_program", default-features = false } +guest_program = { path = "./src/guest_program" } risc0-zkvm = { version = "=3.0.3", optional = true, features = ["getrandom"] } risc0-zkp = { version = "=3.0.2", optional = true } @@ -57,6 +57,7 @@ default = ["l2"] # prover backends risc0 = ["guest_program/risc0", "dep:risc0-zkvm", "dep:risc0-zkp"] sp1 = ["guest_program/sp1", "dep:sp1-sdk", "dep:sp1-prover"] +zisk = ["guest_program/zisk-guest"] profiling = ["sp1-sdk?/profiling"] gpu = ["risc0-zkvm?/cuda", "sp1-sdk?/cuda"] diff --git a/crates/l2/prover/src/backend/mod.rs b/crates/l2/prover/src/backend/mod.rs index dd464edbbc2..e2c69fd87d8 100644 --- a/crates/l2/prover/src/backend/mod.rs +++ b/crates/l2/prover/src/backend/mod.rs @@ -12,6 +12,9 @@ pub mod risc0; #[cfg(feature = "sp1")] pub mod sp1; +#[cfg(feature = "zisk")] +pub mod zisk; + #[derive(Default, Debug, Deserialize, Serialize, Copy, Clone, ValueEnum)] pub enum Backend { #[default] diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs new file mode 100644 index 00000000000..7c6d9842ccc --- /dev/null +++ b/crates/l2/prover/src/backend/zisk.rs @@ -0,0 +1,61 @@ +use std::process::Command; + +use ethrex_l2_common::prover::{BatchProof, ProofFormat}; +use guest_program::input::ProgramInput; + +use crate::backend::ProveOutput; + +pub fn execute(input: ProgramInput) -> Result<(), Box> { + let input_bytes = rkyv::to_bytes::(&input)?; + + let input_path = "zisk_input.bin"; + + std::fs::write(input_path, input_bytes.as_slice())?; + + let mut cmd = Command::new("ziskemu"); + + let start = std::time::Instant::now(); + let output = cmd + .arg("--elf") + .arg("../guest_program/src/zisk/target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program") + .arg("--inputs") + .arg(input_path) + .arg("--output") + .arg("zisk_output.bin") + .arg("--stats") // Enable stats in order to get total steps. + .output()?; + let duration = start.elapsed(); + + if !output.status.success() { + return Err(format!( + "ZisK execution failed: {}", + String::from_utf8_lossy(&output.stderr) + ) + .into()); + } + + println!( + "ZisK guest program executed in {:.2?} seconds", + duration.as_secs_f64() + ); + + Ok(()) +} + +pub fn prove( + _input: ProgramInput, + _format: ProofFormat, +) -> Result> { + Err("prove is not implemented for ZisK backend".into()) +} + +pub fn verify(_output: &ProveOutput) -> Result<(), Box> { + Err("verify is not implemented for ZisK backend".into()) +} + +pub fn to_batch_proof( + _proof: ProveOutput, + _format: ProofFormat, +) -> Result> { + Err("to_batch_proof is not implemented for ZisK backend".into()) +} diff --git a/crates/l2/prover/src/guest_program/Cargo.toml b/crates/l2/prover/src/guest_program/Cargo.toml index 763fd6d1303..78b30b95f5c 100644 --- a/crates/l2/prover/src/guest_program/Cargo.toml +++ b/crates/l2/prover/src/guest_program/Cargo.toml @@ -33,11 +33,24 @@ sp1-sdk = { version = "=5.0.8", optional = true } methods = ["src/risc0"] [features] -default = [] +default = ["secp256k1"] risc0 = ["dep:risc0-build", "dep:risc0-zkvm"] sp1 = ["dep:sp1-build", "dep:sp1-sdk"] +zisk-guest = [] +zisk = [ + "ethrex-common/zisk", + "ethrex-blockchain/zisk", + "ethrex-vm/zisk", + "ethrex-l2-common/zisk", +] l2 = [] c-kzg = ["ethrex-vm/c-kzg", "ethrex-common/c-kzg"] +secp256k1 = [ + "ethrex-common/secp256k1", + "ethrex-blockchain/secp256k1", + "ethrex-vm/secp256k1", + "ethrex-l2-common/secp256k1", +] [lib] path = "./src/lib.rs" diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index 785513119ac..042f0593281 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -6,6 +6,9 @@ fn main() { #[cfg(all(not(clippy), feature = "sp1"))] build_sp1_program(); + + #[cfg(all(not(clippy), feature = "zisk-guest"))] + build_zisk_program(); } #[cfg(all(not(clippy), feature = "risc0"))] @@ -87,3 +90,61 @@ fn build_sp1_program() { ) .expect("could not write SP1 vk-u32 to file"); } + +#[cfg(all(not(clippy), feature = "zisk-guest"))] +fn build_zisk_program() { + let mut command = std::process::Command::new("cargo"); + + command + .env("RUSTC", rustc_path("zisk")) + .args([ + "+zisk", + "build", + "--release", + "--target", + "riscv64ima-zisk-zkvm-elf", + ]) + .stdout(std::process::Stdio::inherit()) + .stderr(std::process::Stdio::inherit()) + .current_dir("./src/zisk"); + + println!("{command:?}"); + + let start = std::time::Instant::now(); + + let status = command + .status() + .expect("Failed to execute zisk build command"); + + let duration = start.elapsed(); + + println!( + "ZisK guest program built in {:.2?} seconds", + duration.as_secs_f64() + ); + + if !status.success() { + panic!("Failed to build guest program with zisk toolchain"); + } +} + +#[cfg(all(not(clippy), feature = "zisk-guest"))] +/// Returns the path to `rustc` executable of the given toolchain. +/// +/// Taken from https://github.com/eth-act/ere/blob/master/crates/compile-utils/src/rust.rs#L166 +pub fn rustc_path(toolchain: &str) -> std::path::PathBuf { + let mut cmd = std::process::Command::new("rustc"); + let output = cmd + .env("RUSTUP_TOOLCHAIN", toolchain) + .args(["--print", "sysroot"]) + .output() + .expect("Failed to execute rustc command"); + + if !output.status.success() { + panic!("Failed to get sysroot for toolchain {}", toolchain); + } + + std::path::PathBuf::from(String::from_utf8_lossy(&output.stdout).trim()) + .join("bin") + .join("rustc") +} diff --git a/crates/l2/prover/src/guest_program/src/lib.rs b/crates/l2/prover/src/guest_program/src/lib.rs index b4015f95abe..30ffaf4ddb8 100644 --- a/crates/l2/prover/src/guest_program/src/lib.rs +++ b/crates/l2/prover/src/guest_program/src/lib.rs @@ -16,3 +16,11 @@ pub static ZKVM_RISC0_PROGRAM_VK: &str = include_str!(concat!("./risc0/out/riscv // To avoid compilation errors, we override it with an empty slice. #[cfg(any(clippy, not(feature = "risc0")))] pub const ZKVM_RISC0_PROGRAM_VK: &str = ""; + +#[cfg(all(not(clippy), feature = "zisk"))] +pub static ZKVM_ZISK_PROGRAM_ELF: &[u8] = + include_bytes!("./zisk/target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program"); +// If we're running clippy, the file isn't generated. +// To avoid compilation errors, we override it with an empty slice. +#[cfg(any(clippy, not(feature = "zisk")))] +pub const ZKVM_ZISK_PROGRAM_ELF: &[u8] = &[]; From 38e7840244c37a5c99c4a88204491583b560b7d1 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 15:51:56 -0300 Subject: [PATCH 05/92] Update backend lib --- crates/l2/prover/src/backend/mod.rs | 6 ++++++ crates/l2/prover/src/lib.rs | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/crates/l2/prover/src/backend/mod.rs b/crates/l2/prover/src/backend/mod.rs index e2c69fd87d8..756be0a89ee 100644 --- a/crates/l2/prover/src/backend/mod.rs +++ b/crates/l2/prover/src/backend/mod.rs @@ -23,6 +23,8 @@ pub enum Backend { SP1, #[cfg(feature = "risc0")] RISC0, + #[cfg(feature = "zisk")] + ZisK, } // Needed for Clap @@ -36,6 +38,8 @@ impl FromStr for Backend { "sp1" => Ok(Backend::SP1), #[cfg(feature = "risc0")] "risc0" => Ok(Backend::RISC0), + #[cfg(feature = "zisk")] + "zisk" => Ok(Backend::ZisK), _ => Err(Self::Err::from("Invalid backend")), } } @@ -47,4 +51,6 @@ pub enum ProveOutput { SP1(sp1::ProveOutput), #[cfg(feature = "risc0")] RISC0(risc0_zkvm::Receipt), + #[cfg(feature = "zisk")] + ZisK(ProgramOutput), } diff --git a/crates/l2/prover/src/lib.rs b/crates/l2/prover/src/lib.rs index fdff0da194d..bce84e481e7 100644 --- a/crates/l2/prover/src/lib.rs +++ b/crates/l2/prover/src/lib.rs @@ -22,6 +22,8 @@ pub fn execute(backend: Backend, input: ProgramInput) -> Result<(), Box backend::sp1::execute(input), #[cfg(feature = "risc0")] Backend::RISC0 => backend::risc0::execute(input), + #[cfg(feature = "zisk")] + Backend::ZisK => backend::zisk::execute(input), } } @@ -37,6 +39,8 @@ pub fn prove( Backend::SP1 => backend::sp1::prove(input, format).map(ProveOutput::SP1), #[cfg(feature = "risc0")] Backend::RISC0 => backend::risc0::prove(input, format).map(ProveOutput::RISC0), + #[cfg(feature = "zisk")] + Backend::ZisK => backend::zisk::prove(input, format).map(ProveOutput::ZisK), } } @@ -50,5 +54,7 @@ pub fn to_batch_proof( ProveOutput::SP1(proof) => backend::sp1::to_batch_proof(proof, format), #[cfg(feature = "risc0")] ProveOutput::RISC0(receipt) => backend::risc0::to_batch_proof(receipt, format), + #[cfg(feature = "zisk")] + ProveOutput::ZisK(proof) => backend::zisk::to_batch_proof(proof, format), } } From 229e03d789d8d746ae18c0a6b0d63ccad13bac7f Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 15:54:52 -0300 Subject: [PATCH 06/92] Fix --- crates/l2/prover/src/backend/zisk.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 7c6d9842ccc..2a331beb434 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -1,9 +1,7 @@ use std::process::Command; use ethrex_l2_common::prover::{BatchProof, ProofFormat}; -use guest_program::input::ProgramInput; - -use crate::backend::ProveOutput; +use guest_program::{input::ProgramInput, output::ProgramOutput}; pub fn execute(input: ProgramInput) -> Result<(), Box> { let input_bytes = rkyv::to_bytes::(&input)?; @@ -45,16 +43,16 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { pub fn prove( _input: ProgramInput, _format: ProofFormat, -) -> Result> { +) -> Result> { Err("prove is not implemented for ZisK backend".into()) } -pub fn verify(_output: &ProveOutput) -> Result<(), Box> { +pub fn verify(_output: &ProgramOutput) -> Result<(), Box> { Err("verify is not implemented for ZisK backend".into()) } pub fn to_batch_proof( - _proof: ProveOutput, + _proof: ProgramOutput, _format: ProofFormat, ) -> Result> { Err("to_batch_proof is not implemented for ZisK backend".into()) From 87029e9dc961dd4faea876782c0774a3c3ed04fe Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 16:00:53 -0300 Subject: [PATCH 07/92] Fix --- crates/l2/prover/src/guest_program/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/prover/src/guest_program/src/lib.rs b/crates/l2/prover/src/guest_program/src/lib.rs index 30ffaf4ddb8..f27f143b545 100644 --- a/crates/l2/prover/src/guest_program/src/lib.rs +++ b/crates/l2/prover/src/guest_program/src/lib.rs @@ -17,10 +17,10 @@ pub static ZKVM_RISC0_PROGRAM_VK: &str = include_str!(concat!("./risc0/out/riscv #[cfg(any(clippy, not(feature = "risc0")))] pub const ZKVM_RISC0_PROGRAM_VK: &str = ""; -#[cfg(all(not(clippy), feature = "zisk"))] +#[cfg(all(not(clippy), feature = "zisk-guest"))] pub static ZKVM_ZISK_PROGRAM_ELF: &[u8] = include_bytes!("./zisk/target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program"); // If we're running clippy, the file isn't generated. // To avoid compilation errors, we override it with an empty slice. -#[cfg(any(clippy, not(feature = "zisk")))] +#[cfg(any(clippy, not(feature = "zisk-guest")))] pub const ZKVM_ZISK_PROGRAM_ELF: &[u8] = &[]; From 32fdb2e9580fa14d0251ff0420bb7eed1a918cf8 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 16:07:05 -0300 Subject: [PATCH 08/92] Fix --- crates/l2/prover/src/backend/zisk.rs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 2a331beb434..698aa6e5733 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -3,23 +3,30 @@ use std::process::Command; use ethrex_l2_common::prover::{BatchProof, ProofFormat}; use guest_program::{input::ProgramInput, output::ProgramOutput}; +const INPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_input.bin"); + +const OUTPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output.bin"); + +const ELF_PATH: &str = concat!( + env!("CARGO_MANIFEST_DIR"), + "/src/guest_program/src/zisk/target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program" +); + pub fn execute(input: ProgramInput) -> Result<(), Box> { let input_bytes = rkyv::to_bytes::(&input)?; - let input_path = "zisk_input.bin"; - - std::fs::write(input_path, input_bytes.as_slice())?; + std::fs::write(INPUT_PATH, input_bytes.as_slice())?; let mut cmd = Command::new("ziskemu"); let start = std::time::Instant::now(); let output = cmd .arg("--elf") - .arg("../guest_program/src/zisk/target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program") + .arg(ELF_PATH) .arg("--inputs") - .arg(input_path) + .arg(INPUT_PATH) .arg("--output") - .arg("zisk_output.bin") + .arg(OUTPUT_PATH) .arg("--stats") // Enable stats in order to get total steps. .output()?; let duration = start.elapsed(); From 3b8fb7474ed46f618d45b60e999d48b664b09b3a Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 16:10:35 -0300 Subject: [PATCH 09/92] Add stdin & stderr --- crates/l2/prover/src/backend/zisk.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 698aa6e5733..6f5d7f0966d 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -1,4 +1,4 @@ -use std::process::Command; +use std::process::{Command, Stdio}; use ethrex_l2_common::prover::{BatchProof, ProofFormat}; use guest_program::{input::ProgramInput, output::ProgramOutput}; @@ -27,7 +27,9 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { .arg(INPUT_PATH) .arg("--output") .arg(OUTPUT_PATH) - .arg("--stats") // Enable stats in order to get total steps. + .arg("--stats") + .stdin(Stdio::inherit()) + .stderr(Stdio::piped()) .output()?; let duration = start.elapsed(); From 99ab059404c75bb9f1a46fb1785f512926b9cae2 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 16:15:05 -0300 Subject: [PATCH 10/92] Enable rkyv unaligned feature --- crates/l2/prover/src/guest_program/src/zisk/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml index 6957303f6b3..876469b4327 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml @@ -12,7 +12,7 @@ guest_program = { path = "../../", default-features = false, features = [ ] } sha2 = "0.10.9" -rkyv = "0.8.10" +rkyv = { version = "0.8.10", features = ["std", "unaligned"] } [patch.crates-io] sha2 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", branch = "zisk-patch-sha2/v0.10.9" } From 209b7e9dcfbe2c98fd4d852d5ca0e0b6c793a010 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 16:16:03 -0300 Subject: [PATCH 11/92] Fix --- crates/l2/prover/src/backend/zisk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 6f5d7f0966d..11fc839a0e5 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -29,7 +29,7 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { .arg(OUTPUT_PATH) .arg("--stats") .stdin(Stdio::inherit()) - .stderr(Stdio::piped()) + .stderr(Stdio::inherit()) .output()?; let duration = start.elapsed(); From b5232efea2c13dca016832368348b3b926111ab7 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 16:25:15 -0300 Subject: [PATCH 12/92] Debug --- crates/l2/prover/src/backend/zisk.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 11fc839a0e5..1541e3f0b91 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -15,6 +15,8 @@ const ELF_PATH: &str = concat!( pub fn execute(input: ProgramInput) -> Result<(), Box> { let input_bytes = rkyv::to_bytes::(&input)?; + dbg!(&input_bytes); + std::fs::write(INPUT_PATH, input_bytes.as_slice())?; let mut cmd = Command::new("ziskemu"); From 4d751404c43ec9fa0888f7f9be82f5387978a7a9 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 16:27:13 -0300 Subject: [PATCH 13/92] Fix debug --- crates/l2/prover/src/backend/zisk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 1541e3f0b91..92f03dc4fe9 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -15,7 +15,7 @@ const ELF_PATH: &str = concat!( pub fn execute(input: ProgramInput) -> Result<(), Box> { let input_bytes = rkyv::to_bytes::(&input)?; - dbg!(&input_bytes); + dbg!(INPUT_PATH); std::fs::write(INPUT_PATH, input_bytes.as_slice())?; From 8306a3b41162bc3e2f4556a8c6bac6af500ff5ca Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 17:08:31 -0300 Subject: [PATCH 14/92] Implement recover_address with k256 --- crates/common/types/transaction.rs | 54 +++++++++++++++++++----------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/crates/common/types/transaction.rs b/crates/common/types/transaction.rs index 4b6be4d2456..4ce536ed372 100644 --- a/crates/common/types/transaction.rs +++ b/crates/common/types/transaction.rs @@ -966,7 +966,6 @@ impl Transaction { sig[32..64].copy_from_slice(&tx.s.to_big_endian()); sig[64] = signature_y_parity as u8; recover_address_from_message(Signature::from_slice(&sig), &Bytes::from(buf)) - .map_err(Error::from) } Transaction::EIP2930Transaction(tx) => { let mut buf = vec![self.tx_type() as u8]; @@ -985,7 +984,6 @@ impl Transaction { sig[32..64].copy_from_slice(&tx.signature_s.to_big_endian()); sig[64] = tx.signature_y_parity as u8; recover_address_from_message(Signature::from_slice(&sig), &Bytes::from(buf)) - .map_err(Error::from) } Transaction::EIP1559Transaction(tx) => { let mut buf = vec![self.tx_type() as u8]; @@ -1005,7 +1003,6 @@ impl Transaction { sig[32..64].copy_from_slice(&tx.signature_s.to_big_endian()); sig[64] = tx.signature_y_parity as u8; recover_address_from_message(Signature::from_slice(&sig), &Bytes::from(buf)) - .map_err(Error::from) } Transaction::EIP4844Transaction(tx) => { let mut buf = vec![self.tx_type() as u8]; @@ -1027,7 +1024,6 @@ impl Transaction { sig[32..64].copy_from_slice(&tx.signature_s.to_big_endian()); sig[64] = tx.signature_y_parity as u8; recover_address_from_message(Signature::from_slice(&sig), &Bytes::from(buf)) - .map_err(Error::from) } Transaction::EIP7702Transaction(tx) => { let mut buf = vec![self.tx_type() as u8]; @@ -1048,7 +1044,6 @@ impl Transaction { sig[32..64].copy_from_slice(&tx.signature_s.to_big_endian()); sig[64] = tx.signature_y_parity as u8; recover_address_from_message(Signature::from_slice(&sig), &Bytes::from(buf)) - .map_err(Error::from) } Transaction::PrivilegedL2Transaction(tx) => Ok(tx.from), } @@ -1264,15 +1259,14 @@ impl Transaction { } } -#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] pub fn recover_address_from_message( signature: Signature, message: &Bytes, -) -> Result { +) -> Result { use sha2::Digest; // Hash message let payload: [u8; 32] = sha3::Keccak256::digest(message).into(); - recover_address(signature, H256::from_slice(&payload)) + recover_address(signature, H256::from_slice(&payload)).map_err(Error::from) } #[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] @@ -1295,19 +1289,39 @@ pub fn recover_address(signature: Signature, payload: H256) -> Result Result { - todo!() -} +pub fn recover_address(signature: Signature, payload: H256) -> Result { + use sha2::Digest; + use sha3::Keccak256; -#[cfg(any(feature = "zisk", feature = "risc0", feature = "sp1"))] -pub fn recover_address( - _signature: Signature, - _payload: H256, -) -> Result { - todo!() + // Create signature + let signature_bytes = signature.to_fixed_bytes(); + + let mut signature = k256::ecdsa::Signature::from_slice(&signature_bytes[..64])?; + + let mut recovery_id_byte = signature_bytes[64]; + + if let Some(low_s) = signature.normalize_s() { + signature = low_s; + recovery_id_byte ^= 1; + } + + let recovery_id = k256::ecdsa::RecoveryId::from_byte(recovery_id_byte).ok_or( + k256::ecdsa::Error::from_source("Failed to parse recovery id"), + )?; + + // Recover public key + let public = + k256::ecdsa::VerifyingKey::recover_from_msg(payload.as_bytes(), &signature, recovery_id)?; + + let uncompressed = public.to_encoded_point(false); + + let mut uncompressed = uncompressed.to_bytes(); + + let xy = &mut uncompressed[1..65]; + + let hash = Keccak256::digest(xy); + + Ok(Address::from_slice(&hash[12..])) } fn derive_legacy_chain_id(v: U256) -> Option { From 603e0c7c4341e1042faba10a6b6a4ecacd699b42 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 17:08:38 -0300 Subject: [PATCH 15/92] Remove dbg --- crates/l2/prover/src/backend/zisk.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 92f03dc4fe9..11fc839a0e5 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -15,8 +15,6 @@ const ELF_PATH: &str = concat!( pub fn execute(input: ProgramInput) -> Result<(), Box> { let input_bytes = rkyv::to_bytes::(&input)?; - dbg!(INPUT_PATH); - std::fs::write(INPUT_PATH, input_bytes.as_slice())?; let mut cmd = Command::new("ziskemu"); From 712d527a7a55a29013694dfe7a9daf98aacb55e3 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 17:41:20 -0300 Subject: [PATCH 16/92] Fix recover_address with k256 --- crates/common/types/transaction.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/common/types/transaction.rs b/crates/common/types/transaction.rs index 4ce536ed372..767cb6ecfe7 100644 --- a/crates/common/types/transaction.rs +++ b/crates/common/types/transaction.rs @@ -1310,8 +1310,11 @@ pub fn recover_address(signature: Signature, payload: H256) -> Result Date: Mon, 3 Nov 2025 17:56:38 -0300 Subject: [PATCH 17/92] Update RISC0 guest Cargo.lock --- .../src/guest_program/src/risc0/Cargo.lock | 50 +------------------ 1 file changed, 1 insertion(+), 49 deletions(-) diff --git a/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock b/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock index de832d2d06c..a066a2e4905 100644 --- a/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock @@ -420,22 +420,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" -[[package]] -name = "bitcoin-io" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" - -[[package]] -name = "bitcoin_hashes" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" -dependencies = [ - "bitcoin-io", - "hex-conservative", -] - [[package]] name = "bitflags" version = "1.3.2" @@ -1194,7 +1178,6 @@ dependencies = [ "ethrex-vm", "hex", "rustc-hash", - "secp256k1", "sha3", "thiserror", "tokio", @@ -1213,6 +1196,7 @@ dependencies = [ "ethrex-rlp", "ethrex-trie", "hex", + "k256", "kzg-rs", "lazy_static", "libc", @@ -1220,7 +1204,6 @@ dependencies = [ "rayon", "rkyv", "rustc-hash", - "secp256k1", "serde", "serde_json", "sha2", @@ -1254,7 +1237,6 @@ dependencies = [ "hex", "lambdaworks-crypto", "rkyv", - "secp256k1", "serde", "serde_with", "sha3", @@ -1283,7 +1265,6 @@ dependencies = [ "p256", "ripemd", "rustc-hash", - "secp256k1", "serde", "serde_json", "sha2", @@ -1663,15 +1644,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hex-conservative" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" -dependencies = [ - "arrayvec", -] - [[package]] name = "hex-literal" version = "0.4.1" @@ -3169,26 +3141,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "secp256k1" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" -dependencies = [ - "bitcoin_hashes", - "rand 0.8.5", - "secp256k1-sys", -] - -[[package]] -name = "secp256k1-sys" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" -dependencies = [ - "cc", -] - [[package]] name = "semver" version = "1.0.26" From 76d351bccb8996641bc4ec9462cc6b436b1b7b71 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 18:06:35 -0300 Subject: [PATCH 18/92] Fix risc0 --- crates/l2/prover/src/guest_program/src/risc0/Cargo.lock | 1 + crates/l2/prover/src/guest_program/src/risc0/Cargo.toml | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock b/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock index a066a2e4905..4d7e8bd5b7f 100644 --- a/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock @@ -1235,6 +1235,7 @@ dependencies = [ "ethrex-trie", "ethrex-vm", "hex", + "k256", "lambdaworks-crypto", "rkyv", "serde", 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 b415257e4b7..3368dae1d45 100644 --- a/crates/l2/prover/src/guest_program/src/risc0/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/risc0/Cargo.toml @@ -28,8 +28,12 @@ ethrex-rlp = { path = "../../../../../../common/rlp" } ethrex-vm = { path = "../../../../../../vm", default-features = false, features = [ "risc0", ] } -ethrex-blockchain = { path = "../../../../../../blockchain", default-features = false } -ethrex-l2-common = { path = "../../../../../common", default-features = false } +ethrex-blockchain = { path = "../../../../../../blockchain", default-features = false, features = [ + "risc0", +] } +ethrex-l2-common = { path = "../../../../../common", default-features = false, features = [ + "risc0", +] } [patch.crates-io] sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.8-risczero.0" } From 94ebc1320c10fd19fb7e2e7fc660670949134338 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Mon, 3 Nov 2025 18:06:54 -0300 Subject: [PATCH 19/92] remove zisk input file after execution --- crates/l2/prover/src/backend/zisk.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 11fc839a0e5..440a8456c45 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -46,6 +46,8 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { duration.as_secs_f64() ); + std::fs::remove_file(INPUT_PATH)?; + Ok(()) } From 7607676198483653db7f29bed8f1e6cb74819156 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Tue, 4 Nov 2025 11:43:41 -0300 Subject: [PATCH 20/92] Write zisk elf before executing --- crates/l2/prover/src/backend/zisk.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 440a8456c45..30be3f9d33d 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -1,18 +1,18 @@ use std::process::{Command, Stdio}; use ethrex_l2_common::prover::{BatchProof, ProofFormat}; -use guest_program::{input::ProgramInput, output::ProgramOutput}; +use guest_program::{ZKVM_ZISK_PROGRAM_ELF, input::ProgramInput, output::ProgramOutput}; const INPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_input.bin"); const OUTPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output.bin"); -const ELF_PATH: &str = concat!( - env!("CARGO_MANIFEST_DIR"), - "/src/guest_program/src/zisk/target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program" -); +const ELF_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_elf"); pub fn execute(input: ProgramInput) -> Result<(), Box> { + // We write the ELF to a temp file because ziskemu currently only accepts ELF files from disk + std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; + let input_bytes = rkyv::to_bytes::(&input)?; std::fs::write(INPUT_PATH, input_bytes.as_slice())?; From d01f83210110fbe084e557fe262dd81d351ab7d4 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Wed, 12 Nov 2025 18:41:45 -0300 Subject: [PATCH 21/92] commit prove impl attempt --- crates/l2/prover/src/backend/zisk.rs | 63 +++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 30be3f9d33d..5b44f07ee95 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -10,11 +10,16 @@ const OUTPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output.bin" const ELF_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_elf"); pub fn execute(input: ProgramInput) -> Result<(), Box> { - // We write the ELF to a temp file because ziskemu currently only accepts ELF files from disk - std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; + // We write the ELF to a temp file because ziskemu currently only accepts + // ELF files from disk + if !std::path::Path::new(ELF_PATH).exists() { + std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; + } let input_bytes = rkyv::to_bytes::(&input)?; + // We write the input to a temp file because ziskemu currently only accepts + // input files from disk std::fs::write(INPUT_PATH, input_bytes.as_slice())?; let mut cmd = Command::new("ziskemu"); @@ -27,12 +32,13 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { .arg(INPUT_PATH) .arg("--output") .arg(OUTPUT_PATH) - .arg("--stats") .stdin(Stdio::inherit()) .stderr(Stdio::inherit()) .output()?; let duration = start.elapsed(); + std::fs::remove_file(INPUT_PATH)?; + if !output.status.success() { return Err(format!( "ZisK execution failed: {}", @@ -46,8 +52,6 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { duration.as_secs_f64() ); - std::fs::remove_file(INPUT_PATH)?; - Ok(()) } @@ -55,7 +59,54 @@ pub fn prove( _input: ProgramInput, _format: ProofFormat, ) -> Result> { - Err("prove is not implemented for ZisK backend".into()) + // We write the ELF to a temp file because cargo-zisk prove currently only + // accepts ELF files from disk + if !std::path::Path::new(ELF_PATH).exists() { + std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; + } + + let input_bytes = rkyv::to_bytes::(&input)?; + + // We write the input to a temp file because cargo-zisk prove currently only + // accepts input files from disk + std::fs::write(INPUT_PATH, input_bytes.as_slice())?; + + let mut cmd = Command::new("cargo-zisk"); + + let start = std::time::Instant::now(); + let output = cmd + .arg("prove") + .arg("--elf") + .arg(ELF_PATH) + .arg("--input") + .arg(INPUT_PATH) + .arg("--output") + .arg(OUTPUT_PATH) + .arg("--unlock-mapped-memory") + .arg("--proving-key") + .arg("--final-snark") + .stdin(Stdio::inherit()) + .stderr(Stdio::inherit()) + .output()?; + let duration = start.elapsed(); + + if !output.status.success() { + return Err(format!( + "ZisK proof generation failed: {}", + String::from_utf8_lossy(&output.stderr) + ) + .into()); + } + + println!( + "ZisK proof generated in {:.2?} seconds", + duration.as_secs_f64() + ); + + let output_bytes = std::fs::read(OUTPUT_PATH)?; + let output: ProgramOutput = rkyv::from_bytes(&output_bytes)?; + std::fs::remove_file(OUTPUT_PATH)?; + Ok(output) } pub fn verify(_output: &ProgramOutput) -> Result<(), Box> { From bb1b04ecd3ad61bd37a689e77d6405950537da57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 14 Nov 2025 17:08:50 -0300 Subject: [PATCH 22/92] fix prove output --- crates/l2/prover/src/backend/mod.rs | 2 +- crates/l2/prover/src/backend/zisk.rs | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/crates/l2/prover/src/backend/mod.rs b/crates/l2/prover/src/backend/mod.rs index 756be0a89ee..0c64b661e68 100644 --- a/crates/l2/prover/src/backend/mod.rs +++ b/crates/l2/prover/src/backend/mod.rs @@ -52,5 +52,5 @@ pub enum ProveOutput { #[cfg(feature = "risc0")] RISC0(risc0_zkvm::Receipt), #[cfg(feature = "zisk")] - ZisK(ProgramOutput), + ZisK(zisk::ProveOutput), } diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 5b44f07ee95..9645c84f535 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -9,6 +9,8 @@ const OUTPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output.bin" const ELF_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_elf"); +pub struct ProveOutput(pub Vec); + pub fn execute(input: ProgramInput) -> Result<(), Box> { // We write the ELF to a temp file because ziskemu currently only accepts // ELF files from disk @@ -56,9 +58,9 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { } pub fn prove( - _input: ProgramInput, - _format: ProofFormat, -) -> Result> { + input: ProgramInput, + format: ProofFormat, +) -> Result> { // We write the ELF to a temp file because cargo-zisk prove currently only // accepts ELF files from disk if !std::path::Path::new(ELF_PATH).exists() { @@ -103,8 +105,8 @@ pub fn prove( duration.as_secs_f64() ); - let output_bytes = std::fs::read(OUTPUT_PATH)?; - let output: ProgramOutput = rkyv::from_bytes(&output_bytes)?; + let proof_bytes = std::fs::read(OUTPUT_PATH)?; + let output = ProveOutput(proof_bytes); std::fs::remove_file(OUTPUT_PATH)?; Ok(output) } @@ -114,8 +116,8 @@ pub fn verify(_output: &ProgramOutput) -> Result<(), Box> } pub fn to_batch_proof( - _proof: ProgramOutput, - _format: ProofFormat, + proof: ProveOutput, + format: ProofFormat, ) -> Result> { Err("to_batch_proof is not implemented for ZisK backend".into()) } From 5658f34df5f0fd8e0383a531e625d2b06599dd58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 14 Nov 2025 17:12:10 -0300 Subject: [PATCH 23/92] fix output arg --- crates/l2/prover/src/backend/zisk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 9645c84f535..cd689c6b379 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -82,7 +82,7 @@ pub fn prove( .arg(ELF_PATH) .arg("--input") .arg(INPUT_PATH) - .arg("--output") + .arg("--output-dir") .arg(OUTPUT_PATH) .arg("--unlock-mapped-memory") .arg("--proving-key") From cf248252217761da4b0e936cf05f480fc5f64001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 17 Nov 2025 11:46:21 -0300 Subject: [PATCH 24/92] comment out --proving-key --- crates/l2/prover/src/backend/zisk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index cd689c6b379..734fb37eb40 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -85,7 +85,7 @@ pub fn prove( .arg("--output-dir") .arg(OUTPUT_PATH) .arg("--unlock-mapped-memory") - .arg("--proving-key") + //.arg("--proving-key") .arg("--final-snark") .stdin(Stdio::inherit()) .stderr(Stdio::inherit()) From defafb05a283dca8af01d83fcf420ae4c837198c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 17 Nov 2025 11:51:04 -0300 Subject: [PATCH 25/92] fix output dir --- crates/l2/prover/src/backend/zisk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 734fb37eb40..9dca8d88870 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -5,7 +5,7 @@ use guest_program::{ZKVM_ZISK_PROGRAM_ELF, input::ProgramInput, output::ProgramO const INPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_input.bin"); -const OUTPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output.bin"); +const OUTPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output/"); const ELF_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_elf"); From f3f4e2fc123260f609011f93b09b3bc14e8beec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 17 Nov 2025 12:20:11 -0300 Subject: [PATCH 26/92] add setup command --- crates/l2/prover/src/backend/zisk.rs | 2 +- crates/l2/prover/src/guest_program/build.rs | 28 +++++++++++++++++---- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 9dca8d88870..5147604e8a3 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -85,7 +85,7 @@ pub fn prove( .arg("--output-dir") .arg(OUTPUT_PATH) .arg("--unlock-mapped-memory") - //.arg("--proving-key") + .arg("--aggregate") .arg("--final-snark") .stdin(Stdio::inherit()) .stderr(Stdio::inherit()) diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index 042f0593281..691561be5f7 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -93,9 +93,10 @@ fn build_sp1_program() { #[cfg(all(not(clippy), feature = "zisk-guest"))] fn build_zisk_program() { - let mut command = std::process::Command::new("cargo"); + let mut build_command = std::process::Command::new("cargo"); + let mut setup_command = std::process::Command::new("cargo-zisk"); - command + build_command .env("RUSTC", rustc_path("zisk")) .args([ "+zisk", @@ -107,14 +108,28 @@ fn build_zisk_program() { .stdout(std::process::Stdio::inherit()) .stderr(std::process::Stdio::inherit()) .current_dir("./src/zisk"); + setup_command + .env("RUSTC", rustc_path("zisk")) + .args([ + "rom-setup", + "-e", + "target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program" + ]) + .stdout(std::process::Stdio::inherit()) + .stderr(std::process::Stdio::inherit()) + .current_dir("./src/zisk"); - println!("{command:?}"); + println!("{build_command:?}"); + println!("{setup_command:?}"); let start = std::time::Instant::now(); - let status = command + let build_status = build_command .status() .expect("Failed to execute zisk build command"); + let setup_status = setup_command + .status() + .expect("Failed to execute zisk setup command"); let duration = start.elapsed(); @@ -123,9 +138,12 @@ fn build_zisk_program() { duration.as_secs_f64() ); - if !status.success() { + if !build_status.success() { panic!("Failed to build guest program with zisk toolchain"); } + if !setup_status.success() { + panic!("Failed to setup compiled guest program with zisk toolchain"); + } } #[cfg(all(not(clippy), feature = "zisk-guest"))] From ac1ab5bd03cc6688d810a0052557eefc22cd16a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 17 Nov 2025 12:25:15 -0300 Subject: [PATCH 27/92] fix aggregation command --- crates/l2/prover/src/backend/zisk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 5147604e8a3..7a45e6b29c8 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -85,7 +85,7 @@ pub fn prove( .arg("--output-dir") .arg(OUTPUT_PATH) .arg("--unlock-mapped-memory") - .arg("--aggregate") + .arg("--aggregation") .arg("--final-snark") .stdin(Stdio::inherit()) .stderr(Stdio::inherit()) From 675d9ff03c0ba52b1ec93fad89855cfb47dcc8d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 17 Nov 2025 13:02:47 -0300 Subject: [PATCH 28/92] temp: add dbg --- crates/l2/prover/src/backend/zisk.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 7a45e6b29c8..65804874cf4 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -23,6 +23,9 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { // We write the input to a temp file because ziskemu currently only accepts // input files from disk std::fs::write(INPUT_PATH, input_bytes.as_slice())?; + dbg!(INPUT_PATH); + dbg!(OUTPUT_PATH); + dbg!(ELF_PATH); let mut cmd = Command::new("ziskemu"); From 3bd1b5448b9848a8dc4c21d7b27837e91e67deec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 17 Nov 2025 13:17:29 -0300 Subject: [PATCH 29/92] remove input file before any early return --- crates/l2/prover/src/backend/zisk.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 65804874cf4..14d9741b7fe 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -30,7 +30,7 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { let mut cmd = Command::new("ziskemu"); let start = std::time::Instant::now(); - let output = cmd + let command = cmd .arg("--elf") .arg(ELF_PATH) .arg("--inputs") @@ -38,11 +38,14 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { .arg("--output") .arg(OUTPUT_PATH) .stdin(Stdio::inherit()) - .stderr(Stdio::inherit()) - .output()?; + .stderr(Stdio::inherit()); + let duration = start.elapsed(); + let output = command.output(); + // Remove input file before any early return std::fs::remove_file(INPUT_PATH)?; + let output = output?; if !output.status.success() { return Err(format!( @@ -79,7 +82,7 @@ pub fn prove( let mut cmd = Command::new("cargo-zisk"); let start = std::time::Instant::now(); - let output = cmd + let command = cmd .arg("prove") .arg("--elf") .arg(ELF_PATH) @@ -91,9 +94,14 @@ pub fn prove( .arg("--aggregation") .arg("--final-snark") .stdin(Stdio::inherit()) - .stderr(Stdio::inherit()) - .output()?; + .stderr(Stdio::inherit()); + let duration = start.elapsed(); + let output = command.output(); + + // Remove input file before any early return + std::fs::remove_file(INPUT_PATH)?; + let output = output?; if !output.status.success() { return Err(format!( From 0025cb6e516c37ef57e56f3e0278f570b08f3602 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 17 Nov 2025 15:46:06 -0300 Subject: [PATCH 30/92] overwrite file --- crates/l2/prover/src/backend/zisk.rs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 14d9741b7fe..ab937e8704a 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -41,11 +41,7 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { .stderr(Stdio::inherit()); let duration = start.elapsed(); - let output = command.output(); - - // Remove input file before any early return - std::fs::remove_file(INPUT_PATH)?; - let output = output?; + let output = command.output()?; if !output.status.success() { return Err(format!( @@ -97,11 +93,7 @@ pub fn prove( .stderr(Stdio::inherit()); let duration = start.elapsed(); - let output = command.output(); - - // Remove input file before any early return - std::fs::remove_file(INPUT_PATH)?; - let output = output?; + let output = command.output()?; if !output.status.success() { return Err(format!( From 1f60ad2e2af9340ba8d0e2888e0ce6a82a2f0dc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 17 Nov 2025 16:34:04 -0300 Subject: [PATCH 31/92] implement eip7702_recover_address --- crates/l2/prover/src/guest_program/build.rs | 2 +- crates/vm/levm/src/utils.rs | 56 ++++++++++++++++++++- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index 691561be5f7..a61e8c80286 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -113,7 +113,7 @@ fn build_zisk_program() { .args([ "rom-setup", "-e", - "target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program" + "target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program", ]) .stdout(std::process::Stdio::inherit()) .stderr(std::process::Stdio::inherit()) diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index 34d462c1686..2d6e9fd2345 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -26,6 +26,7 @@ use ethrex_common::{ utils::{keccak, u256_to_big_endian}, }; use ethrex_common::{types::TxKind, utils::u256_from_big_endian_const}; +use k256::ecdsa::VerifyingKey; use std::collections::{BTreeMap, HashMap}; pub type Storage = HashMap; @@ -348,9 +349,60 @@ pub fn get_authorized_address_from_code(code: &Bytes) -> Result Result, VMError> { - todo!() + use ethrex_rlp::encode::RLPEncode; + use sha2::Digest; + use sha3::Keccak256; + + if auth_tuple.s_signature > *SECP256K1_ORDER_OVER2 || U256::zero() >= auth_tuple.s_signature { + return Ok(None); + } + if auth_tuple.r_signature > *SECP256K1_ORDER || U256::zero() >= auth_tuple.r_signature { + return Ok(None); + } + if auth_tuple.y_parity != U256::one() && auth_tuple.y_parity != U256::zero() { + return Ok(None); + } + + let rlp_buf = (auth_tuple.chain_id, auth_tuple.address, auth_tuple.nonce).encode_to_vec(); + + let mut digest = Keccak256::new(); + digest.update([MAGIC]); + digest.update(rlp_buf); + + let bytes = [ + auth_tuple.r_signature.to_big_endian(), + auth_tuple.s_signature.to_big_endian(), + ] + .concat(); + + let Ok(recovery_id) = k256::ecdsa::RecoveryId::try_from( + TryInto::::try_into(auth_tuple.y_parity).map_err(|_| InternalError::TypeConversion)?, + ) else { + return Ok(None); + }; + + let Ok(signature) = k256::ecdsa::Signature::from_slice(&bytes) else { + return Ok(None); + }; + + let Ok(authority) = VerifyingKey::recover_from_digest(digest, &signature, recovery_id) else { + return Ok(None); + }; + + let public_key = authority.to_encoded_point(false).to_bytes(); + let mut hasher = Keccak256::new(); + hasher.update(public_key.get(1..).ok_or(InternalError::Slicing)?); + let address_hash = hasher.finalize(); + + // Get the last 20 bytes of the hash -> Address + let authority_address_bytes: [u8; 20] = address_hash + .get(12..32) + .ok_or(InternalError::Slicing)? + .try_into() + .map_err(|_| InternalError::TypeConversion)?; + Ok(Some(Address::from_slice(&authority_address_bytes))) } #[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] From 9e834539a57603259157a90a3839b630b10cbd0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 17 Nov 2025 16:41:25 -0300 Subject: [PATCH 32/92] define constants --- crates/vm/levm/src/constants.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/vm/levm/src/constants.rs b/crates/vm/levm/src/constants.rs index 4a212f6b2b9..c3135cd0c61 100644 --- a/crates/vm/levm/src/constants.rs +++ b/crates/vm/levm/src/constants.rs @@ -1,4 +1,6 @@ use ethrex_common::{H256, U256}; +#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] +use k256::elliptic_curve::bigint::Encoding; use p256::{ FieldElement as P256FieldElement, NistP256, elliptic_curve::{Curve, bigint::U256 as P256Uint, ff::PrimeField}, @@ -70,10 +72,8 @@ pub const VALID_BLOB_PREFIXES: [u8; 2] = [0x01, 0x02]; pub const LAST_AVAILABLE_BLOCK_LIMIT: U256 = U256([256, 0, 0, 0]); // EIP7702 - EOA Load Code -#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] pub static SECP256K1_ORDER: std::sync::LazyLock = - std::sync::LazyLock::new(|| U256::from_big_endian(&secp256k1::constants::CURVE_ORDER)); -#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] + std::sync::LazyLock::new(|| U256::from_big_endian(&k256::Secp256k1::ORDER.to_be_bytes())); pub static SECP256K1_ORDER_OVER2: std::sync::LazyLock = std::sync::LazyLock::new(|| *SECP256K1_ORDER / U256::from(2)); pub const MAGIC: u8 = 0x05; From 7dd86f9a6c9b155723f10f4b1fba7c177e768ee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 17 Nov 2025 16:56:32 -0300 Subject: [PATCH 33/92] import --- crates/vm/levm/src/constants.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/vm/levm/src/constants.rs b/crates/vm/levm/src/constants.rs index c3135cd0c61..037f3abfadc 100644 --- a/crates/vm/levm/src/constants.rs +++ b/crates/vm/levm/src/constants.rs @@ -1,5 +1,4 @@ use ethrex_common::{H256, U256}; -#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] use k256::elliptic_curve::bigint::Encoding; use p256::{ FieldElement as P256FieldElement, NistP256, From 990ba8f0761c9de0193284ee1664159d9891689a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Mon, 17 Nov 2025 17:08:05 -0300 Subject: [PATCH 34/92] remove output arg from execution --- crates/l2/prover/src/backend/zisk.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index ab937e8704a..63e5ffad401 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -35,8 +35,6 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { .arg(ELF_PATH) .arg("--inputs") .arg(INPUT_PATH) - .arg("--output") - .arg(OUTPUT_PATH) .stdin(Stdio::inherit()) .stderr(Stdio::inherit()); From acc0c4421c656861e666cda831dc2121adf10073 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 11:18:23 -0300 Subject: [PATCH 35/92] rm dbg, fix path --- crates/l2/prover/src/backend/zisk.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 63e5ffad401..6c7fcbd2196 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -7,7 +7,7 @@ const INPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_input.bin"); const OUTPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output/"); -const ELF_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_elf"); +const ELF_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zkvm-zisk-program"); pub struct ProveOutput(pub Vec); @@ -23,9 +23,6 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { // We write the input to a temp file because ziskemu currently only accepts // input files from disk std::fs::write(INPUT_PATH, input_bytes.as_slice())?; - dbg!(INPUT_PATH); - dbg!(OUTPUT_PATH); - dbg!(ELF_PATH); let mut cmd = Command::new("ziskemu"); From 1aa998ec32bc36cb99a71da97549f25415f6d25f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 11:31:52 -0300 Subject: [PATCH 36/92] enable tiny-keccak patch and ecpairing precomp --- crates/l2/prover/src/guest_program/src/zisk/Cargo.lock | 4 ++-- crates/l2/prover/src/guest_program/src/zisk/Cargo.toml | 1 + crates/vm/levm/src/precompiles.rs | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock index afdc3bd7ef2..d50f3d45708 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock @@ -2727,9 +2727,9 @@ dependencies = [ [[package]] name = "tiny-keccak" version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +source = "git+https://github.com/0xPolygonHermez/zisk-patch-tiny-keccak/?branch=zisk#a5cb98ca4d9d390b39b10c9e81a061fd830aea35" dependencies = [ + "cfg-if", "crunchy", ] diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml index 876469b4327..9f8059db5e4 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml @@ -20,6 +20,7 @@ sha3 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", branc k256 = { git = "https://github.com/0xPolygonHermez/zisk-patch-elliptic-curves.git", tag = "patch-k256-0.13.4-zisk-0.13.0" } substrate-bn = { git = "https://github.com/0xPolygonHermez/zisk-patch-bn.git", tag = "patch-0.6.0-zisk-0.13.0" } sp1_bls12_381 = { git = "https://github.com/han0110/bls12_381.git", branch = "zisk-patch/v0.8.0-upgrade-sp1-lib" } +tiny-keccak = { git = "https://github.com/0xPolygonHermez/zisk-patch-tiny-keccak/", branch = "zisk" } [features] l2 = ["guest_program/l2"] diff --git a/crates/vm/levm/src/precompiles.rs b/crates/vm/levm/src/precompiles.rs index da15fd4e01a..ea3c059514d 100644 --- a/crates/vm/levm/src/precompiles.rs +++ b/crates/vm/levm/src/precompiles.rs @@ -899,7 +899,7 @@ pub fn ecpairing(calldata: &Bytes, gas_remaining: &mut u64, _fork: Fork) -> Resu Ok(Bytes::from_owner(result)) } -#[cfg(any(feature = "sp1", feature = "risc0"))] +#[cfg(any(feature = "sp1", feature = "risc0", feature = "zisk"))] #[inline] pub fn pairing_check(batch: &[(G1, G2)]) -> Result { use substrate_bn::{AffineG1, AffineG2, Fq, Fq2, G1 as SubstrateG1, G2 as SubstrateG2, Group}; @@ -955,7 +955,7 @@ pub fn pairing_check(batch: &[(G1, G2)]) -> Result { Ok(result == substrate_bn::Gt::one()) } -#[cfg(all(not(feature = "sp1"), not(feature = "risc0")))] +#[cfg(all(not(feature = "sp1"), not(feature = "risc0"), not(feature = "zisk")))] #[inline] pub fn pairing_check(batch: &[(G1, G2)]) -> Result { use lambdaworks_math::errors::PairingError; From 8e590c7ce6ed895c552de36edf8e4ba58cb76905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 11:48:52 -0300 Subject: [PATCH 37/92] refactor command --- crates/l2/prover/src/backend/zisk.rs | 44 +++++++++++++--------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 6c7fcbd2196..ae227be9daf 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -70,25 +70,28 @@ pub fn prove( // accepts input files from disk std::fs::write(INPUT_PATH, input_bytes.as_slice())?; - let mut cmd = Command::new("cargo-zisk"); - - let start = std::time::Instant::now(); - let command = cmd - .arg("prove") - .arg("--elf") - .arg(ELF_PATH) - .arg("--input") - .arg(INPUT_PATH) - .arg("--output-dir") - .arg(OUTPUT_PATH) - .arg("--unlock-mapped-memory") - .arg("--aggregation") - .arg("--final-snark") + let static_args = vec![ + "prove", + "--elf", + ELF_PATH, + "--input", + INPUT_PATH, + "--output-dir", + OUTPUT_PATH, + "--aggregation", + ]; + let conditional_groth16_arg = if format == ProofFormat::Groth16 { + vec!["--final-snark"] + } else { + vec![] + }; + + let output = Command::new("cargo-zisk") + .args(static_args) + .args(conditional_groth16_arg) .stdin(Stdio::inherit()) - .stderr(Stdio::inherit()); - - let duration = start.elapsed(); - let output = command.output()?; + .stderr(Stdio::inherit()) + .output()?; if !output.status.success() { return Err(format!( @@ -98,11 +101,6 @@ pub fn prove( .into()); } - println!( - "ZisK proof generated in {:.2?} seconds", - duration.as_secs_f64() - ); - let proof_bytes = std::fs::read(OUTPUT_PATH)?; let output = ProveOutput(proof_bytes); std::fs::remove_file(OUTPUT_PATH)?; From 4820fa008236ca2f0deba10f9101d493bfa12ae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 11:52:56 -0300 Subject: [PATCH 38/92] fix --- crates/l2/prover/src/backend/zisk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index ae227be9daf..bc0d8fc7e8d 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -80,7 +80,7 @@ pub fn prove( OUTPUT_PATH, "--aggregation", ]; - let conditional_groth16_arg = if format == ProofFormat::Groth16 { + let conditional_groth16_arg = if let ProofFormat::Groth16 = format { vec!["--final-snark"] } else { vec![] From bf4661a24ab77ad82d42a2d8c490ec8d2a26ddcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 12:34:55 -0300 Subject: [PATCH 39/92] fixes --- Cargo.lock | 1 + crates/common/types/transaction.rs | 4 +- .../prover/src/guest_program/src/execution.rs | 2 - .../src/guest_program/src/zisk/Cargo.lock | 51 +++++++++++-------- crates/vm/levm/Cargo.toml | 1 + crates/vm/levm/src/utils.rs | 12 +---- 6 files changed, 36 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e38f4d86fee..a60f4c5d77f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3573,6 +3573,7 @@ dependencies = [ "serde", "serde_json", "sha2", + "sha3", "spinoff", "strum 0.27.2", "substrate-bn", diff --git a/crates/common/types/transaction.rs b/crates/common/types/transaction.rs index 2203abd3157..a1c44309614 100644 --- a/crates/common/types/transaction.rs +++ b/crates/common/types/transaction.rs @@ -1411,15 +1411,13 @@ pub fn recover_address_from_message( signature: Signature, message: &Bytes, ) -> Result { - use sha2::Digest; // Hash message let payload = keccak(message); - recover_address(signature, payload) + Ok(recover_address(signature, payload)?) } #[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] pub fn recover_address(signature: Signature, payload: H256) -> Result { - use sha2::Digest; // Create signature let signature_bytes = signature.to_fixed_bytes(); let signature = secp256k1::ecdsa::RecoverableSignature::from_compact( diff --git a/crates/l2/prover/src/guest_program/src/execution.rs b/crates/l2/prover/src/guest_program/src/execution.rs index bcf6109bdb7..99a8a78cad8 100644 --- a/crates/l2/prover/src/guest_program/src/execution.rs +++ b/crates/l2/prover/src/guest_program/src/execution.rs @@ -20,7 +20,6 @@ use ethrex_l2_common::l1_messages::L1Message; use ethrex_l2_common::privileged_transactions::get_block_privileged_transactions; use ethrex_rlp::encode::RLPEncode; use ethrex_vm::{Evm, EvmError, GuestProgramStateWrapper, VmDatabase}; -#[cfg(feature = "l2")] use std::collections::BTreeMap; use std::collections::HashMap; @@ -34,7 +33,6 @@ use ethrex_l2_common::{ l1_messages::get_block_l1_messages, privileged_transactions::{ PrivilegedTransactionError, compute_privileged_transactions_hash, - get_block_privileged_transactions, }, }; diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock index d50f3d45708..4ed6c19d781 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock @@ -864,10 +864,11 @@ dependencies = [ [[package]] name = "ethrex-blockchain" -version = "5.0.0" +version = "7.0.0" dependencies = [ "bytes", "ethrex-common", + "ethrex-crypto", "ethrex-metrics", "ethrex-rlp", "ethrex-storage", @@ -875,7 +876,6 @@ dependencies = [ "ethrex-vm", "hex", "rustc-hash", - "sha3", "thiserror", "tokio", "tokio-util", @@ -884,7 +884,7 @@ dependencies = [ [[package]] name = "ethrex-common" -version = "5.0.0" +version = "7.0.0" dependencies = [ "bytes", "crc32fast", @@ -913,19 +913,21 @@ dependencies = [ [[package]] name = "ethrex-crypto" -version = "5.0.0" +version = "7.0.0" dependencies = [ "kzg-rs", "thiserror", + "tiny-keccak", ] [[package]] name = "ethrex-l2-common" -version = "5.0.0" +version = "7.0.0" dependencies = [ "bytes", "ethereum-types", "ethrex-common", + "ethrex-crypto", "ethrex-rlp", "ethrex-storage", "ethrex-trie", @@ -942,7 +944,7 @@ dependencies = [ [[package]] name = "ethrex-levm" -version = "5.0.0" +version = "7.0.0" dependencies = [ "ark-bn254", "ark-ec", @@ -974,7 +976,7 @@ dependencies = [ [[package]] name = "ethrex-metrics" -version = "5.0.0" +version = "7.0.0" dependencies = [ "ethrex-common", "serde", @@ -985,7 +987,7 @@ dependencies = [ [[package]] name = "ethrex-rlp" -version = "5.0.0" +version = "7.0.0" dependencies = [ "bytes", "ethereum-types", @@ -998,7 +1000,7 @@ dependencies = [ [[package]] name = "ethrex-storage" -version = "5.0.0" +version = "7.0.0" dependencies = [ "anyhow", "async-trait", @@ -1006,6 +1008,7 @@ dependencies = [ "bytes", "ethereum-types", "ethrex-common", + "ethrex-crypto", "ethrex-rlp", "ethrex-trie", "hex", @@ -1014,7 +1017,6 @@ dependencies = [ "rustc-hash", "serde", "serde_json", - "sha3", "thiserror", "tracing", ] @@ -1028,20 +1030,22 @@ dependencies = [ [[package]] name = "ethrex-trie" -version = "5.0.0" +version = "7.0.0" dependencies = [ "anyhow", "bytes", "crossbeam", "digest", "ethereum-types", + "ethrex-crypto", "ethrex-rlp", "ethrex-threadpool", "hex", "lazy_static", + "rkyv", + "rustc-hash", "serde", "serde_json", - "sha3", "smallvec", "thiserror", "tracing", @@ -1049,7 +1053,7 @@ dependencies = [ [[package]] name = "ethrex-vm" -version = "5.0.0" +version = "7.0.0" dependencies = [ "bincode", "bytes", @@ -1057,14 +1061,13 @@ dependencies = [ "dyn-clone", "ethereum-types", "ethrex-common", + "ethrex-crypto", "ethrex-levm", "ethrex-rlp", "ethrex-trie", - "hex", "lazy_static", "rkyv", "serde", - "sha3", "thiserror", "tracing", ] @@ -1220,8 +1223,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] @@ -1237,7 +1242,7 @@ dependencies = [ [[package]] name = "guest_program" -version = "5.0.0" +version = "7.0.0" dependencies = [ "bytes", "ethrex-blockchain", @@ -1580,11 +1585,13 @@ dependencies = [ [[package]] name = "lambdaworks-crypto" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ec4b462bbec171e1af821f3d9fff72e17de93b3d1022f29aa70fec8262c1cee" +checksum = "58b1a1c1102a5a7fbbda117b79fb3a01e033459c738a3c1642269603484fd1c1" dependencies = [ "lambdaworks-math", + "rand", + "rand_chacha", "serde", "sha2", "sha3", @@ -1592,10 +1599,14 @@ dependencies = [ [[package]] name = "lambdaworks-math" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "708d148956bcdc21ae5c432b4e20bbaa26fd68d5376a3a6c461f41095abea0ba" +checksum = "018a95aa873eb49896a858dee0d925c33f3978d073c64b08dd4f2c9b35a017c6" dependencies = [ + "getrandom", + "num-bigint 0.4.6", + "num-traits", + "rand", "rayon", "serde", "serde_json", diff --git a/crates/vm/levm/Cargo.toml b/crates/vm/levm/Cargo.toml index 6e231f5cd82..8c0ce9df318 100644 --- a/crates/vm/levm/Cargo.toml +++ b/crates/vm/levm/Cargo.toml @@ -25,6 +25,7 @@ p256 = { version = "0.13.2", features = [ "expose-field", ] } sha2 = "0.10.8" +sha3 = "0.10.8" ripemd = "0.1.3" malachite = "0.6.1" lambdaworks-math = "0.13.0" diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index a2503d3e557..8591629ea86 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -23,14 +23,8 @@ use ethrex_common::{ utils::{keccak, u256_to_big_endian}, }; use ethrex_common::{types::TxKind, utils::u256_from_big_endian_const}; -use k256::ecdsa::VerifyingKey; use ethrex_crypto::keccak::keccak_hash; use ethrex_rlp; -use ethrex_rlp::encode::RLPEncode; -use secp256k1::{ - Message, - ecdsa::{RecoverableSignature, RecoveryId}, -}; use std::collections::HashMap; pub type Storage = HashMap; @@ -298,7 +292,7 @@ pub fn eip7702_recover_address( return Ok(None); }; - let Ok(authority) = VerifyingKey::recover_from_digest(digest, &signature, recovery_id) else { + let Ok(authority) = k256::ecdsa::VerifyingKey::recover_from_digest(digest, &signature, recovery_id) else { return Ok(None); }; @@ -321,8 +315,6 @@ pub fn eip7702_recover_address( auth_tuple: &AuthorizationTuple, ) -> Result, VMError> { use ethrex_rlp::encode::RLPEncode; - use sha2::Digest; - use sha3::Keccak256; if auth_tuple.s_signature > *SECP256K1_ORDER_OVER2 || U256::zero() >= auth_tuple.s_signature { return Ok(None); @@ -339,7 +331,7 @@ pub fn eip7702_recover_address( (auth_tuple.chain_id, auth_tuple.address, auth_tuple.nonce).encode(&mut rlp_buf); let bytes = keccak_hash(&rlp_buf); - let message = Message::from_digest(bytes); + let message = secp256k1::Message::from_digest(bytes); let bytes = [ auth_tuple.r_signature.to_big_endian(), From 9ac525f091740dfd8984d200359bed41c00eb188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 15:46:41 -0300 Subject: [PATCH 40/92] debug --- crates/l2/prover/src/backend/zisk.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index bc0d8fc7e8d..4c512cd97cc 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -86,12 +86,13 @@ pub fn prove( vec![] }; - let output = Command::new("cargo-zisk") + let command = Command::new("cargo-zisk") .args(static_args) .args(conditional_groth16_arg) .stdin(Stdio::inherit()) - .stderr(Stdio::inherit()) - .output()?; + .stderr(Stdio::inherit()); + dbg!(&command); + let output = command.output()?; if !output.status.success() { return Err(format!( From c03e229c65656b404e966b9d190b7990abcb21fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 16:04:33 -0300 Subject: [PATCH 41/92] stdout --- crates/l2/prover/src/backend/zisk.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 4c512cd97cc..a6054f601f8 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -86,13 +86,12 @@ pub fn prove( vec![] }; - let command = Command::new("cargo-zisk") + let output = Command::new("cargo-zisk") .args(static_args) .args(conditional_groth16_arg) - .stdin(Stdio::inherit()) - .stderr(Stdio::inherit()); - dbg!(&command); - let output = command.output()?; + .stdin(Stdio::piped()) + .stderr(Stdio::piped()) + .output()?; if !output.status.success() { return Err(format!( From 1e0b9662104a5f90846db8d3322ca367e03d5082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 16:12:39 -0300 Subject: [PATCH 42/92] debug --- crates/l2/prover/src/backend/zisk.rs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index a6054f601f8..f83fa7cca3e 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -27,16 +27,14 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { let mut cmd = Command::new("ziskemu"); let start = std::time::Instant::now(); - let command = cmd + let output = cmd .arg("--elf") .arg(ELF_PATH) .arg("--inputs") .arg(INPUT_PATH) .stdin(Stdio::inherit()) - .stderr(Stdio::inherit()); - - let duration = start.elapsed(); - let output = command.output()?; + .stderr(Stdio::inherit()) + .output()?; if !output.status.success() { return Err(format!( @@ -46,11 +44,6 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { .into()); } - println!( - "ZisK guest program executed in {:.2?} seconds", - duration.as_secs_f64() - ); - Ok(()) } @@ -80,6 +73,7 @@ pub fn prove( OUTPUT_PATH, "--aggregation", ]; + dbg!(&static_args); let conditional_groth16_arg = if let ProofFormat::Groth16 = format { vec!["--final-snark"] } else { @@ -89,8 +83,8 @@ pub fn prove( let output = Command::new("cargo-zisk") .args(static_args) .args(conditional_groth16_arg) - .stdin(Stdio::piped()) - .stderr(Stdio::piped()) + .stdin(Stdio::inherit()) + .stderr(Stdio::inherit()) .output()?; if !output.status.success() { From f54c390a091545f2b1334c394aa0d6fd113057ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 16:27:05 -0300 Subject: [PATCH 43/92] try fix --- crates/l2/prover/src/backend/zisk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index f83fa7cca3e..56ae2222c72 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -82,7 +82,7 @@ pub fn prove( let output = Command::new("cargo-zisk") .args(static_args) - .args(conditional_groth16_arg) + //.args(conditional_groth16_arg) .stdin(Stdio::inherit()) .stderr(Stdio::inherit()) .output()?; From 4c30e3624b619f9835003b417440c9ecfbcf726d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 16:34:21 -0300 Subject: [PATCH 44/92] stdout --- crates/l2/prover/src/backend/zisk.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 56ae2222c72..d7d7b4b72a0 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -14,9 +14,7 @@ pub struct ProveOutput(pub Vec); pub fn execute(input: ProgramInput) -> Result<(), Box> { // We write the ELF to a temp file because ziskemu currently only accepts // ELF files from disk - if !std::path::Path::new(ELF_PATH).exists() { - std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; - } + std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; let input_bytes = rkyv::to_bytes::(&input)?; @@ -53,9 +51,7 @@ pub fn prove( ) -> Result> { // We write the ELF to a temp file because cargo-zisk prove currently only // accepts ELF files from disk - if !std::path::Path::new(ELF_PATH).exists() { - std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; - } + std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; let input_bytes = rkyv::to_bytes::(&input)?; @@ -84,6 +80,7 @@ pub fn prove( .args(static_args) //.args(conditional_groth16_arg) .stdin(Stdio::inherit()) + .stdout(Stdio::inherit()) .stderr(Stdio::inherit()) .output()?; From d1f4738f8c32bccffed9cf991a183748a7954eac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 16:55:23 -0300 Subject: [PATCH 45/92] fixes --- crates/l2/prover/src/backend/zisk.rs | 59 ++++++++++++++++------------ 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index d7d7b4b72a0..eb4e729b103 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -5,31 +5,30 @@ use guest_program::{ZKVM_ZISK_PROGRAM_ELF, input::ProgramInput, output::ProgramO const INPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_input.bin"); -const OUTPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output/"); +const OUTPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output/vadcop_final_proof.compressed.bin"); const ELF_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zkvm-zisk-program"); pub struct ProveOutput(pub Vec); pub fn execute(input: ProgramInput) -> Result<(), Box> { - // We write the ELF to a temp file because ziskemu currently only accepts - // ELF files from disk - std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; + write_elf_file()?; let input_bytes = rkyv::to_bytes::(&input)?; - - // We write the input to a temp file because ziskemu currently only accepts - // input files from disk std::fs::write(INPUT_PATH, input_bytes.as_slice())?; - let mut cmd = Command::new("ziskemu"); - - let start = std::time::Instant::now(); - let output = cmd - .arg("--elf") - .arg(ELF_PATH) - .arg("--inputs") - .arg(INPUT_PATH) + let args = vec![ + "prove", + "--elf", + ELF_PATH, + "--input", + INPUT_PATH, + "--output-dir", + OUTPUT_PATH, + "--aggregation", + ]; + let output = Command::new("ziskemu") + .args(args) .stdin(Stdio::inherit()) .stderr(Stdio::inherit()) .output()?; @@ -49,14 +48,9 @@ pub fn prove( input: ProgramInput, format: ProofFormat, ) -> Result> { - // We write the ELF to a temp file because cargo-zisk prove currently only - // accepts ELF files from disk - std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; + write_elf_file()?; let input_bytes = rkyv::to_bytes::(&input)?; - - // We write the input to a temp file because cargo-zisk prove currently only - // accepts input files from disk std::fs::write(INPUT_PATH, input_bytes.as_slice())?; let static_args = vec![ @@ -69,7 +63,6 @@ pub fn prove( OUTPUT_PATH, "--aggregation", ]; - dbg!(&static_args); let conditional_groth16_arg = if let ProofFormat::Groth16 = format { vec!["--final-snark"] } else { @@ -78,9 +71,8 @@ pub fn prove( let output = Command::new("cargo-zisk") .args(static_args) - //.args(conditional_groth16_arg) + .args(conditional_groth16_arg) .stdin(Stdio::inherit()) - .stdout(Stdio::inherit()) .stderr(Stdio::inherit()) .output()?; @@ -94,7 +86,6 @@ pub fn prove( let proof_bytes = std::fs::read(OUTPUT_PATH)?; let output = ProveOutput(proof_bytes); - std::fs::remove_file(OUTPUT_PATH)?; Ok(output) } @@ -108,3 +99,21 @@ pub fn to_batch_proof( ) -> Result> { Err("to_batch_proof is not implemented for ZisK backend".into()) } + +fn write_elf_file() -> Result<(), Box> { + match std::fs::read(ELF_PATH) { + Ok(existing_content) => { + if existing_content != content { + std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; + } + } + Err(e) => { + if e.kind() == ErrorKind::NotFound { + std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; + } else { + return Err(e); + } + } + } + return Ok(()); +} From e7939ba836a595a3be65d3c0401d8994bd437a70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 17:04:45 -0300 Subject: [PATCH 46/92] fix --- crates/l2/prover/src/backend/zisk.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index eb4e729b103..907c51980f5 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -1,11 +1,17 @@ -use std::process::{Command, Stdio}; +use std::{ + io::ErrorKind, + process::{Command, Stdio}, +}; use ethrex_l2_common::prover::{BatchProof, ProofFormat}; use guest_program::{ZKVM_ZISK_PROGRAM_ELF, input::ProgramInput, output::ProgramOutput}; const INPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_input.bin"); -const OUTPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output/vadcop_final_proof.compressed.bin"); +const OUTPUT_PATH: &str = concat!( + env!("CARGO_MANIFEST_DIR"), + "/zisk_output/vadcop_final_proof.compressed.bin" +); const ELF_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zkvm-zisk-program"); @@ -103,7 +109,7 @@ pub fn to_batch_proof( fn write_elf_file() -> Result<(), Box> { match std::fs::read(ELF_PATH) { Ok(existing_content) => { - if existing_content != content { + if existing_content != ZKVM_ZISK_PROGRAM_ELF { std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; } } @@ -111,7 +117,7 @@ fn write_elf_file() -> Result<(), Box> { if e.kind() == ErrorKind::NotFound { std::fs::write(ELF_PATH, ZKVM_ZISK_PROGRAM_ELF)?; } else { - return Err(e); + return Err(Box::new(e)); } } } From e115e38f6cf28e2f3cee7051ee6ed049ccac7f38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 17:11:33 -0300 Subject: [PATCH 47/92] stdout --- crates/l2/prover/src/backend/zisk.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 907c51980f5..a036d4d5b3a 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -79,6 +79,7 @@ pub fn prove( .args(static_args) .args(conditional_groth16_arg) .stdin(Stdio::inherit()) + .stdout(Stdio::inherit()) .stderr(Stdio::inherit()) .output()?; From f005126fc806e17494f621a24be15ec94d3b953a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 17:17:04 -0300 Subject: [PATCH 48/92] fix args of execute --- crates/l2/prover/src/backend/zisk.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index a036d4d5b3a..412f1092f01 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -24,14 +24,10 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { std::fs::write(INPUT_PATH, input_bytes.as_slice())?; let args = vec![ - "prove", "--elf", ELF_PATH, - "--input", + "--inputs", INPUT_PATH, - "--output-dir", - OUTPUT_PATH, - "--aggregation", ]; let output = Command::new("ziskemu") .args(args) @@ -79,7 +75,6 @@ pub fn prove( .args(static_args) .args(conditional_groth16_arg) .stdin(Stdio::inherit()) - .stdout(Stdio::inherit()) .stderr(Stdio::inherit()) .output()?; From b9850084225a29a464baeec0b40e4019813cc321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 17:23:25 -0300 Subject: [PATCH 49/92] fix output path --- crates/l2/prover/src/backend/zisk.rs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 412f1092f01..2f9fba11aff 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -8,9 +8,10 @@ use guest_program::{ZKVM_ZISK_PROGRAM_ELF, input::ProgramInput, output::ProgramO const INPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_input.bin"); -const OUTPUT_PATH: &str = concat!( - env!("CARGO_MANIFEST_DIR"), - "/zisk_output/vadcop_final_proof.compressed.bin" +const OUTPUT_DIR_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output"); +const OUTPUT_PROOF_PATH: &str = concat!( + OUTPUT_DIR_PATH + "/vadcop_final_proof.compressed.bin" ); const ELF_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zkvm-zisk-program"); @@ -23,12 +24,7 @@ pub fn execute(input: ProgramInput) -> Result<(), Box> { let input_bytes = rkyv::to_bytes::(&input)?; std::fs::write(INPUT_PATH, input_bytes.as_slice())?; - let args = vec![ - "--elf", - ELF_PATH, - "--inputs", - INPUT_PATH, - ]; + let args = vec!["--elf", ELF_PATH, "--inputs", INPUT_PATH]; let output = Command::new("ziskemu") .args(args) .stdin(Stdio::inherit()) @@ -62,7 +58,7 @@ pub fn prove( "--input", INPUT_PATH, "--output-dir", - OUTPUT_PATH, + OUTPUT_DIR_PATH, "--aggregation", ]; let conditional_groth16_arg = if let ProofFormat::Groth16 = format { @@ -86,7 +82,7 @@ pub fn prove( .into()); } - let proof_bytes = std::fs::read(OUTPUT_PATH)?; + let proof_bytes = std::fs::read(OUTPUT_PROOF_PATH)?; let output = ProveOutput(proof_bytes); Ok(output) } From eccf57a6ef05751c1b2104c7d353e7472dec5be7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 17:27:05 -0300 Subject: [PATCH 50/92] typo --- crates/l2/prover/src/backend/zisk.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 2f9fba11aff..5a014b234f4 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -9,10 +9,7 @@ use guest_program::{ZKVM_ZISK_PROGRAM_ELF, input::ProgramInput, output::ProgramO const INPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_input.bin"); const OUTPUT_DIR_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output"); -const OUTPUT_PROOF_PATH: &str = concat!( - OUTPUT_DIR_PATH - "/vadcop_final_proof.compressed.bin" -); +const OUTPUT_PROOF_PATH: &str = concat!(OUTPUT_DIR_PATH, "/vadcop_final_proof.compressed.bin"); const ELF_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zkvm-zisk-program"); From db234eec7b1da30abcb23eada63cf73c6b3d475b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 18 Nov 2025 17:31:05 -0300 Subject: [PATCH 51/92] fix --- crates/l2/prover/src/backend/zisk.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 5a014b234f4..ab5424e0154 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -7,10 +7,7 @@ use ethrex_l2_common::prover::{BatchProof, ProofFormat}; use guest_program::{ZKVM_ZISK_PROGRAM_ELF, input::ProgramInput, output::ProgramOutput}; const INPUT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_input.bin"); - const OUTPUT_DIR_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zisk_output"); -const OUTPUT_PROOF_PATH: &str = concat!(OUTPUT_DIR_PATH, "/vadcop_final_proof.compressed.bin"); - const ELF_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/zkvm-zisk-program"); pub struct ProveOutput(pub Vec); @@ -79,7 +76,9 @@ pub fn prove( .into()); } - let proof_bytes = std::fs::read(OUTPUT_PROOF_PATH)?; + let proof_bytes = std::fs::read(format!( + "{OUTPUT_DIR_PATH}/vadcop_final_proof.compressed.bin" + ))?; let output = ProveOutput(proof_bytes); Ok(output) } From dbe3cbfe65486fc3284cd454a58bc01d17407bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 19 Nov 2025 11:32:43 -0300 Subject: [PATCH 52/92] reset rustflags --- crates/l2/prover/src/guest_program/.cargo/config.toml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 crates/l2/prover/src/guest_program/.cargo/config.toml diff --git a/crates/l2/prover/src/guest_program/.cargo/config.toml b/crates/l2/prover/src/guest_program/.cargo/config.toml new file mode 100644 index 00000000000..a989f77e8bb --- /dev/null +++ b/crates/l2/prover/src/guest_program/.cargo/config.toml @@ -0,0 +1,3 @@ +[target.riscv64ima-zisk-zkvm-elf] +rustflags = [] + From 35f3a923488f5afc404a437972a3309ad2cc2952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 19 Nov 2025 11:33:57 -0300 Subject: [PATCH 53/92] move override to workspace --- .cargo/config.toml | 4 ++++ crates/l2/prover/src/guest_program/.cargo/config.toml | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) delete mode 100644 crates/l2/prover/src/guest_program/.cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml index 934b5126f60..46bf38f6d5f 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,3 +3,7 @@ rustflags = [ "-Ctarget-cpu=x86-64-v3", "-Ctarget-feature=+avx2,+sse2,+ssse3,+sse4.1,+sse4.2,+bmi1,+lzcnt,+pclmulqdq", ] + +[target.riscv64ima-zisk-zkvm-elf] +rustflags = [] + diff --git a/crates/l2/prover/src/guest_program/.cargo/config.toml b/crates/l2/prover/src/guest_program/.cargo/config.toml deleted file mode 100644 index a989f77e8bb..00000000000 --- a/crates/l2/prover/src/guest_program/.cargo/config.toml +++ /dev/null @@ -1,3 +0,0 @@ -[target.riscv64ima-zisk-zkvm-elf] -rustflags = [] - From 3ab5ee72a0d54d7d77fd65f1936943801beaa939 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 19 Nov 2025 11:34:48 -0300 Subject: [PATCH 54/92] remove config.toml --- .cargo/config.toml | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml deleted file mode 100644 index 46bf38f6d5f..00000000000 --- a/.cargo/config.toml +++ /dev/null @@ -1,9 +0,0 @@ -[target.x86_64-unknown-linux-gnu] -rustflags = [ - "-Ctarget-cpu=x86-64-v3", - "-Ctarget-feature=+avx2,+sse2,+ssse3,+sse4.1,+sse4.2,+bmi1,+lzcnt,+pclmulqdq", -] - -[target.riscv64ima-zisk-zkvm-elf] -rustflags = [] - From 6658a070384eb23f667d4f160222608cd016aabb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 19 Nov 2025 11:44:47 -0300 Subject: [PATCH 55/92] clean env flags --- crates/l2/prover/src/guest_program/build.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index 8e293984f06..7342186ce6e 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -109,6 +109,8 @@ fn build_zisk_program() { build_command .env("RUSTC", rustc_path("zisk")) + .env_remove("RUSTFLAGS") + .env_remove("CARGO_ENCODED_RUSTFLAGS"); .args([ "+zisk", "build", @@ -121,6 +123,8 @@ fn build_zisk_program() { .current_dir("./src/zisk"); setup_command .env("RUSTC", rustc_path("zisk")) + .env_remove("RUSTFLAGS") + .env_remove("CARGO_ENCODED_RUSTFLAGS"); .args([ "rom-setup", "-e", From 75512cfd1e7e60cc75264059d210d9b3d072c0c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 19 Nov 2025 11:46:45 -0300 Subject: [PATCH 56/92] fix --- crates/l2/prover/src/guest_program/build.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index 7342186ce6e..fb0497e1ac7 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -110,7 +110,7 @@ fn build_zisk_program() { build_command .env("RUSTC", rustc_path("zisk")) .env_remove("RUSTFLAGS") - .env_remove("CARGO_ENCODED_RUSTFLAGS"); + .env_remove("CARGO_ENCODED_RUSTFLAGS") .args([ "+zisk", "build", @@ -124,7 +124,7 @@ fn build_zisk_program() { setup_command .env("RUSTC", rustc_path("zisk")) .env_remove("RUSTFLAGS") - .env_remove("CARGO_ENCODED_RUSTFLAGS"); + .env_remove("CARGO_ENCODED_RUSTFLAGS") .args([ "rom-setup", "-e", From 8898620862edb3ddbe289b371795e9dc03138685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 19 Nov 2025 13:19:48 -0300 Subject: [PATCH 57/92] Revert "remove config.toml" This reverts commit 3ab5ee72a0d54d7d77fd65f1936943801beaa939. --- .cargo/config.toml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 00000000000..46bf38f6d5f --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,9 @@ +[target.x86_64-unknown-linux-gnu] +rustflags = [ + "-Ctarget-cpu=x86-64-v3", + "-Ctarget-feature=+avx2,+sse2,+ssse3,+sse4.1,+sse4.2,+bmi1,+lzcnt,+pclmulqdq", +] + +[target.riscv64ima-zisk-zkvm-elf] +rustflags = [] + From 72db3bbd024938561b6df6d3f55fc56f8961e795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 19 Nov 2025 13:20:13 -0300 Subject: [PATCH 58/92] remove override --- .cargo/config.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 46bf38f6d5f..77a606c06be 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -4,6 +4,3 @@ rustflags = [ "-Ctarget-feature=+avx2,+sse2,+ssse3,+sse4.1,+sse4.2,+bmi1,+lzcnt,+pclmulqdq", ] -[target.riscv64ima-zisk-zkvm-elf] -rustflags = [] - From 6b5ab111b07845ce6dd0ddc4325879d1da0d3df1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 19 Nov 2025 18:12:03 -0300 Subject: [PATCH 59/92] clean all code --- Cargo.toml | 2 +- cmd/ethrex/Cargo.toml | 2 +- cmd/ethrex/l2/deployer.rs | 4 ++-- crates/blockchain/Cargo.toml | 2 +- crates/blockchain/error.rs | 2 +- crates/common/Cargo.toml | 9 +++++---- crates/common/common.rs | 2 +- crates/common/errors.rs | 2 +- crates/common/types/block.rs | 6 +++--- crates/common/types/transaction.rs | 10 +++++----- crates/l2/common/Cargo.toml | 11 ++++------- crates/l2/networking/rpc/utils.rs | 4 ++-- crates/l2/prover/Cargo.toml | 2 +- crates/l2/prover/src/guest_program/Cargo.toml | 3 +-- crates/l2/prover/src/guest_program/build.rs | 6 +++--- .../prover/src/guest_program/src/execution.rs | 19 ++++++++++--------- crates/l2/prover/src/guest_program/src/lib.rs | 12 ++++-------- crates/l2/tests/tests.rs | 10 ++++++---- crates/networking/rpc/utils.rs | 4 ++-- crates/vm/levm/Cargo.toml | 11 +++++------ crates/vm/levm/src/constants.rs | 7 ++++--- crates/vm/levm/src/utils.rs | 4 +++- 22 files changed, 66 insertions(+), 68 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 274f2e7175f..47596f10851 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,7 +55,7 @@ ethrex-config = { path = "./crates/common/config" } ethrex-p2p = { path = "./crates/networking/p2p" } ethrex-rpc = { path = "./crates/networking/rpc" } ethrex-storage = { path = "./crates/storage" } -ethrex-vm = { path = "./crates/vm", default-features = false } +ethrex-vm = { path = "./crates/vm" } ethrex-levm = { path = "./crates/vm/levm" } ethrex-trie = { path = "./crates/common/trie" } ethrex-rlp = { path = "./crates/common/rlp" } diff --git a/cmd/ethrex/Cargo.toml b/cmd/ethrex/Cargo.toml index 90632a12e87..4d9684b4e2a 100644 --- a/cmd/ethrex/Cargo.toml +++ b/cmd/ethrex/Cargo.toml @@ -80,8 +80,8 @@ debug = ["ethrex-vm/debug"] default = ["rocksdb", "c-kzg", "secp256k1", "metrics", "jemalloc", "dev"] dev = ["dep:ethrex-dev"] secp256k1 = [ - "ethrex-common/secp256k1", "ethrex-vm/secp256k1", + "ethrex-common/secp256k1", "ethrex-blockchain/secp256k1", ] c-kzg = [ diff --git a/cmd/ethrex/l2/deployer.rs b/cmd/ethrex/l2/deployer.rs index 8bf30c6e4e2..022ccb8f7ae 100644 --- a/cmd/ethrex/l2/deployer.rs +++ b/cmd/ethrex/l2/deployer.rs @@ -842,8 +842,8 @@ async fn initialize_contracts( info!("Risc0 vk read"); - let deployer_address = - get_address_from_secret_key(&opts.private_key).map_err(DeployerError::InternalError)?; + let deployer_address = get_address_from_secret_key(&opts.private_key.secret_bytes()) + .map_err(DeployerError::InternalError)?; info!("Initializing OnChainProposer"); diff --git a/crates/blockchain/Cargo.toml b/crates/blockchain/Cargo.toml index a37f167e689..1124a2ee5d7 100644 --- a/crates/blockchain/Cargo.toml +++ b/crates/blockchain/Cargo.toml @@ -13,7 +13,7 @@ ethrex-common = { workspace = true, default-features = false } ethrex-crypto.workspace = true ethrex-storage.workspace = true ethrex-trie.workspace = true -ethrex-vm = { workspace = true, default-features = false } +ethrex-vm.workspace = true ethrex-metrics = { path = "./metrics", default-features = false } thiserror.workspace = true diff --git a/crates/blockchain/error.rs b/crates/blockchain/error.rs index ec623923156..03eaf89b294 100644 --- a/crates/blockchain/error.rs +++ b/crates/blockchain/error.rs @@ -139,7 +139,7 @@ pub enum MempoolError { #[error("Requested pooled transaction was not received")] RequestedPooledTxNotFound, #[error("Transaction sender is invalid {0}")] - InvalidTxSender(#[from] ethrex_common::Error), + InvalidTxSender(#[from] ethrex_common::EcdsaError), #[error("Attempted to replace a pooled transaction with an underpriced transaction")] UnderpricedReplacement, } diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index 68542e821e0..87f02bb2d2d 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -31,9 +31,9 @@ rayon.workspace = true url.workspace = true rkyv.workspace = true rustc-hash.workspace = true +k256.workspace = true secp256k1 = { workspace = true, optional = true } -k256 = { workspace = true, optional = true } [dev-dependencies] hex-literal.workspace = true @@ -42,9 +42,10 @@ hex-literal.workspace = true default = ["secp256k1"] c-kzg = ["ethrex-crypto/c-kzg"] secp256k1 = ["dep:secp256k1"] -risc0 = ["ethrex-crypto/risc0", "dep:k256"] -zisk = ["dep:k256"] -sp1 = ["dep:k256"] + +risc0 = ["ethrex-crypto/risc0"] +sp1 = [] +zisk = [] [lib] path = "./common.rs" diff --git a/crates/common/common.rs b/crates/common/common.rs index 9d6b550f293..fa527eb1975 100644 --- a/crates/common/common.rs +++ b/crates/common/common.rs @@ -13,4 +13,4 @@ pub mod rkyv_utils; pub mod tracing; pub mod utils; -pub use errors::Error; +pub use errors::EcdsaError; diff --git a/crates/common/errors.rs b/crates/common/errors.rs index e3a9abad106..c49bb503db4 100644 --- a/crates/common/errors.rs +++ b/crates/common/errors.rs @@ -1,5 +1,5 @@ #[derive(thiserror::Error, Debug)] -pub enum Error { +pub enum EcdsaError { #[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] #[error("secp256k1 error: {0}")] Secp256k1(#[from] secp256k1::Error), diff --git a/crates/common/types/block.rs b/crates/common/types/block.rs index 2ffa7ceb49b..7d2c79eade3 100644 --- a/crates/common/types/block.rs +++ b/crates/common/types/block.rs @@ -2,7 +2,7 @@ use super::{ BASE_FEE_MAX_CHANGE_DENOMINATOR, ChainConfig, Fork, ForkBlobSchedule, GAS_LIMIT_ADJUSTMENT_FACTOR, GAS_LIMIT_MINIMUM, INITIAL_BASE_FEE, }; -use crate::errors::Error; +use crate::errors::EcdsaError; use crate::utils::keccak; use crate::{ Address, H256, U256, @@ -251,13 +251,13 @@ impl BlockBody { } } - pub fn get_transactions_with_sender(&self) -> Result, Error> { + pub fn get_transactions_with_sender(&self) -> Result, EcdsaError> { // Recovering addresses is computationally expensive. // Computing them in parallel greatly reduces execution time. self.transactions .par_iter() .map(|tx| Ok((tx, tx.sender()?))) - .collect::, Error>>() + .collect::, EcdsaError>>() } } diff --git a/crates/common/types/transaction.rs b/crates/common/types/transaction.rs index a1c44309614..78e19a05524 100644 --- a/crates/common/types/transaction.rs +++ b/crates/common/types/transaction.rs @@ -1,6 +1,6 @@ use std::{cmp::min, fmt::Display}; -use crate::{errors::Error, utils::keccak}; +use crate::{errors::EcdsaError, utils::keccak}; use bytes::Bytes; use ethereum_types::{Address, H256, Signature, U256}; use ethrex_crypto::keccak::keccak_hash; @@ -1046,7 +1046,7 @@ impl RLPDecode for FeeTokenTransaction { } impl Transaction { - pub fn sender(&self) -> Result { + pub fn sender(&self) -> Result { match self { Transaction::LegacyTransaction(tx) => { let signature_y_parity = match self.chain_id() { @@ -1410,10 +1410,10 @@ impl Transaction { pub fn recover_address_from_message( signature: Signature, message: &Bytes, -) -> Result { +) -> Result { // Hash message let payload = keccak(message); - Ok(recover_address(signature, payload)?) + recover_address(signature, payload).map_err(EcdsaError::from) } #[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] @@ -1422,7 +1422,7 @@ pub fn recover_address(signature: Signature, payload: H256) -> Result for RpcErr { } } -impl From for RpcErr { - fn from(error: ethrex_common::Error) -> Self { +impl From for RpcErr { + fn from(error: ethrex_common::EcdsaError) -> Self { Self::L1RpcErr(error.into()) } } diff --git a/crates/l2/prover/Cargo.toml b/crates/l2/prover/Cargo.toml index 52cce67b19a..c67efd64d38 100644 --- a/crates/l2/prover/Cargo.toml +++ b/crates/l2/prover/Cargo.toml @@ -62,7 +62,7 @@ risc0 = [ "ethrex-common/risc0", ] sp1 = ["guest_program/sp1", "dep:sp1-sdk", "dep:sp1-prover"] -zisk = ["guest_program/zisk-guest"] +zisk = ["guest_program/zisk"] profiling = ["sp1-sdk?/profiling"] gpu = ["risc0-zkvm?/cuda", "sp1-sdk?/cuda"] diff --git a/crates/l2/prover/src/guest_program/Cargo.toml b/crates/l2/prover/src/guest_program/Cargo.toml index 158232c3105..87e4446792c 100644 --- a/crates/l2/prover/src/guest_program/Cargo.toml +++ b/crates/l2/prover/src/guest_program/Cargo.toml @@ -36,7 +36,6 @@ methods = ["src/risc0"] default = ["secp256k1"] risc0 = ["dep:risc0-build", "dep:risc0-zkvm"] sp1 = ["dep:sp1-build", "dep:sp1-sdk"] -zisk-guest = [] zisk = [ "ethrex-common/zisk", "ethrex-blockchain/zisk", @@ -52,7 +51,7 @@ secp256k1 = [ "ethrex-l2-common/secp256k1", ] -# When this feature is enabled, the cycles used in the code inside the +# When this feature is enabled, the cycles used in the code inside the # report_cycles! macro will be reported to stdout when running inside SP1 zkVM. sp1-cycles = [] diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index fb0497e1ac7..b8bef81e4c7 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -7,7 +7,7 @@ fn main() { #[cfg(all(not(clippy), feature = "sp1"))] build_sp1_program(); - #[cfg(all(not(clippy), feature = "zisk-guest"))] + #[cfg(all(not(clippy), feature = "zisk"))] build_zisk_program(); } @@ -102,7 +102,7 @@ fn build_sp1_program() { .expect("could not write SP1 vk-u32 to file"); } -#[cfg(all(not(clippy), feature = "zisk-guest"))] +#[cfg(all(not(clippy), feature = "zisk"))] fn build_zisk_program() { let mut build_command = std::process::Command::new("cargo"); let mut setup_command = std::process::Command::new("cargo-zisk"); @@ -161,7 +161,7 @@ fn build_zisk_program() { } } -#[cfg(all(not(clippy), feature = "zisk-guest"))] +#[cfg(all(not(clippy), feature = "zisk"))] /// Returns the path to `rustc` executable of the given toolchain. /// /// Taken from https://github.com/eth-act/ere/blob/master/crates/compile-utils/src/rust.rs#L166 diff --git a/crates/l2/prover/src/guest_program/src/execution.rs b/crates/l2/prover/src/guest_program/src/execution.rs index 05d840d3e9a..fb65d115124 100644 --- a/crates/l2/prover/src/guest_program/src/execution.rs +++ b/crates/l2/prover/src/guest_program/src/execution.rs @@ -15,13 +15,17 @@ use ethrex_common::types::{ }; use ethrex_common::{Address, U256}; use ethrex_common::{H256, types::Block}; -#[cfg(feature = "l2")] -use ethrex_l2_common::l1_messages::L1Message; use ethrex_l2_common::privileged_transactions::get_block_privileged_transactions; use ethrex_rlp::encode::RLPEncode; use ethrex_vm::{Evm, EvmError, GuestProgramStateWrapper, VmDatabase}; +<<<<<<< Updated upstream use std::collections::{BTreeMap, HashMap}; +======= +use std::collections::HashMap; +>>>>>>> Stashed changes +#[cfg(not(feature = "l2"))] +use ethrex_common::types::ELASTICITY_MULTIPLIER; #[cfg(feature = "l2")] use ethrex_common::types::{ BlobsBundleError, Commitment, PrivilegedL2Transaction, Proof, Receipt, blob_from_bytes, @@ -29,10 +33,8 @@ use ethrex_common::types::{ }; #[cfg(feature = "l2")] use ethrex_l2_common::{ - l1_messages::get_block_l1_messages, - privileged_transactions::{ - PrivilegedTransactionError, compute_privileged_transactions_hash, - }, + l1_messages::{L1Message, get_block_l1_messages}, + privileged_transactions::{PrivilegedTransactionError, compute_privileged_transactions_hash}, }; #[derive(Debug, thiserror::Error)] @@ -333,7 +335,6 @@ pub fn stateless_validation_l2( }) } -// receipts, account_updates, and last_block_header are only used in L2 #[cfg_attr(not(feature = "l2"), expect(dead_code))] struct StatelessResult { receipts: Vec>, @@ -395,7 +396,7 @@ fn execute_stateless( let mut acc_receipts = Vec::new(); let mut non_privileged_count = 0; - for (_i, block) in blocks.iter().enumerate() { + for (i, block) in blocks.iter().enumerate() { // Validate the block validate_block( block, @@ -410,7 +411,7 @@ fn execute_stateless( let mut vm = Evm::new_for_l2( wrapped_db.clone(), fee_configs - .get(_i) + .get(i) .cloned() .ok_or_else(|| StatelessExecutionError::FeeConfigNotFound)?, )?; diff --git a/crates/l2/prover/src/guest_program/src/lib.rs b/crates/l2/prover/src/guest_program/src/lib.rs index fbd07a71feb..4716a66c394 100644 --- a/crates/l2/prover/src/guest_program/src/lib.rs +++ b/crates/l2/prover/src/guest_program/src/lib.rs @@ -3,26 +3,22 @@ pub mod input; pub mod methods; pub mod output; +// When running clippy, the ELFs are not built, so we define them empty. + #[cfg(all(not(clippy), feature = "sp1"))] pub static ZKVM_SP1_PROGRAM_ELF: &[u8] = include_bytes!("./sp1/out/riscv32im-succinct-zkvm-elf"); -// If we're running clippy, the file isn't generated. -// To avoid compilation errors, we override it with an empty slice. #[cfg(any(clippy, not(feature = "sp1")))] pub const ZKVM_SP1_PROGRAM_ELF: &[u8] = &[]; #[cfg(all(not(clippy), feature = "risc0"))] pub static ZKVM_RISC0_PROGRAM_VK: &str = include_str!(concat!("./risc0/out/riscv32im-risc0-vk")); -// If we're running clippy, the file isn't generated. -// To avoid compilation errors, we override it with an empty slice. #[cfg(any(clippy, not(feature = "risc0")))] pub const ZKVM_RISC0_PROGRAM_VK: &str = ""; -#[cfg(all(not(clippy), feature = "zisk-guest"))] +#[cfg(all(not(clippy), feature = "zisk"))] pub static ZKVM_ZISK_PROGRAM_ELF: &[u8] = include_bytes!("./zisk/target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program"); -// If we're running clippy, the file isn't generated. -// To avoid compilation errors, we override it with an empty slice. -#[cfg(any(clippy, not(feature = "zisk-guest")))] +#[cfg(any(clippy, not(feature = "zisk")))] pub const ZKVM_ZISK_PROGRAM_ELF: &[u8] = &[]; /// Report cycles used in a code block when running inside SP1 zkVM. diff --git a/crates/l2/tests/tests.rs b/crates/l2/tests/tests.rs index 28e76574fdc..d840d1d9706 100644 --- a/crates/l2/tests/tests.rs +++ b/crates/l2/tests/tests.rs @@ -909,8 +909,8 @@ async fn test_forced_withdrawal( rich_wallet_private_key: SecretKey, ) -> Result { println!("forced_withdrawal: Testing forced withdrawal"); - let rich_address = - get_address_from_secret_key(&rich_wallet_private_key).expect("Failed to get address"); + let rich_address = get_address_from_secret_key(&rich_wallet_private_key.secret_bytes()) + .expect("Failed to get address"); let l1_initial_balance = l1_client .get_balance(rich_address, BlockIdentifier::Tag(BlockTag::Latest)) .await?; @@ -2009,7 +2009,8 @@ async fn test_fee_token( recipient_private_key: SecretKey, ) -> Result { let test = "test_fee_token"; - let rich_wallet_address = get_address_from_secret_key(&rich_wallet_private_key).unwrap(); + let rich_wallet_address = + get_address_from_secret_key(&rich_wallet_private_key.secret_bytes()).unwrap(); let l1_client = l1_client(); println!("{test}: Rich wallet address: {rich_wallet_address:#x}"); @@ -2084,7 +2085,8 @@ async fn test_fee_token( println!("{test}: Sender balance before transfer: {sender_balance_before_transfer}"); println!("{test}: Sender fee balance before transfer: {sender_token_balance_before_transfer}"); - let recipient_address = get_address_from_secret_key(&recipient_private_key).unwrap(); + let recipient_address = + get_address_from_secret_key(&recipient_private_key.secret_bytes()).unwrap(); let recipient_balance_before_transfer = l2_client .get_balance(recipient_address, BlockIdentifier::Tag(BlockTag::Latest)) .await?; diff --git a/crates/networking/rpc/utils.rs b/crates/networking/rpc/utils.rs index ab362232459..726a03c7cc1 100644 --- a/crates/networking/rpc/utils.rs +++ b/crates/networking/rpc/utils.rs @@ -161,8 +161,8 @@ impl From for RpcErr { } } -impl From for RpcErr { - fn from(err: ethrex_common::Error) -> Self { +impl From for RpcErr { + fn from(err: ethrex_common::EcdsaError) -> Self { Self::Internal(format!("Cryptography error: {err}")) } } diff --git a/crates/vm/levm/Cargo.toml b/crates/vm/levm/Cargo.toml index 8c0ce9df318..0392ca7cd98 100644 --- a/crates/vm/levm/Cargo.toml +++ b/crates/vm/levm/Cargo.toml @@ -40,10 +40,9 @@ ark-bn254 = "0.5.0" ark-ec = "0.5.0" ark-ff = { version = "0.5.0", features = ["asm"] } strum = { version = "0.27.1", features = ["derive"] } +k256.workspace = true substrate-bn = { version = "0.6.0", optional = true } - secp256k1 = { workspace = true, optional = true } -k256 = { workspace = true, optional = true } bitvec = { version = "1.0.1", features = ["alloc"] } @@ -55,14 +54,14 @@ colored = "2.1.0" spinoff = "0.8.0" [features] -default = ["secp256k1", "dep:k256"] +default = ["secp256k1"] secp256k1 = ["dep:secp256k1"] c-kzg = ["ethrex-common/c-kzg", "ethrex-crypto/c-kzg"] ethereum_foundation_tests = [] debug = [] -sp1 = ["dep:substrate-bn", "dep:k256"] -risc0 = ["dep:substrate-bn", "dep:k256", "c-kzg"] -zisk = ["dep:substrate-bn", "dep:k256"] +sp1 = ["dep:substrate-bn"] +risc0 = ["dep:substrate-bn", "c-kzg"] +zisk = ["dep:substrate-bn"] [lints.rust] unsafe_code = "warn" diff --git a/crates/vm/levm/src/constants.rs b/crates/vm/levm/src/constants.rs index 037f3abfadc..7250bf4a8f9 100644 --- a/crates/vm/levm/src/constants.rs +++ b/crates/vm/levm/src/constants.rs @@ -4,6 +4,7 @@ use p256::{ FieldElement as P256FieldElement, NistP256, elliptic_curve::{Curve, bigint::U256 as P256Uint, ff::PrimeField}, }; +use std::sync::LazyLock; pub const WORD_SIZE_IN_BYTES_USIZE: usize = 32; pub const WORD_SIZE_IN_BYTES_U64: u64 = 32; @@ -71,10 +72,10 @@ pub const VALID_BLOB_PREFIXES: [u8; 2] = [0x01, 0x02]; pub const LAST_AVAILABLE_BLOCK_LIMIT: U256 = U256([256, 0, 0, 0]); // EIP7702 - EOA Load Code -pub static SECP256K1_ORDER: std::sync::LazyLock = - std::sync::LazyLock::new(|| U256::from_big_endian(&k256::Secp256k1::ORDER.to_be_bytes())); +pub static SECP256K1_ORDER: LazyLock = + LazyLock::new(|| U256::from_big_endian(&k256::Secp256k1::ORDER.to_be_bytes())); pub static SECP256K1_ORDER_OVER2: std::sync::LazyLock = - std::sync::LazyLock::new(|| *SECP256K1_ORDER / U256::from(2)); + LazyLock::new(|| *SECP256K1_ORDER / U256::from(2)); pub const MAGIC: u8 = 0x05; pub const SET_CODE_DELEGATION_BYTES: [u8; 3] = [0xef, 0x01, 0x00]; // Set the code of authority to be 0xef0100 || address. This is a delegation designation. diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index 8591629ea86..10d8c6a0954 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -292,7 +292,9 @@ pub fn eip7702_recover_address( return Ok(None); }; - let Ok(authority) = k256::ecdsa::VerifyingKey::recover_from_digest(digest, &signature, recovery_id) else { + let Ok(authority) = + k256::ecdsa::VerifyingKey::recover_from_digest(digest, &signature, recovery_id) + else { return Ok(None); }; From 58f244d7347fbd95c39e0e005459cc73095a2421 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 19 Nov 2025 18:12:31 -0300 Subject: [PATCH 60/92] fix conflict --- crates/l2/prover/src/guest_program/src/execution.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/crates/l2/prover/src/guest_program/src/execution.rs b/crates/l2/prover/src/guest_program/src/execution.rs index fb65d115124..1a09989f06e 100644 --- a/crates/l2/prover/src/guest_program/src/execution.rs +++ b/crates/l2/prover/src/guest_program/src/execution.rs @@ -18,11 +18,7 @@ use ethrex_common::{H256, types::Block}; use ethrex_l2_common::privileged_transactions::get_block_privileged_transactions; use ethrex_rlp::encode::RLPEncode; use ethrex_vm::{Evm, EvmError, GuestProgramStateWrapper, VmDatabase}; -<<<<<<< Updated upstream use std::collections::{BTreeMap, HashMap}; -======= -use std::collections::HashMap; ->>>>>>> Stashed changes #[cfg(not(feature = "l2"))] use ethrex_common::types::ELASTICITY_MULTIPLIER; From 603bc6d7b8437d807b0c60dfcdcf43ec118bd702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Wed, 19 Nov 2025 18:44:02 -0300 Subject: [PATCH 61/92] fix secp256k1 feature --- Cargo.toml | 2 +- .../src/guest_program/src/zisk/Cargo.lock | 23 ++++++++++++++++++- crates/vm/levm/src/precompiles.rs | 14 +++++++++-- crates/vm/levm/src/utils.rs | 16 ++++++++++--- 4 files changed, 48 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 47596f10851..274f2e7175f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,7 +55,7 @@ ethrex-config = { path = "./crates/common/config" } ethrex-p2p = { path = "./crates/networking/p2p" } ethrex-rpc = { path = "./crates/networking/rpc" } ethrex-storage = { path = "./crates/storage" } -ethrex-vm = { path = "./crates/vm" } +ethrex-vm = { path = "./crates/vm", default-features = false } ethrex-levm = { path = "./crates/vm/levm" } ethrex-trie = { path = "./crates/common/trie" } ethrex-rlp = { path = "./crates/common/rlp" } diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock index 4ed6c19d781..2bf0210b560 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock @@ -1012,6 +1012,7 @@ dependencies = [ "ethrex-rlp", "ethrex-trie", "hex", + "lru", "qfilter", "rayon", "rustc-hash", @@ -1141,6 +1142,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "form_urlencoded" version = "1.2.2" @@ -1274,7 +1281,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", - "foldhash", + "foldhash 0.1.5", ] [[package]] @@ -1282,6 +1289,11 @@ name = "hashbrown" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", +] [[package]] name = "heck" @@ -1662,6 +1674,15 @@ version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +[[package]] +name = "lru" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f" +dependencies = [ + "hashbrown 0.16.0", +] + [[package]] name = "malachite" version = "0.6.1" diff --git a/crates/vm/levm/src/precompiles.rs b/crates/vm/levm/src/precompiles.rs index 495c402fd73..fb667addeee 100644 --- a/crates/vm/levm/src/precompiles.rs +++ b/crates/vm/levm/src/precompiles.rs @@ -374,7 +374,12 @@ pub(crate) fn fill_with_zeros(calldata: &Bytes, target_len: usize) -> Bytes { padded_calldata.into() } -#[cfg(all(not(feature = "sp1"), not(feature = "risc0"), not(feature = "zisk")))] +#[cfg(all( + not(feature = "sp1"), + not(feature = "risc0"), + not(feature = "zisk"), + feature = "secp256k1" +))] pub fn ecrecover(calldata: &Bytes, gas_remaining: &mut u64, _fork: Fork) -> Result { use crate::gas_cost::ECRECOVER_COST; @@ -440,7 +445,12 @@ pub fn ecrecover(calldata: &Bytes, gas_remaining: &mut u64, _fork: Fork) -> Resu /// [64..128): r||s (64 bytes) /// /// Returns the recovered address. -#[cfg(any(feature = "sp1", feature = "risc0", feature = "zisk"))] +#[cfg(any( + feature = "sp1", + feature = "risc0", + feature = "zisk", + not(feature = "secp256k1"), +))] pub fn ecrecover(calldata: &Bytes, gas_remaining: &mut u64, _fork: Fork) -> Result { use ethrex_common::utils::keccak; use k256::ecdsa::{RecoveryId, Signature, VerifyingKey}; diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index 10d8c6a0954..68679fd901f 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -23,7 +23,6 @@ use ethrex_common::{ utils::{keccak, u256_to_big_endian}, }; use ethrex_common::{types::TxKind, utils::u256_from_big_endian_const}; -use ethrex_crypto::keccak::keccak_hash; use ethrex_rlp; use std::collections::HashMap; pub type Storage = HashMap; @@ -252,7 +251,12 @@ pub fn get_authorized_address_from_code(code: &Bytes) -> Result Result, VMError> { @@ -312,10 +316,16 @@ pub fn eip7702_recover_address( Ok(Some(Address::from_slice(&authority_address_bytes))) } -#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] +#[cfg(all( + not(feature = "zisk"), + not(feature = "risc0"), + not(feature = "sp1"), + feature = "secp256k1" +))] pub fn eip7702_recover_address( auth_tuple: &AuthorizationTuple, ) -> Result, VMError> { + use ethrex_crypto::keccak::keccak_hash; use ethrex_rlp::encode::RLPEncode; if auth_tuple.s_signature > *SECP256K1_ORDER_OVER2 || U256::zero() >= auth_tuple.s_signature { From 3116fd9824c07ecff1206c3eb5e1787a0de2cc27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 20 Nov 2025 11:49:55 -0300 Subject: [PATCH 62/92] fix recursive compilation --- crates/l2/common/src/utils.rs | 14 +- .../src/guest_program/src/sp1/Cargo.lock | 2 + .../src/guest_program/src/zisk/Cargo.lock | 209 ++++++------------ .../src/guest_program/src/zisk/Cargo.toml | 14 +- 4 files changed, 94 insertions(+), 145 deletions(-) diff --git a/crates/l2/common/src/utils.rs b/crates/l2/common/src/utils.rs index b8940a70de5..a7916331de7 100644 --- a/crates/l2/common/src/utils.rs +++ b/crates/l2/common/src/utils.rs @@ -1,4 +1,9 @@ -#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] +#[cfg(all( + not(feature = "zisk"), + not(feature = "risc0"), + not(feature = "sp1"), + feature = "secp256k1" +))] pub fn get_address_from_secret_key( secret_key_bytes: &[u8], ) -> Result { @@ -21,7 +26,12 @@ pub fn get_address_from_secret_key( Ok(ethrex_common::Address::from(address_bytes)) } -#[cfg(any(feature = "zisk", feature = "risc0", feature = "sp1"))] +#[cfg(any( + feature = "zisk", + feature = "risc0", + feature = "sp1", + not(feature = "secp256k1") +))] pub fn get_address_from_secret_key( secret_key_bytes: &[u8], ) -> Result { diff --git a/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock b/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock index 4e065f12684..3d7e7ccd713 100644 --- a/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock @@ -996,6 +996,7 @@ dependencies = [ "ethrex-trie", "ethrex-vm", "hex", + "k256", "lambdaworks-crypto", "rkyv", "secp256k1", @@ -1031,6 +1032,7 @@ dependencies = [ "serde", "serde_json", "sha2", + "sha3", "strum", "substrate-bn", "thiserror", diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock index 2bf0210b560..36be16b7eb4 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock @@ -81,22 +81,22 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys", ] [[package]] name = "anstyle-wincon" -version = "3.0.10" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys", ] [[package]] @@ -164,7 +164,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -177,7 +177,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -216,7 +216,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -249,7 +249,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -379,7 +379,7 @@ checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -396,9 +396,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" dependencies = [ "serde", ] @@ -411,9 +411,9 @@ checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" [[package]] name = "cc" -version = "1.2.44" +version = "1.2.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" +checksum = "b97463e1064cb1b1c1384ad0a0b9c8abd0988e2a91f52606c80ef14aadb63e36" dependencies = [ "find-msvc-tools", "shlex", @@ -439,9 +439,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.51" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" +checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" dependencies = [ "clap_builder", "clap_derive", @@ -449,9 +449,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.51" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" +checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" dependencies = [ "anstream", "anstyle", @@ -468,7 +468,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -653,7 +653,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -664,7 +664,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -718,7 +718,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", "unicode-xid", ] @@ -742,7 +742,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -774,7 +774,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -820,7 +820,7 @@ checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -1114,9 +1114,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" [[package]] name = "fixed-hash" @@ -1177,7 +1177,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -1483,7 +1483,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -1761,7 +1761,7 @@ checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -1770,7 +1770,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -1988,7 +1988,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -2115,7 +2115,7 @@ checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -2129,9 +2129,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.41" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] @@ -2218,7 +2218,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -2293,7 +2293,7 @@ checksum = "bd83f5f173ff41e00337d97f6572e416d022ef8a19f371817259ae960324c482" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -2362,9 +2362,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.0.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1317c3bf3e7df961da95b0a56a172a02abead31276215a0497241a7624b487ce" +checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" dependencies = [ "dyn-clone", "ref-cast", @@ -2422,7 +2422,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -2440,9 +2440,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.15.1" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" +checksum = "10574371d41b0d9b2cff89418eda27da52bcaff2cc8741db26382a77c29131f1" dependencies = [ "base64", "chrono", @@ -2450,7 +2450,7 @@ dependencies = [ "indexmap 1.9.3", "indexmap 2.12.0", "schemars 0.9.0", - "schemars 1.0.5", + "schemars 1.1.0", "serde_core", "serde_json", "serde_with_macros", @@ -2459,14 +2459,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.15.1" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" +checksum = "08a72d8216842fdd57820dc78d840bef99248e35fb2554ff923319e60f2d686b" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -2540,9 +2540,9 @@ checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] name = "sp1-lib" -version = "5.2.2" +version = "5.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fce8ad0f153443d09d398eccb650a0b2dcbf829470e394e4bf60ec4379c7af93" +checksum = "eb1a9935d58cb1dcd757a1b10d727090f5b718f1f03b512d48f0c1952e6ead00" dependencies = [ "bincode", "serde", @@ -2551,9 +2551,9 @@ dependencies = [ [[package]] name = "sp1-primitives" -version = "5.2.2" +version = "5.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0244dee3a7a0f88cf71c3edf518f4fc97794ae870a107cbe7c810ac3fbf879cb" +checksum = "a7d2a6187e394c30097ea7a975a4832f172918690dc89a979f0fad67422d3a8b" dependencies = [ "bincode", "blake3", @@ -2635,7 +2635,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -2670,9 +2670,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.108" +version = "2.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" dependencies = [ "proc-macro2", "quote", @@ -2687,7 +2687,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -2713,7 +2713,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -2863,7 +2863,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -3035,7 +3035,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", "wasm-bindgen-shared", ] @@ -3064,7 +3064,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -3088,7 +3088,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -3099,7 +3099,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -3126,15 +3126,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -3144,71 +3135,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - [[package]] name = "winnow" version = "0.7.13" @@ -3258,7 +3184,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", "synstructure", ] @@ -3279,7 +3205,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -3299,7 +3225,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", "synstructure", ] @@ -3320,7 +3246,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -3353,7 +3279,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.110", ] [[package]] @@ -3376,6 +3302,9 @@ dependencies = [ name = "zkvm-zisk-program" version = "0.1.0" dependencies = [ + "ethrex-blockchain", + "ethrex-common", + "ethrex-vm", "guest_program", "rkyv", "sha2", diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml index 9f8059db5e4..7ff6a966b69 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml @@ -7,13 +7,21 @@ edition = "2024" [dependencies] ziskos = { git = "https://github.com/0xPolygonHermez/zisk.git", tag = "v0.13.0" } -guest_program = { path = "../../", default-features = false, features = [ - "zisk", -] } sha2 = "0.10.9" rkyv = { version = "0.8.10", features = ["std", "unaligned"] } +guest_program = { path = "../../", default-features = false } +ethrex-vm = { path = "../../../../../../vm", default-features = false, features = [ + "zisk", +] } +ethrex-common = { path = "../../../../../../common", default-features = false, features = [ + "zisk", +] } +ethrex-blockchain = { path = "../../../../../../blockchain", default-features = false, features = [ + "zisk", +] } + [patch.crates-io] sha2 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", branch = "zisk-patch-sha2/v0.10.9" } sha3 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", branch = "zisk-patch-sha3/v0.10.8" } From db7ef0849a60cd7b7ae752a2570a9b7851ff7433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 20 Nov 2025 13:18:25 -0300 Subject: [PATCH 63/92] temp: verify proofs after proving --- crates/l2/prover/src/backend/zisk.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index ab5424e0154..93ce2760571 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -54,6 +54,7 @@ pub fn prove( "--output-dir", OUTPUT_DIR_PATH, "--aggregation", + "--verify-proofs", ]; let conditional_groth16_arg = if let ProofFormat::Groth16 = format { vec!["--final-snark"] From 5af5ff63b872a876fef80b39b6dc20a19dc6e434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 20 Nov 2025 13:50:09 -0300 Subject: [PATCH 64/92] Revert "temp: verify proofs after proving" This reverts commit db7ef0849a60cd7b7ae752a2570a9b7851ff7433. --- crates/l2/prover/src/backend/zisk.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 93ce2760571..ab5424e0154 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -54,7 +54,6 @@ pub fn prove( "--output-dir", OUTPUT_DIR_PATH, "--aggregation", - "--verify-proofs", ]; let conditional_groth16_arg = if let ProofFormat::Groth16 = format { vec!["--final-snark"] From 50937ebdab91d6f24d2e1e48cdacca897e00d8d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 20 Nov 2025 13:54:53 -0300 Subject: [PATCH 65/92] Update crates/l2/prover/src/backend/zisk.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- crates/l2/prover/src/backend/zisk.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index ab5424e0154..49c5140dd3e 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -84,14 +84,14 @@ pub fn prove( } pub fn verify(_output: &ProgramOutput) -> Result<(), Box> { - Err("verify is not implemented for ZisK backend".into()) + unimplemented!("verify is not implemented for ZisK backend") } pub fn to_batch_proof( proof: ProveOutput, format: ProofFormat, ) -> Result> { - Err("to_batch_proof is not implemented for ZisK backend".into()) + unimplemented!("to_batch_proof is not implemented for ZisK backend") } fn write_elf_file() -> Result<(), Box> { From 4d1f64dc03a42718f5645925d10ce8bedae1fff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 20 Nov 2025 13:55:03 -0300 Subject: [PATCH 66/92] Update crates/l2/prover/src/backend/zisk.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- crates/l2/prover/src/backend/zisk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index 49c5140dd3e..e8a29a1424a 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -109,5 +109,5 @@ fn write_elf_file() -> Result<(), Box> { } } } - return Ok(()); + Ok(()) } From a1eebb0188bc7056648678041e3fc6c83a996d08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 20 Nov 2025 15:34:16 -0300 Subject: [PATCH 67/92] fix --- crates/l2/tee/quote-gen/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/tee/quote-gen/src/main.rs b/crates/l2/tee/quote-gen/src/main.rs index ece7155f3a6..34f2f95015d 100644 --- a/crates/l2/tee/quote-gen/src/main.rs +++ b/crates/l2/tee/quote-gen/src/main.rs @@ -44,7 +44,7 @@ fn calculate_transition(input: ProgramInput) -> Result, String> { } fn get_quote(private_key: &SecretKey) -> Result { - let address = get_address_from_secret_key(private_key) + let address = get_address_from_secret_key(private_key.secret_bytes()) .map_err(|e| format!("Error deriving address: {e}"))?; let mut digest_slice = [0u8; 64]; digest_slice From caa4055c490cede775ce28664e7578513077d81f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Thu, 20 Nov 2025 16:07:47 -0300 Subject: [PATCH 68/92] fix --- crates/l2/tee/quote-gen/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/tee/quote-gen/src/main.rs b/crates/l2/tee/quote-gen/src/main.rs index 34f2f95015d..8c9567d2134 100644 --- a/crates/l2/tee/quote-gen/src/main.rs +++ b/crates/l2/tee/quote-gen/src/main.rs @@ -44,7 +44,7 @@ fn calculate_transition(input: ProgramInput) -> Result, String> { } fn get_quote(private_key: &SecretKey) -> Result { - let address = get_address_from_secret_key(private_key.secret_bytes()) + let address = get_address_from_secret_key(&private_key.secret_bytes()) .map_err(|e| format!("Error deriving address: {e}"))?; let mut digest_slice = [0u8; 64]; digest_slice From a613937ccd5a54ae031e6978afd79abc8746674c Mon Sep 17 00:00:00 2001 From: Ivan Litteri <67517699+ilitteri@users.noreply.github.com> Date: Thu, 20 Nov 2025 16:11:39 -0300 Subject: [PATCH 69/92] chore(l2): bump ZisK dep and precompile patches to 0.14.0 (#5396) --- Makefile | 1 + .../src/guest_program/src/risc0/Cargo.lock | 1 + .../src/guest_program/src/zisk/Cargo.lock | 59 +++++++++++++++---- .../src/guest_program/src/zisk/Cargo.toml | 10 ++-- crates/l2/tee/quote-gen/Cargo.lock | 3 + 5 files changed, 57 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 94f186852b5..174e232a1d6 100644 --- a/Makefile +++ b/Makefile @@ -201,4 +201,5 @@ update-cargo-lock: ## 📦 Update Cargo.lock files cargo tree cargo tree --manifest-path crates/l2/prover/src/guest_program/src/sp1/Cargo.toml cargo tree --manifest-path crates/l2/prover/src/guest_program/src/risc0/Cargo.toml + cargo tree --manifest-path crates/l2/prover/src/guest_program/src/zisk/Cargo.toml cargo tree --manifest-path crates/l2/tee/quote-gen/Cargo.toml diff --git a/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock b/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock index 76c83b907f9..268a54c6f3c 100644 --- a/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock @@ -1241,6 +1241,7 @@ dependencies = [ "serde", "serde_json", "sha2", + "sha3", "strum", "substrate-bn", "thiserror", diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock index 36be16b7eb4..6ecb5fad784 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock @@ -285,6 +285,26 @@ dependencies = [ "serde", ] +[[package]] +name = "bincode" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" +dependencies = [ + "bincode_derive", + "serde", + "unty", +] + +[[package]] +name = "bincode_derive" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09" +dependencies = [ + "virtue", +] + [[package]] name = "bit-set" version = "0.8.0" @@ -1004,7 +1024,7 @@ version = "7.0.0" dependencies = [ "anyhow", "async-trait", - "bincode", + "bincode 1.3.3", "bytes", "ethereum-types", "ethrex-common", @@ -1056,7 +1076,7 @@ dependencies = [ name = "ethrex-vm" version = "7.0.0" dependencies = [ - "bincode", + "bincode 1.3.3", "bytes", "derive_more", "dyn-clone", @@ -1561,7 +1581,7 @@ dependencies = [ [[package]] name = "k256" version = "0.13.4" -source = "git+https://github.com/0xPolygonHermez/zisk-patch-elliptic-curves.git?tag=patch-k256-0.13.4-zisk-0.13.0#bdfa69f4094d4a7f25d30341127bec885beed57b" +source = "git+https://github.com/0xPolygonHermez/zisk-patch-elliptic-curves.git?tag=patch-k256-0.13.4-zisk-0.14.0#8d8e99470becdb05f8ebb649cdf2b5d99c0a3384" dependencies = [ "cfg-if", "ecdsa", @@ -1635,8 +1655,8 @@ dependencies = [ [[package]] name = "lib-c" -version = "0.13.0" -source = "git+https://github.com/0xPolygonHermez/zisk.git?tag=v0.13.0#ea1ed4c518992a170fc59ec19f1228eb4829a9e1" +version = "0.14.0" +source = "git+https://github.com/0xPolygonHermez/zisk.git?tag=v0.14.0#2f791ffd070d024ba350f054c349c8d6bd98d629" [[package]] name = "libc" @@ -2472,7 +2492,7 @@ dependencies = [ [[package]] name = "sha2" version = "0.10.9" -source = "git+https://github.com/0xPolygonHermez/zisk-patch-hashes.git?branch=zisk-patch-sha2%2Fv0.10.9#6b70e479ca16f1fa8c2db77fdc872b5f2aad2d03" +source = "git+https://github.com/0xPolygonHermez/zisk-patch-hashes.git?tag=patch-sha2-0.10.9-zisk-0.14.0#2cfb8e0405dfc0beb31cd4f497f6db9a9fa56aae" dependencies = [ "cfg-if", "cpufeatures", @@ -2483,7 +2503,7 @@ dependencies = [ [[package]] name = "sha3" version = "0.10.8" -source = "git+https://github.com/0xPolygonHermez/zisk-patch-hashes.git?branch=zisk-patch-sha3%2Fv0.10.8#c404b04f733ab18bf0d0f5540249e6120519cc3e" +source = "git+https://github.com/0xPolygonHermez/zisk-patch-hashes.git?tag=patch-sha3-0.10.8-zisk-0.14.0#c404b04f733ab18bf0d0f5540249e6120519cc3e" dependencies = [ "digest", "keccak", @@ -2544,7 +2564,7 @@ version = "5.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb1a9935d58cb1dcd757a1b10d727090f5b718f1f03b512d48f0c1952e6ead00" dependencies = [ - "bincode", + "bincode 1.3.3", "serde", "sp1-primitives", ] @@ -2555,7 +2575,7 @@ version = "5.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7d2a6187e394c30097ea7a975a4832f172918690dc89a979f0fad67422d3a8b" dependencies = [ - "bincode", + "bincode 1.3.3", "blake3", "cfg-if", "hex", @@ -2641,7 +2661,7 @@ dependencies = [ [[package]] name = "substrate-bn" version = "0.6.0" -source = "git+https://github.com/0xPolygonHermez/zisk-patch-bn.git?tag=patch-0.6.0-zisk-0.13.0#3c8e959c901285124e5bd9a92cb4a5a64333a9c1" +source = "git+https://github.com/0xPolygonHermez/zisk-patch-bn.git?tag=patch-0.6.0-zisk-0.14.0#e2cc4d5991eebd337ba6173c512383a7b54d6ba2" dependencies = [ "byteorder", "crunchy", @@ -2941,6 +2961,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "unty" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" + [[package]] name = "url" version = "2.5.7" @@ -2987,6 +3013,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "virtue" +version = "0.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1" + [[package]] name = "walkdir" version = "2.5.0" @@ -3284,16 +3316,19 @@ dependencies = [ [[package]] name = "ziskos" -version = "0.13.0" -source = "git+https://github.com/0xPolygonHermez/zisk.git?tag=v0.13.0#ea1ed4c518992a170fc59ec19f1228eb4829a9e1" +version = "0.14.0" +source = "git+https://github.com/0xPolygonHermez/zisk.git?tag=v0.14.0#2f791ffd070d024ba350f054c349c8d6bd98d629" dependencies = [ + "bincode 2.0.1", "cfg-if", "getrandom", "lazy_static", "lib-c", "num-bigint 0.4.6", + "num-integer", "num-traits", "rand", + "serde", "static_assertions", "tiny-keccak", ] diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml index 7ff6a966b69..25bf3d3a350 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml @@ -6,7 +6,7 @@ edition = "2024" [workspace] [dependencies] -ziskos = { git = "https://github.com/0xPolygonHermez/zisk.git", tag = "v0.13.0" } +ziskos = { git = "https://github.com/0xPolygonHermez/zisk.git", tag = "v0.14.0" } sha2 = "0.10.9" rkyv = { version = "0.8.10", features = ["std", "unaligned"] } @@ -23,10 +23,10 @@ ethrex-blockchain = { path = "../../../../../../blockchain", default-features = ] } [patch.crates-io] -sha2 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", branch = "zisk-patch-sha2/v0.10.9" } -sha3 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", branch = "zisk-patch-sha3/v0.10.8" } -k256 = { git = "https://github.com/0xPolygonHermez/zisk-patch-elliptic-curves.git", tag = "patch-k256-0.13.4-zisk-0.13.0" } -substrate-bn = { git = "https://github.com/0xPolygonHermez/zisk-patch-bn.git", tag = "patch-0.6.0-zisk-0.13.0" } +sha2 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", tag = "patch-sha2-0.10.9-zisk-0.14.0" } +sha3 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", tag = "patch-sha3-0.10.8-zisk-0.14.0" } +k256 = { git = "https://github.com/0xPolygonHermez/zisk-patch-elliptic-curves.git", tag = "patch-k256-0.13.4-zisk-0.14.0" } +substrate-bn = { git = "https://github.com/0xPolygonHermez/zisk-patch-bn.git", tag = "patch-0.6.0-zisk-0.14.0" } sp1_bls12_381 = { git = "https://github.com/han0110/bls12_381.git", branch = "zisk-patch/v0.8.0-upgrade-sp1-lib" } tiny-keccak = { git = "https://github.com/0xPolygonHermez/zisk-patch-tiny-keccak/", branch = "zisk" } diff --git a/crates/l2/tee/quote-gen/Cargo.lock b/crates/l2/tee/quote-gen/Cargo.lock index 6b7df14d3ba..49380eee071 100644 --- a/crates/l2/tee/quote-gen/Cargo.lock +++ b/crates/l2/tee/quote-gen/Cargo.lock @@ -2101,6 +2101,7 @@ dependencies = [ "ethrex-rlp", "ethrex-trie", "hex", + "k256", "kzg-rs", "lazy_static", "libc", @@ -2229,6 +2230,7 @@ dependencies = [ "ethrex-trie", "ethrex-vm", "hex", + "k256", "lambdaworks-crypto 0.13.0", "rkyv", "secp256k1", @@ -2293,6 +2295,7 @@ dependencies = [ "serde 1.0.228", "serde_json", "sha2", + "sha3", "strum 0.27.2", "thiserror 2.0.16", "walkdir", From 56a3545c1719dd72ac5fc75c40cd0e4990c4d763 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 21 Nov 2025 14:08:31 -0300 Subject: [PATCH 70/92] fix features --- crates/common/errors.rs | 14 ++++++++++++-- crates/common/types/transaction.rs | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/crates/common/errors.rs b/crates/common/errors.rs index c49bb503db4..76b872db78c 100644 --- a/crates/common/errors.rs +++ b/crates/common/errors.rs @@ -1,9 +1,19 @@ #[derive(thiserror::Error, Debug)] pub enum EcdsaError { - #[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] + #[cfg(all( + not(feature = "zisk"), + not(feature = "risc0"), + not(feature = "sp1"), + feature = "secp256k1" + ))] #[error("secp256k1 error: {0}")] Secp256k1(#[from] secp256k1::Error), - #[cfg(any(feature = "zisk", feature = "risc0", feature = "sp1"))] + #[cfg(any( + feature = "zisk", + feature = "risc0", + feature = "sp1", + not(feature = "secp256k1") + ))] #[error("k256 error: {0}")] K256(#[from] k256::ecdsa::Error), } diff --git a/crates/common/types/transaction.rs b/crates/common/types/transaction.rs index 78e19a05524..d080b0d26cb 100644 --- a/crates/common/types/transaction.rs +++ b/crates/common/types/transaction.rs @@ -1416,7 +1416,12 @@ pub fn recover_address_from_message( recover_address(signature, payload).map_err(EcdsaError::from) } -#[cfg(all(not(feature = "zisk"), not(feature = "risc0"), not(feature = "sp1")))] +#[cfg(all( + not(feature = "zisk"), + not(feature = "risc0"), + not(feature = "sp1"), + feature = "secp256k1" +))] pub fn recover_address(signature: Signature, payload: H256) -> Result { // Create signature let signature_bytes = signature.to_fixed_bytes(); @@ -1434,7 +1439,12 @@ pub fn recover_address(signature: Signature, payload: H256) -> Result Result { use sha2::Digest; use sha3::Keccak256; From 33e3f80a37abd6390575f1884c71cdb4eaec3c8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 21 Nov 2025 14:46:00 -0300 Subject: [PATCH 71/92] add comment to constant secp --- crates/vm/levm/src/constants.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/vm/levm/src/constants.rs b/crates/vm/levm/src/constants.rs index 7250bf4a8f9..2d022ac673d 100644 --- a/crates/vm/levm/src/constants.rs +++ b/crates/vm/levm/src/constants.rs @@ -72,8 +72,10 @@ pub const VALID_BLOB_PREFIXES: [u8; 2] = [0x01, 0x02]; pub const LAST_AVAILABLE_BLOCK_LIMIT: U256 = U256([256, 0, 0, 0]); // EIP7702 - EOA Load Code -pub static SECP256K1_ORDER: LazyLock = - LazyLock::new(|| U256::from_big_endian(&k256::Secp256k1::ORDER.to_be_bytes())); +pub static SECP256K1_ORDER: LazyLock = LazyLock::new(|| + // we use the k256 instead of the secp256k1 crate because the latter is optional + // while the former is not, this is to avoid a conditiona compilation attribute. + U256::from_big_endian(&k256::Secp256k1::ORDER.to_be_bytes())); pub static SECP256K1_ORDER_OVER2: std::sync::LazyLock = LazyLock::new(|| *SECP256K1_ORDER / U256::from(2)); pub const MAGIC: u8 = 0x05; From b409a16de2ba4ecaff9a318af202d3a0f0463816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 21 Nov 2025 14:46:12 -0300 Subject: [PATCH 72/92] typo --- crates/vm/levm/src/constants.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/vm/levm/src/constants.rs b/crates/vm/levm/src/constants.rs index 2d022ac673d..8ecda23dd5f 100644 --- a/crates/vm/levm/src/constants.rs +++ b/crates/vm/levm/src/constants.rs @@ -73,7 +73,7 @@ pub const LAST_AVAILABLE_BLOCK_LIMIT: U256 = U256([256, 0, 0, 0]); // EIP7702 - EOA Load Code pub static SECP256K1_ORDER: LazyLock = LazyLock::new(|| - // we use the k256 instead of the secp256k1 crate because the latter is optional + // we use the k256 crate instead of the secp256k1 because the latter is optional // while the former is not, this is to avoid a conditiona compilation attribute. U256::from_big_endian(&k256::Secp256k1::ORDER.to_be_bytes())); pub static SECP256K1_ORDER_OVER2: std::sync::LazyLock = From bb456f146b330d6c547d926ae77055e0bcb25a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 21 Nov 2025 14:46:24 -0300 Subject: [PATCH 73/92] typo --- crates/vm/levm/src/constants.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/vm/levm/src/constants.rs b/crates/vm/levm/src/constants.rs index 8ecda23dd5f..c73406e5169 100644 --- a/crates/vm/levm/src/constants.rs +++ b/crates/vm/levm/src/constants.rs @@ -74,7 +74,7 @@ pub const LAST_AVAILABLE_BLOCK_LIMIT: U256 = U256([256, 0, 0, 0]); // EIP7702 - EOA Load Code pub static SECP256K1_ORDER: LazyLock = LazyLock::new(|| // we use the k256 crate instead of the secp256k1 because the latter is optional - // while the former is not, this is to avoid a conditiona compilation attribute. + // while the former is not, this is to avoid a conditional compilation attribute. U256::from_big_endian(&k256::Secp256k1::ORDER.to_be_bytes())); pub static SECP256K1_ORDER_OVER2: std::sync::LazyLock = LazyLock::new(|| *SECP256K1_ORDER / U256::from(2)); From 94f4764366e6cc8ac61bc0f5dbdf45f2f6cf553b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Fri, 21 Nov 2025 14:47:59 -0300 Subject: [PATCH 74/92] fix sha2 version --- crates/l2/prover/src/guest_program/src/zisk/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml index 25bf3d3a350..3e6ae92df0d 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml @@ -23,7 +23,7 @@ ethrex-blockchain = { path = "../../../../../../blockchain", default-features = ] } [patch.crates-io] -sha2 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", tag = "patch-sha2-0.10.9-zisk-0.14.0" } +sha2 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", tag = "patch-sha2-0.10.8-zisk-0.14.0" } sha3 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", tag = "patch-sha3-0.10.8-zisk-0.14.0" } k256 = { git = "https://github.com/0xPolygonHermez/zisk-patch-elliptic-curves.git", tag = "patch-k256-0.13.4-zisk-0.14.0" } substrate-bn = { git = "https://github.com/0xPolygonHermez/zisk-patch-bn.git", tag = "patch-0.6.0-zisk-0.14.0" } From 0d687f8f5250d76e1864d0519b7e38b1601b695c Mon Sep 17 00:00:00 2001 From: ilitteri Date: Fri, 21 Nov 2025 15:23:26 -0300 Subject: [PATCH 75/92] Bump sha2 version --- Cargo.toml | 2 +- crates/l2/prover/src/guest_program/src/risc0/Cargo.lock | 4 ++-- crates/l2/prover/src/guest_program/src/risc0/Cargo.toml | 2 +- crates/l2/prover/src/guest_program/src/sp1/Cargo.lock | 4 ++-- crates/l2/prover/src/guest_program/src/sp1/Cargo.toml | 2 +- crates/l2/prover/src/guest_program/src/zisk/Cargo.toml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 274f2e7175f..c6e83275d46 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -85,7 +85,7 @@ hex = "0.4.3" hex-literal = "0.4.1" crc32fast = "1.4.2" lazy_static = "1.5.0" -sha2 = "0.10.8" +sha2 = "0.10.9" sha3 = "0.10.8" tokio-util = { version = "0.7.15", features = ["rt"] } jsonwebtoken = "9.3.0" diff --git a/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock b/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock index 268a54c6f3c..03dc801dde6 100644 --- a/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/risc0/Cargo.lock @@ -3189,8 +3189,8 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" -source = "git+https://github.com/risc0/RustCrypto-hashes?tag=sha2-v0.10.8-risczero.0#244dc3b08788f7a4ccce14c66896ae3b4f24c166" +version = "0.10.9" +source = "git+https://github.com/risc0/RustCrypto-hashes?tag=sha2-v0.10.9-risczero.0#8631fabdea7bdffa97b11868e04e73491d8e5bcf" dependencies = [ "cfg-if", "cpufeatures", 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 e36d0bf955e..e262c0cea94 100644 --- a/crates/l2/prover/src/guest_program/src/risc0/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/risc0/Cargo.toml @@ -36,7 +36,7 @@ ethrex-l2-common = { path = "../../../../../common", default-features = false, f ] } [patch.crates-io] -sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.8-risczero.0" } +sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.9-risczero.0" } k256 = { git = "https://github.com/risc0/RustCrypto-elliptic-curves", tag = "k256/v0.13.4-risczero.1" } p256 = { git = "https://github.com/risc0/RustCrypto-elliptic-curves", tag = "p256/v0.13.2-risczero.1" } crypto-bigint = { git = "https://github.com/risc0/RustCrypto-crypto-bigint", tag = "v0.5.5-risczero.0" } diff --git a/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock b/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock index 3d7e7ccd713..ce04031a544 100644 --- a/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/sp1/Cargo.lock @@ -2605,8 +2605,8 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" -source = "git+https://github.com/sp1-patches/RustCrypto-hashes?tag=patch-sha2-0.10.8-sp1-4.0.0#1f224388fdede7cef649bce0d63876d1a9e3f515" +version = "0.10.9" +source = "git+https://github.com/sp1-patches/RustCrypto-hashes?tag=patch-sha2-0.10.9-sp1-4.0.0#0b1945eea7d9a776fd6e50ffd5fc51f0c5e6f155" dependencies = [ "cfg-if", "cpufeatures", diff --git a/crates/l2/prover/src/guest_program/src/sp1/Cargo.toml b/crates/l2/prover/src/guest_program/src/sp1/Cargo.toml index d5afb75eb32..3f8e4ac6950 100644 --- a/crates/l2/prover/src/guest_program/src/sp1/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/sp1/Cargo.toml @@ -21,7 +21,7 @@ ethrex-blockchain = { path = "../../../../../../blockchain", default-features = ethrex-l2-common = { path = "../../../../../common", default-features = false } [patch.crates-io] -sha2-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "patch-sha2-0.10.8-sp1-4.0.0" } +sha2-v0-10-9 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "patch-sha2-0.10.9-sp1-4.0.0" } sha3-v0-10-8 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha3", tag = "patch-sha3-0.10.8-sp1-4.0.0" } crypto-bigint = { git = "https://github.com/sp1-patches/RustCrypto-bigint", tag = "patch-0.5.5-sp1-4.0.0" } tiny-keccak = { git = "https://github.com/sp1-patches/tiny-keccak", tag = "patch-2.0.2-sp1-4.0.0" } diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml index 3e6ae92df0d..db91debafcb 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml @@ -23,7 +23,7 @@ ethrex-blockchain = { path = "../../../../../../blockchain", default-features = ] } [patch.crates-io] -sha2 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", tag = "patch-sha2-0.10.8-zisk-0.14.0" } +sha2 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", tag = "patch-sha2-0.10.9crates/l2/prover/src/guest_program/src/zisk/Cargo.toml-zisk-0.14.0" } sha3 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", tag = "patch-sha3-0.10.8-zisk-0.14.0" } k256 = { git = "https://github.com/0xPolygonHermez/zisk-patch-elliptic-curves.git", tag = "patch-k256-0.13.4-zisk-0.14.0" } substrate-bn = { git = "https://github.com/0xPolygonHermez/zisk-patch-bn.git", tag = "patch-0.6.0-zisk-0.14.0" } From 32909b30f1eddf5f0e2ec5abedc6935e0f141feb Mon Sep 17 00:00:00 2001 From: ilitteri Date: Fri, 21 Nov 2025 15:37:28 -0300 Subject: [PATCH 76/92] fix locks --- crates/l2/prover/src/guest_program/src/zisk/Cargo.lock | 1 - crates/l2/prover/src/guest_program/src/zisk/Cargo.toml | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock index 6ecb5fad784..d7e4584d4d4 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock @@ -3342,6 +3342,5 @@ dependencies = [ "ethrex-vm", "guest_program", "rkyv", - "sha2", "ziskos", ] diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml index db91debafcb..e571bce70de 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml @@ -8,7 +8,6 @@ edition = "2024" [dependencies] ziskos = { git = "https://github.com/0xPolygonHermez/zisk.git", tag = "v0.14.0" } -sha2 = "0.10.9" rkyv = { version = "0.8.10", features = ["std", "unaligned"] } guest_program = { path = "../../", default-features = false } @@ -23,7 +22,7 @@ ethrex-blockchain = { path = "../../../../../../blockchain", default-features = ] } [patch.crates-io] -sha2 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", tag = "patch-sha2-0.10.9crates/l2/prover/src/guest_program/src/zisk/Cargo.toml-zisk-0.14.0" } +sha2 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", tag = "patch-sha2-0.10.9-zisk-0.14.0" } sha3 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", tag = "patch-sha3-0.10.8-zisk-0.14.0" } k256 = { git = "https://github.com/0xPolygonHermez/zisk-patch-elliptic-curves.git", tag = "patch-k256-0.13.4-zisk-0.14.0" } substrate-bn = { git = "https://github.com/0xPolygonHermez/zisk-patch-bn.git", tag = "patch-0.6.0-zisk-0.14.0" } From 1f288da5983106155db25d43ecdec8906bc3ec63 Mon Sep 17 00:00:00 2001 From: ilitteri Date: Fri, 21 Nov 2025 15:41:43 -0300 Subject: [PATCH 77/92] fix zisk toml --- crates/l2/prover/src/guest_program/src/zisk/Cargo.lock | 1 + crates/l2/prover/src/guest_program/src/zisk/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock index d7e4584d4d4..6ecb5fad784 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.lock @@ -3342,5 +3342,6 @@ dependencies = [ "ethrex-vm", "guest_program", "rkyv", + "sha2", "ziskos", ] diff --git a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml index e571bce70de..d06e14cba64 100644 --- a/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml +++ b/crates/l2/prover/src/guest_program/src/zisk/Cargo.toml @@ -7,7 +7,7 @@ edition = "2024" [dependencies] ziskos = { git = "https://github.com/0xPolygonHermez/zisk.git", tag = "v0.14.0" } - +sha2 = "0.10.9" rkyv = { version = "0.8.10", features = ["std", "unaligned"] } guest_program = { path = "../../", default-features = false } From 1c9ceba6b117172ce821dd4db42b27b3a310716f Mon Sep 17 00:00:00 2001 From: ilitteri Date: Fri, 21 Nov 2025 15:51:18 -0300 Subject: [PATCH 78/92] add --unlock-mapped-memory flag --- crates/l2/prover/src/backend/zisk.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/l2/prover/src/backend/zisk.rs b/crates/l2/prover/src/backend/zisk.rs index e8a29a1424a..1d18b0c50da 100644 --- a/crates/l2/prover/src/backend/zisk.rs +++ b/crates/l2/prover/src/backend/zisk.rs @@ -54,6 +54,7 @@ pub fn prove( "--output-dir", OUTPUT_DIR_PATH, "--aggregation", + "--unlock-mapped-memory", ]; let conditional_groth16_arg = if let ProofFormat::Groth16 = format { vec!["--final-snark"] From 332a62e96e75371f6ae4d7674c5218dc5e1177ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 12:55:07 -0300 Subject: [PATCH 79/92] add zisk check and elf jobs --- .github/workflows/pr-main_l2_prover.yaml | 12 +++++++++++- .github/workflows/tag_release.yaml | 20 ++++++++++++++++++++ crates/l2/prover/src/guest_program/build.rs | 8 ++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr-main_l2_prover.yaml b/.github/workflows/pr-main_l2_prover.yaml index 56948e81ec7..d5d3b675186 100644 --- a/.github/workflows/pr-main_l2_prover.yaml +++ b/.github/workflows/pr-main_l2_prover.yaml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - backend: ["sp1", "risc0"] + backend: ["sp1", "risc0", "zisk"] steps: - name: Checkout sources uses: actions/checkout@v4 @@ -44,6 +44,16 @@ jobs: curl -L https://sp1.succinct.xyz | bash ~/.sp1/bin/sp1up --version 5.0.8 + - name: ZisK toolchain install + if: matrix.backend == 'zisk' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_RUNNER: 1 + run: | + sudo apt-get update + sudo apt-get install -y xz-utils jq curl build-essential qemu-system libomp-dev libgmp-dev nlohmann-json3-dev protobuf-compiler uuid-dev libgrpc++-dev libsecp256k1-dev libsodium-dev libpqxx-dev nasm libopenmpi-dev openmpi-bin openmpi-common libclang-dev clang gcc-riscv64-unknown-elf + curl https://raw.githubusercontent.com/0xPolygonHermez/zisk/main/ziskup/install.sh | bash + - name: Check ${{ matrix.backend }} backend run: | cargo check -r -p ethrex-prover -F ${{ matrix.backend }} diff --git a/.github/workflows/tag_release.yaml b/.github/workflows/tag_release.yaml index 1c24f867b36..8d02fa99515 100644 --- a/.github/workflows/tag_release.yaml +++ b/.github/workflows/tag_release.yaml @@ -159,6 +159,7 @@ jobs: zkvm: - sp1 - risc0 + - zisk runs-on: ubuntu-latest steps: - name: Checkout code @@ -185,6 +186,17 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} uses: ./.github/actions/install-risc0 + - name: Install ZisK + if: ${{ matrix.zkvm == 'zisk' }} + env: + SHELL: /bin/bash + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_RUNNER: 1 + run: | + sudo apt-get update + sudo apt-get install -y xz-utils jq curl build-essential qemu-system libomp-dev libgmp-dev nlohmann-json3-dev protobuf-compiler uuid-dev libgrpc++-dev libsecp256k1-dev libsodium-dev libpqxx-dev nasm libopenmpi-dev openmpi-bin openmpi-common libclang-dev clang gcc-riscv64-unknown-elf + curl https://raw.githubusercontent.com/0xPolygonHermez/zisk/main/ziskup/install.sh | bash + - name: Build ethrex elf - ${{ matrix.zkvm }} run: | cargo build --release --package guest_program --features ${{ matrix.zkvm }} @@ -196,6 +208,8 @@ jobs: elif [ "${{ matrix.zkvm }}" = "risc0" ]; then mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-risc0-elf ethrex-riscv32im-${{ matrix.zkvm }}-elf-${{ github.ref_name}} mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-risc0-vk ${{ matrix.zkvm }}_verification_keys/ethrex-riscv32im-${{ matrix.zkvm }}-vk-${{ github.ref_name}} + elif [ "${{ matrix.zkvm }}" = "zisk" ]; then + mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv64ima-zisk-elf ethrex-riscv64ima-${{ matrix.zkvm }}-elf-${{ github.ref_name}} fi - name: Upload ethrex guest elf artifact - ${{ matrix.zkvm }} @@ -241,6 +255,12 @@ jobs: name: risc0_verification_keys path: ethrex_guests/risc0/ + - name: Download ZisK elf artifact + uses: actions/download-artifact@v4 + with: + name: ethrex-riscv64ima-zisk-elf-${{ github.ref_name }} + path: ethrex_guests/zisk/ + - name: Archive ethrex guests run: | cd ethrex_guests/ diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index b8bef81e4c7..66d6023b6a2 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -159,6 +159,14 @@ fn build_zisk_program() { if !setup_status.success() { panic!("Failed to setup compiled guest program with zisk toolchain"); } + + let _ = std::fs::create_dir("./src/zisk/out"); + + std::fs::copy( + "./src/zisk/target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program", + "./src/zisk/out/riscv64ima-zisk-elf", + ) + .expect("could not copy Zisk elf to output directory"); } #[cfg(all(not(clippy), feature = "zisk"))] From a7549e0127ad3485dc2b640c77deeb63849eb724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 13:01:25 -0300 Subject: [PATCH 80/92] fix setup-rust --- .github/actions/setup-rust/action.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/actions/setup-rust/action.yml b/.github/actions/setup-rust/action.yml index 33ff62d6ba6..0b494ab361e 100644 --- a/.github/actions/setup-rust/action.yml +++ b/.github/actions/setup-rust/action.yml @@ -4,7 +4,7 @@ inputs: components: description: "Rust components to install (e.g., rustfmt, clippy)" required: false - type: string + default: "" runs: using: "composite" steps: @@ -24,4 +24,5 @@ runs: components: ${{ inputs.components }} - name: Add Rust Cache - uses: Swatinem/rust-cache@v2 \ No newline at end of file + uses: Swatinem/rust-cache@v2 + From 2a5c77690bbc373069c22a15e9f20c367593a728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 15:19:12 -0300 Subject: [PATCH 81/92] add build.rs prints --- crates/l2/prover/src/guest_program/build.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index 66d6023b6a2..7d0b033bce4 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -137,11 +137,29 @@ fn build_zisk_program() { println!("{build_command:?}"); println!("{setup_command:?}"); + println!("CWD = {}", std::env::current_dir().unwrap().display()); + let start = std::time::Instant::now(); let build_status = build_command .status() .expect("Failed to execute zisk build command"); + + println!( + "ELF (workspace target) exists? {}", + std::path::Path::new("target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program").exists() + ); + + println!( + "ELF (src/zisk/target) exists? {}", + std::path::Path::new("src/zisk/target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program").exists() + ); + + println!( + "ELF (cwd-relative) exists? {}", + std::path::Path::new("./target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program").exists() + ); + let setup_status = setup_command .status() .expect("Failed to execute zisk setup command"); From 9df4478e6c3e167ec19b03b132a9edef4a72fa34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 15:38:35 -0300 Subject: [PATCH 82/92] add ./ to path --- crates/l2/prover/src/guest_program/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index 7d0b033bce4..3bcd9be5824 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -128,7 +128,7 @@ fn build_zisk_program() { .args([ "rom-setup", "-e", - "target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program", + "./target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program", ]) .stdout(std::process::Stdio::inherit()) .stderr(std::process::Stdio::inherit()) From a8de27574753c7f57ca537f4c91c44bd0952da4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 16:05:15 -0300 Subject: [PATCH 83/92] add retry and add zisk bin to path --- .github/workflows/pr-main_l2_prover.yaml | 14 ++++++++++---- .github/workflows/tag_release.yaml | 14 ++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pr-main_l2_prover.yaml b/.github/workflows/pr-main_l2_prover.yaml index d5d3b675186..39697d851d8 100644 --- a/.github/workflows/pr-main_l2_prover.yaml +++ b/.github/workflows/pr-main_l2_prover.yaml @@ -49,10 +49,16 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_RUNNER: 1 - run: | - sudo apt-get update - sudo apt-get install -y xz-utils jq curl build-essential qemu-system libomp-dev libgmp-dev nlohmann-json3-dev protobuf-compiler uuid-dev libgrpc++-dev libsecp256k1-dev libsodium-dev libpqxx-dev nasm libopenmpi-dev openmpi-bin openmpi-common libclang-dev clang gcc-riscv64-unknown-elf - curl https://raw.githubusercontent.com/0xPolygonHermez/zisk/main/ziskup/install.sh | bash + uses: actions/retry@v3 + with: + max_attempts: 3 + retry_wait_seconds: 0 + timeout_minutes: 15 + command: | + sudo apt-get update + sudo apt-get install -y xz-utils jq curl build-essential qemu-system libomp-dev libgmp-dev nlohmann-json3-dev protobuf-compiler uuid-dev libgrpc++-dev libsecp256k1-dev libsodium-dev libpqxx-dev nasm libopenmpi-dev openmpi-bin openmpi-common libclang-dev clang gcc-riscv64-unknown-elf + curl https://raw.githubusercontent.com/0xPolygonHermez/zisk/main/ziskup/install.sh | bash + echo "$HOME/.zisk/bin" >> $GITHUB_PATH - name: Check ${{ matrix.backend }} backend run: | diff --git a/.github/workflows/tag_release.yaml b/.github/workflows/tag_release.yaml index 8d02fa99515..125e83505e2 100644 --- a/.github/workflows/tag_release.yaml +++ b/.github/workflows/tag_release.yaml @@ -192,10 +192,16 @@ jobs: SHELL: /bin/bash GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_RUNNER: 1 - run: | - sudo apt-get update - sudo apt-get install -y xz-utils jq curl build-essential qemu-system libomp-dev libgmp-dev nlohmann-json3-dev protobuf-compiler uuid-dev libgrpc++-dev libsecp256k1-dev libsodium-dev libpqxx-dev nasm libopenmpi-dev openmpi-bin openmpi-common libclang-dev clang gcc-riscv64-unknown-elf - curl https://raw.githubusercontent.com/0xPolygonHermez/zisk/main/ziskup/install.sh | bash + uses: actions/retry@v3 + with: + max_attempts: 3 + retry_wait_seconds: 0 + timeout_minutes: 15 + command: | + sudo apt-get update + sudo apt-get install -y xz-utils jq curl build-essential qemu-system libomp-dev libgmp-dev nlohmann-json3-dev protobuf-compiler uuid-dev libgrpc++-dev libsecp256k1-dev libsodium-dev libpqxx-dev nasm libopenmpi-dev openmpi-bin openmpi-common libclang-dev clang gcc-riscv64-unknown-elf + curl https://raw.githubusercontent.com/0xPolygonHermez/zisk/main/ziskup/install.sh | bash + echo "$HOME/.zisk/bin" >> $GITHUB_PATH - name: Build ethrex elf - ${{ matrix.zkvm }} run: | From 0a35c02569301118cccac0822bcaa3e7770bfa55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 16:13:26 -0300 Subject: [PATCH 84/92] lint --- crates/l2/prover/src/guest_program/build.rs | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index 3bcd9be5824..97c81ee0432 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -145,21 +145,6 @@ fn build_zisk_program() { .status() .expect("Failed to execute zisk build command"); - println!( - "ELF (workspace target) exists? {}", - std::path::Path::new("target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program").exists() - ); - - println!( - "ELF (src/zisk/target) exists? {}", - std::path::Path::new("src/zisk/target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program").exists() - ); - - println!( - "ELF (cwd-relative) exists? {}", - std::path::Path::new("./target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program").exists() - ); - let setup_status = setup_command .status() .expect("Failed to execute zisk setup command"); From 92fc3fac28851a048b2337194088481958068605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jerem=C3=ADas=20Salom=C3=B3n?= <48994069+JereSalo@users.noreply.github.com> Date: Tue, 25 Nov 2025 16:18:54 -0300 Subject: [PATCH 85/92] fix(l1): upload zisk artifact correctly (#5422) **Motivation** **Description** upload zisk artifact correctly --- .github/workflows/tag_release.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tag_release.yaml b/.github/workflows/tag_release.yaml index 125e83505e2..e5cfad2a502 100644 --- a/.github/workflows/tag_release.yaml +++ b/.github/workflows/tag_release.yaml @@ -211,18 +211,21 @@ jobs: mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-succinct-zkvm-elf ethrex-riscv32im-${{ matrix.zkvm }}-elf-${{ github.ref_name }} mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-succinct-zkvm-vk-bn254 ${{ matrix.zkvm }}_verification_keys/ethrex-riscv32im-${{ matrix.zkvm }}-vk-bn254-${{ github.ref_name }} mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-succinct-zkvm-vk-u32 ${{ matrix.zkvm }}_verification_keys/ethrex-riscv32im-${{ matrix.zkvm }}-vk-u32-${{ github.ref_name }} + echo "ELF_ARTIFACT=ethrex-riscv32im-${{ matrix.zkvm }}-elf-${{ github.ref_name }}" >> $GITHUB_ENV elif [ "${{ matrix.zkvm }}" = "risc0" ]; then mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-risc0-elf ethrex-riscv32im-${{ matrix.zkvm }}-elf-${{ github.ref_name}} mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-risc0-vk ${{ matrix.zkvm }}_verification_keys/ethrex-riscv32im-${{ matrix.zkvm }}-vk-${{ github.ref_name}} + echo "ELF_ARTIFACT=ethrex-riscv32im-${{ matrix.zkvm }}-elf-${{ github.ref_name }}" >> $GITHUB_ENV elif [ "${{ matrix.zkvm }}" = "zisk" ]; then mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv64ima-zisk-elf ethrex-riscv64ima-${{ matrix.zkvm }}-elf-${{ github.ref_name}} + echo "ELF_ARTIFACT=ethrex-riscv64ima-${{ matrix.zkvm }}-elf-${{ github.ref_name }}" >> $GITHUB_ENV fi - name: Upload ethrex guest elf artifact - ${{ matrix.zkvm }} uses: actions/upload-artifact@v4 with: - name: ethrex-riscv32im-${{ matrix.zkvm }}-elf-${{ github.ref_name }} - path: ethrex-riscv32im-${{ matrix.zkvm }}-elf-${{ github.ref_name }} + name: ${{ env.ELF_ARTIFACT }} + path: ${{ env.ELF_ARTIFACT }} - name: Upload ethrex guest verification keys - ${{ matrix.zkvm }} uses: actions/upload-artifact@v4 From 35284c99bf1ee52b42776c15c694f18482dd8991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 16:24:41 -0300 Subject: [PATCH 86/92] fix retry --- .github/workflows/pr-main_l2_prover.yaml | 2 +- .github/workflows/tag_release.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-main_l2_prover.yaml b/.github/workflows/pr-main_l2_prover.yaml index 39697d851d8..724120a4d39 100644 --- a/.github/workflows/pr-main_l2_prover.yaml +++ b/.github/workflows/pr-main_l2_prover.yaml @@ -49,7 +49,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_RUNNER: 1 - uses: actions/retry@v3 + uses: nick-fields/retry@v3 with: max_attempts: 3 retry_wait_seconds: 0 diff --git a/.github/workflows/tag_release.yaml b/.github/workflows/tag_release.yaml index e5cfad2a502..2d1e86e54e7 100644 --- a/.github/workflows/tag_release.yaml +++ b/.github/workflows/tag_release.yaml @@ -192,7 +192,7 @@ jobs: SHELL: /bin/bash GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_RUNNER: 1 - uses: actions/retry@v3 + uses: nick-fields/retry@v3 with: max_attempts: 3 retry_wait_seconds: 0 From e31aa37fd8c4aee819a04c4b90a23efd72da8276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 17:39:44 -0300 Subject: [PATCH 87/92] add ci flag --- .github/workflows/pr-main_l2_prover.yaml | 4 ++-- crates/l2/prover/src/guest_program/Cargo.toml | 1 + crates/l2/prover/src/guest_program/build.rs | 10 ++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-main_l2_prover.yaml b/.github/workflows/pr-main_l2_prover.yaml index 724120a4d39..03f9c9a0031 100644 --- a/.github/workflows/pr-main_l2_prover.yaml +++ b/.github/workflows/pr-main_l2_prover.yaml @@ -62,11 +62,11 @@ jobs: - name: Check ${{ matrix.backend }} backend run: | - cargo check -r -p ethrex-prover -F ${{ matrix.backend }} + cargo check -r -p ethrex-prover -F "${{ matrix.backend }},ci" - name: Clippy ${{ matrix.backend }} backend run: | - cargo clippy -r -p ethrex-prover --all-targets -F ${{ matrix.backend }} + cargo clippy -r -p ethrex-prover --all-targets -F "${{ matrix.backend }},ci" - name: Check ${{ matrix.backend }} Cargo.lock modified but not committed run: | diff --git a/crates/l2/prover/src/guest_program/Cargo.toml b/crates/l2/prover/src/guest_program/Cargo.toml index 87e4446792c..800c6b74ff6 100644 --- a/crates/l2/prover/src/guest_program/Cargo.toml +++ b/crates/l2/prover/src/guest_program/Cargo.toml @@ -50,6 +50,7 @@ secp256k1 = [ "ethrex-vm/secp256k1", "ethrex-l2-common/secp256k1", ] +ci = [] # When this feature is enabled, the cycles used in the code inside the # report_cycles! macro will be reported to stdout when running inside SP1 zkVM. diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index 97c81ee0432..e25c0ba3749 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -104,7 +104,12 @@ fn build_sp1_program() { #[cfg(all(not(clippy), feature = "zisk"))] fn build_zisk_program() { + // cargo-zisk rom-setup fails with `Os { code: 2, kind: NotFound, message: "No such file or directory" }` + // when building in a GitHub CI environment. This command is not required if we won't generate a proof + // so we skip it under the `ci` feature flag. + let mut build_command = std::process::Command::new("cargo"); + #[cfg(not(feature = "ci"))] let mut setup_command = std::process::Command::new("cargo-zisk"); build_command @@ -121,6 +126,8 @@ fn build_zisk_program() { .stdout(std::process::Stdio::inherit()) .stderr(std::process::Stdio::inherit()) .current_dir("./src/zisk"); + #[cfg(not(feature = "ci"))] + { setup_command .env("RUSTC", rustc_path("zisk")) .env_remove("RUSTFLAGS") @@ -133,6 +140,7 @@ fn build_zisk_program() { .stdout(std::process::Stdio::inherit()) .stderr(std::process::Stdio::inherit()) .current_dir("./src/zisk"); + } println!("{build_command:?}"); println!("{setup_command:?}"); @@ -145,6 +153,7 @@ fn build_zisk_program() { .status() .expect("Failed to execute zisk build command"); + #[cfg(not(feature = "ci"))] let setup_status = setup_command .status() .expect("Failed to execute zisk setup command"); @@ -159,6 +168,7 @@ fn build_zisk_program() { if !build_status.success() { panic!("Failed to build guest program with zisk toolchain"); } + #[cfg(not(feature = "ci"))] if !setup_status.success() { panic!("Failed to setup compiled guest program with zisk toolchain"); } From 958038944ed337f9bc11fc52e1ffe647aee7f450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 17:51:27 -0300 Subject: [PATCH 88/92] add ci feature to prover --- crates/l2/prover/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/l2/prover/Cargo.toml b/crates/l2/prover/Cargo.toml index c67efd64d38..e88a985ffe3 100644 --- a/crates/l2/prover/Cargo.toml +++ b/crates/l2/prover/Cargo.toml @@ -70,6 +70,7 @@ l2 = [ "guest_program/l2", "ethrex-l2/l2", ] # the prover can work with either l1 or l2 blocks +ci = ["guest_program/ci"] [lints.clippy] unwrap_used = "deny" From 3aa7db5a06960d8a992feb8f3c6e76b06ad6e039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 18:01:10 -0300 Subject: [PATCH 89/92] fmt --- crates/l2/prover/src/guest_program/build.rs | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index e25c0ba3749..f4dee1b78a6 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -128,18 +128,18 @@ fn build_zisk_program() { .current_dir("./src/zisk"); #[cfg(not(feature = "ci"))] { - setup_command - .env("RUSTC", rustc_path("zisk")) - .env_remove("RUSTFLAGS") - .env_remove("CARGO_ENCODED_RUSTFLAGS") - .args([ - "rom-setup", - "-e", - "./target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program", - ]) - .stdout(std::process::Stdio::inherit()) - .stderr(std::process::Stdio::inherit()) - .current_dir("./src/zisk"); + setup_command + .env("RUSTC", rustc_path("zisk")) + .env_remove("RUSTFLAGS") + .env_remove("CARGO_ENCODED_RUSTFLAGS") + .args([ + "rom-setup", + "-e", + "./target/riscv64ima-zisk-zkvm-elf/release/zkvm-zisk-program", + ]) + .stdout(std::process::Stdio::inherit()) + .stderr(std::process::Stdio::inherit()) + .current_dir("./src/zisk"); } println!("{build_command:?}"); From 5a843d3aedd1ee42c3702a3d25a8b41f7250a7e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 18:04:14 -0300 Subject: [PATCH 90/92] fix --- crates/l2/prover/src/guest_program/build.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index f4dee1b78a6..388664a60e5 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -143,6 +143,7 @@ fn build_zisk_program() { } println!("{build_command:?}"); + #[cfg(not(feature = "ci"))] println!("{setup_command:?}"); println!("CWD = {}", std::env::current_dir().unwrap().display()); From b56f0c35cef0112a0cad5b255466da0b0ec6b610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 19:10:29 -0300 Subject: [PATCH 91/92] add ci flag comments --- crates/l2/prover/Cargo.toml | 2 ++ crates/l2/prover/src/guest_program/Cargo.toml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/crates/l2/prover/Cargo.toml b/crates/l2/prover/Cargo.toml index e88a985ffe3..7a27eeca009 100644 --- a/crates/l2/prover/Cargo.toml +++ b/crates/l2/prover/Cargo.toml @@ -70,6 +70,8 @@ l2 = [ "guest_program/l2", "ethrex-l2/l2", ] # the prover can work with either l1 or l2 blocks + +# temporary feature until we fix cargo-zisk setup-rom from failing in the CI ci = ["guest_program/ci"] [lints.clippy] diff --git a/crates/l2/prover/src/guest_program/Cargo.toml b/crates/l2/prover/src/guest_program/Cargo.toml index 800c6b74ff6..914d0465a3e 100644 --- a/crates/l2/prover/src/guest_program/Cargo.toml +++ b/crates/l2/prover/src/guest_program/Cargo.toml @@ -50,6 +50,8 @@ secp256k1 = [ "ethrex-vm/secp256k1", "ethrex-l2-common/secp256k1", ] + +# temporary feature until we fix cargo-zisk setup-rom from failing in the CI ci = [] # When this feature is enabled, the cycles used in the code inside the From d26cd81eedb7c9358edfb2e427f10f658ee13c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9fano=20Bargas?= Date: Tue, 25 Nov 2025 19:10:31 -0300 Subject: [PATCH 92/92] add ci flag to release --- .github/workflows/tag_release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tag_release.yaml b/.github/workflows/tag_release.yaml index 2d1e86e54e7..7f71e134db0 100644 --- a/.github/workflows/tag_release.yaml +++ b/.github/workflows/tag_release.yaml @@ -205,7 +205,7 @@ jobs: - name: Build ethrex elf - ${{ matrix.zkvm }} run: | - cargo build --release --package guest_program --features ${{ matrix.zkvm }} + cargo build --release --package guest_program --features "${{ matrix.zkvm }},ci" mkdir -p ${{ matrix.zkvm }}_verification_keys if [ "${{ matrix.zkvm }}" = "sp1" ]; then mv crates/l2/prover/src/guest_program/src/${{ matrix.zkvm }}/out/riscv32im-succinct-zkvm-elf ethrex-riscv32im-${{ matrix.zkvm }}-elf-${{ github.ref_name }}