diff --git a/Cargo.lock b/Cargo.lock index c5d749431d..2df127895c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -94,44 +94,51 @@ dependencies = [ ] [[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +name = "alloy-eip2930" +version = "0.1.0" +source = "git+https://github.com/scroll-tech/alloy-eips?branch=v0.3.2#8d5fc83fc257b09510dc8d76561188218d9c0c32" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "serde", +] [[package]] -name = "alloy-eips" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9431c99a3b3fe606ede4b3d4043bdfbcb780c45b8d8d226c3804e2b75cfbe68" +name = "alloy-eip7702" +version = "0.3.2" +source = "git+https://github.com/scroll-tech/alloy-eips?branch=v0.3.2#8d5fc83fc257b09510dc8d76561188218d9c0c32" dependencies = [ "alloy-primitives", "alloy-rlp", - "c-kzg", + "derive_more 1.0.0", "k256", - "once_cell", "serde", ] [[package]] name = "alloy-primitives" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" +version = "0.8.10" +source = "git+https://github.com/scroll-tech/alloy-core?branch=v0.8.10#66d76d8f7e17501ce13df584122887bee088c6bb" dependencies = [ "alloy-rlp", "bytes", "cfg-if 1.0.0", "const-hex", - "derive_more", + "derive_more 1.0.0", + "foldhash", + "hashbrown 0.15.0", "hex-literal", + "indexmap", "itoa", "k256", "keccak-asm", + "paste", "proptest", "rand", "ruint", + "rustc-hash 2.0.0", "serde", + "sha3 0.10.8", "tiny-keccak", ] @@ -984,12 +991,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - [[package]] name = "core-foundation" version = "0.9.4" @@ -1226,13 +1227,32 @@ version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ - "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.1", "syn 2.0.77", ] +[[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 = [ + "proc-macro2", + "quote", + "syn 2.0.77", + "unicode-xid", +] + [[package]] name = "diff" version = "0.1.13" @@ -1853,6 +1873,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -2134,7 +2160,7 @@ dependencies = [ "num-integer", "num-traits", "rand_chacha", - "rustc-hash", + "rustc-hash 1.1.0", ] [[package]] @@ -2289,9 +2315,14 @@ name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" dependencies = [ - "ahash", - "allocator-api2", + "foldhash", ] [[package]] @@ -3433,7 +3464,7 @@ dependencies = [ [[package]] name = "poseidon-base" version = "0.1.0" -source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main#6cc36ab9dfa153f554ff7b84305f39838366a8df" +source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main#b978cee00aae1e0a1e79e0d74c4683b137f5ea2d" dependencies = [ "bitvec", "halo2curves", @@ -3444,7 +3475,7 @@ dependencies = [ [[package]] name = "poseidon-circuit" version = "0.1.0" -source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main#6cc36ab9dfa153f554ff7b84305f39838366a8df" +source = "git+https://github.com/scroll-tech/poseidon-circuit.git?branch=main#b978cee00aae1e0a1e79e0d74c4683b137f5ea2d" dependencies = [ "ff", "halo2_proofs", @@ -3818,14 +3849,15 @@ dependencies = [ [[package]] name = "revm-precompile" -version = "9.2.0" -source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v40#5e215742c4d9d771f73d74fcba39628b1a2e3452" +version = "14.0.0" +source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v49#a8438521f63b5c259bb395b30db59f24a9922e64" dependencies = [ "aurora-engine-modexp", "c-kzg", "cfg-if 1.0.0", "k256", "once_cell", + "p256", "revm-primitives", "ripemd", "secp256k1 0.29.1", @@ -3835,22 +3867,20 @@ dependencies = [ [[package]] name = "revm-primitives" -version = "7.1.0" -source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v40#5e215742c4d9d771f73d74fcba39628b1a2e3452" +version = "13.0.0" +source = "git+https://github.com/scroll-tech/revm?branch=scroll-evm-executor/v49#a8438521f63b5c259bb395b30db59f24a9922e64" dependencies = [ - "alloy-eips", + "alloy-eip2930", + "alloy-eip7702", "alloy-primitives", "auto_impl", "bitflags 2.6.0", "bitvec", "c-kzg", "cfg-if 1.0.0", - "derive_more", "dyn-clone", "enumn", - "hashbrown 0.14.5", "hex", - "once_cell", "serde", ] @@ -3985,6 +4015,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -4112,7 +4148,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" dependencies = [ "cfg-if 1.0.0", - "derive_more", + "derive_more 0.99.18", "parity-scale-codec", "scale-info-derive", ] @@ -4450,7 +4486,7 @@ dependencies = [ "rand", "revm", "rlp", - "rustc-hash", + "rustc-hash 1.1.0", "serde", "sha3 0.10.8", ] diff --git a/Cargo.toml b/Cargo.toml index af433433c5..a84b596c6b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,11 +64,14 @@ strum_macros = "0.25" subtle = "2.4" tokio = { version = "1.13", features = ["macros", "rt-multi-thread"] } url = "2.2" -revm-precompile = { git = "https://github.com/scroll-tech/revm", branch = "scroll-evm-executor/v40", default-features = false, features = ["std"] } # v40 -revm-primitives = { git = "https://github.com/scroll-tech/revm", branch = "scroll-evm-executor/v40", default-features = false, features = ["std"] } # v40 +revm-precompile = { git = "https://github.com/scroll-tech/revm", branch = "scroll-evm-executor/v49", default-features = false, features = ["std"] } +revm-primitives = { git = "https://github.com/scroll-tech/revm", branch = "scroll-evm-executor/v49", default-features = false, features = ["std"] } c-kzg = "1.0.2" [patch.crates-io] +alloy-eip2930 = { git = "https://github.com/scroll-tech/alloy-eips", branch = "v0.3.2" } +alloy-eip7702 = { git = "https://github.com/scroll-tech/alloy-eips", branch = "v0.3.2" } +alloy-primitives = { git = "https://github.com/scroll-tech/alloy-core", branch = "v0.8.10" } ethers-core = { git = "https://github.com/scroll-tech/ethers-rs.git", branch = "v2.0.7" } ethers-providers = { git = "https://github.com/scroll-tech/ethers-rs.git", branch = "v2.0.7" } ethers = { git = "https://github.com/scroll-tech/ethers-rs.git", branch = "v2.0.7" } diff --git a/aggregator/src/aggregation/barycentric.rs b/aggregator/src/aggregation/barycentric.rs index f485eac9b8..556411c505 100644 --- a/aggregator/src/aggregation/barycentric.rs +++ b/aggregator/src/aggregation/barycentric.rs @@ -354,7 +354,7 @@ pub fn interpolate(z: Scalar, coefficients: &[Scalar; BLOB_WIDTH]) -> Scalar { mod tests { use super::*; use crate::{ - blob::{BatchData, KZG_TRUSTED_SETUP}, + blob::BatchData, eip4844::{get_blob_bytes, get_coefficients}, MAX_AGG_SNARKS, }; @@ -423,8 +423,12 @@ mod tests { .collect::>(), ) .unwrap(); - let (_proof, y) = - KzgProof::compute_kzg_proof(&blob, &to_be_bytes(z).into(), &KZG_TRUSTED_SETUP).unwrap(); + let (_proof, y) = KzgProof::compute_kzg_proof( + &blob, + &to_be_bytes(z).into(), + c_kzg::ethereum_kzg_settings(), + ) + .unwrap(); from_canonical_be_bytes(*y) } diff --git a/aggregator/src/blob.rs b/aggregator/src/blob.rs index d52c0c4333..440e3c3c55 100644 --- a/aggregator/src/blob.rs +++ b/aggregator/src/blob.rs @@ -43,16 +43,12 @@ pub const N_BLOB_BYTES: usize = BLOB_WIDTH * N_DATA_BYTES_PER_COEFFICIENT; /// Allow up to 5x compression via zstd encoding of the batch data. pub const N_BATCH_BYTES: usize = N_BLOB_BYTES * 5; -/// KZG trusted setup -pub static KZG_TRUSTED_SETUP: Lazy> = Lazy::new(|| { - Arc::new( - c_kzg::KzgSettings::load_trusted_setup( - &revm_primitives::kzg::G1_POINTS.0, - &revm_primitives::kzg::G2_POINTS.0, - ) - .expect("failed to load trusted setup"), - ) -}); +// /// KZG trusted setup +// pub static KZG_TRUSTED_SETUP: Lazy> = Lazy::new(|| { +// Arc::new( +// c_kzg::ethereum_kzg_settings() +// ) +// }); /// Helper struct to generate witness for the Batch Data Config. #[derive(Clone, Debug)] diff --git a/aggregator/src/eip4844.rs b/aggregator/src/eip4844.rs index 5f4a29a5dc..81fc8e31e1 100644 --- a/aggregator/src/eip4844.rs +++ b/aggregator/src/eip4844.rs @@ -2,7 +2,7 @@ use eth_types::{ToBigEndian, H256, U256}; use ethers_core::k256::sha2::{Digest, Sha256}; use revm_primitives::VERSIONED_HASH_VERSION_KZG; -use crate::blob::{BLOB_WIDTH, KZG_TRUSTED_SETUP, N_BLOB_BYTES, N_BYTES_U256}; +use crate::blob::{BLOB_WIDTH, N_BLOB_BYTES, N_BYTES_U256}; /// Get the BLOB_WIDTH number of scalar field elements, as 32-bytes unsigned integers. pub(crate) fn get_coefficients(blob_bytes: &[u8]) -> [U256; BLOB_WIDTH] { @@ -30,7 +30,7 @@ pub(crate) fn get_versioned_hash(coefficients: &[U256; BLOB_WIDTH]) -> H256 { .collect::>(), ) .expect("blob-coefficients to 4844 blob should succeed"); - let c = c_kzg::KzgCommitment::blob_to_kzg_commitment(&blob, &KZG_TRUSTED_SETUP) + let c = c_kzg::KzgCommitment::blob_to_kzg_commitment(&blob, c_kzg::ethereum_kzg_settings()) .expect("blob to kzg commitment should succeed"); kzg_to_versioned_hash(&c) } diff --git a/bus-mapping/src/circuit_input_builder/input_state_ref.rs b/bus-mapping/src/circuit_input_builder/input_state_ref.rs index 7db59310ee..2e61958075 100644 --- a/bus-mapping/src/circuit_input_builder/input_state_ref.rs +++ b/bus-mapping/src/circuit_input_builder/input_state_ref.rs @@ -1872,7 +1872,7 @@ impl<'a> CircuitInputStateRef<'a> { // on top of the stack (step.stack.last()) // Therefore we postpone the oog handling to the implementor of callop. if is_precompiled(&code_address) { - let precompile_call: PrecompileCalls = code_address[19].into(); + let precompile_call: PrecompileCalls = code_address.into(); match precompile_call { PrecompileCalls::Ripemd160 | PrecompileCalls::Blake2F => { // Log the precompile address and gas left. Since this failure is mainly diff --git a/bus-mapping/src/evm/opcodes/begin_end_tx.rs b/bus-mapping/src/evm/opcodes/begin_end_tx.rs index aace0978d4..095f5ce1d4 100644 --- a/bus-mapping/src/evm/opcodes/begin_end_tx.rs +++ b/bus-mapping/src/evm/opcodes/begin_end_tx.rs @@ -418,7 +418,7 @@ pub fn gen_begin_tx_steps(state: &mut CircuitInputStateRef) -> Result Opcode for CallOpcode { // 1. Call to precompiled. (false, true, _) => { let code_address = code_address.unwrap(); - let precompile_call: PrecompileCalls = code_address.0[19].into(); + let precompile_call: PrecompileCalls = code_address.into(); // get the result of the precompile call. // For failed call, it will cost all gas provided. diff --git a/bus-mapping/src/lib.rs b/bus-mapping/src/lib.rs index e7a239ef0d..eb81d766e8 100644 --- a/bus-mapping/src/lib.rs +++ b/bus-mapping/src/lib.rs @@ -218,7 +218,6 @@ #![allow(clippy::result_large_err)] // it's large, but what can we do? #![allow(clippy::collapsible_else_if)] #![allow(incomplete_features)] -#![feature(lazy_cell)] #![feature(adt_const_params)] extern crate alloc; diff --git a/bus-mapping/src/precompile.rs b/bus-mapping/src/precompile.rs index 3c2c52bd7e..edf2dc14b8 100644 --- a/bus-mapping/src/precompile.rs +++ b/bus-mapping/src/precompile.rs @@ -12,7 +12,7 @@ pub(crate) fn execute_precompiled( gas: u64, ) -> (Vec, u64, bool) { #[cfg(feature = "scroll")] - let precompiles = Precompiles::bernoulli(); + let precompiles = Precompiles::euclid(); #[cfg(not(feature = "scroll"))] let precompiles = Precompiles::berlin(); @@ -62,6 +62,8 @@ pub enum PrecompileCalls { Bn128Pairing = 0x08, /// Compression function Blake2F = 0x09, + /// secp256r1 verify + P256Verify = 0x100, } impl Default for PrecompileCalls { @@ -90,8 +92,14 @@ impl From for usize { } } -impl From for PrecompileCalls { - fn from(value: u8) -> Self { +impl From
for PrecompileCalls { + fn from(value: Address) -> Self { + u64::from_be_bytes(value.0[12..].try_into().unwrap()).into() + } +} + +impl From for PrecompileCalls { + fn from(value: u64) -> Self { match value { 0x01 => Self::Ecrecover, 0x02 => Self::Sha256, @@ -102,6 +110,7 @@ impl From for PrecompileCalls { 0x07 => Self::Bn128Mul, 0x08 => Self::Bn128Pairing, 0x09 => Self::Blake2F, + 0x100 => Self::P256Verify, _ => unreachable!("precompile contracts only from 0x01 to 0x09"), } } @@ -120,6 +129,7 @@ impl PrecompileCalls { Self::Bn128Mul => GasCost::PRECOMPILE_BN256MUL, Self::Bn128Pairing => GasCost::PRECOMPILE_BN256PAIRING, Self::Blake2F => GasCost::PRECOMPILE_BLAKE2F, + Self::P256Verify => GasCost::PRECOMPILE_P256VERIFY, } } diff --git a/eth-types/src/evm_types.rs b/eth-types/src/evm_types.rs index 521897f95d..7775febc48 100644 --- a/eth-types/src/evm_types.rs +++ b/eth-types/src/evm_types.rs @@ -196,6 +196,8 @@ impl GasCost { pub const PRECOMPILE_MODEXP_MIN: Self = Self(200); /// Base gas cost for precompile call: BLAKE2F pub const PRECOMPILE_BLAKE2F: Self = Self(0); + /// Base gas cost for precompile call: P256VERIFY + pub const PRECOMPILE_P256VERIFY: Self = Self(3450); /// Gas cost per address in tx access list (EIP 2930) pub const ACCESS_LIST_PER_ADDRESS: Self = Self(2400); /// Gas cost per storage key in tx access list (EIP 2930) diff --git a/eth-types/src/lib.rs b/eth-types/src/lib.rs index 92e2ecd336..c0461dcb29 100644 --- a/eth-types/src/lib.rs +++ b/eth-types/src/lib.rs @@ -10,7 +10,6 @@ #![deny(rustdoc::broken_intra_doc_links)] // GasCost is used as type parameter #![feature(adt_const_params)] -#![feature(lazy_cell)] #![deny(missing_docs)] //#![deny(unsafe_code)] Allowed now until we find a // better way to handle downcasting from Operation into it's variants. diff --git a/mock/src/lib.rs b/mock/src/lib.rs index 5d7c89c2cc..a7e8a1602e 100644 --- a/mock/src/lib.rs +++ b/mock/src/lib.rs @@ -1,4 +1,3 @@ -#![feature(lazy_cell)] //! Mock types and functions to generate GethData used for tests use eth_types::{address, bytecode, bytecode::Bytecode, word, Address, Bytes, Word}; diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 584353ad1c..804a8d6114 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "nightly-2024-01-25" +channel = "nightly-2024-07-07" diff --git a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs index be786f8da2..cc271da102 100644 --- a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs +++ b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs @@ -1019,7 +1019,7 @@ impl ExecutionGadget for BeginTxGadget { .map(is_precompiled) .unwrap_or_default() { - let precompile_call: PrecompileCalls = tx.callee_address.unwrap().0[19].into(); + let precompile_call: PrecompileCalls = tx.callee_address.unwrap().into(); let input_len = if let Some(input_len) = precompile_call.input_len() { std::cmp::min(input_len, tx.call_data_length) } else { diff --git a/zkevm-circuits/src/evm_circuit/execution/callop.rs b/zkevm-circuits/src/evm_circuit/execution/callop.rs index 102f8511fc..f087794111 100644 --- a/zkevm-circuits/src/evm_circuit/execution/callop.rs +++ b/zkevm-circuits/src/evm_circuit/execution/callop.rs @@ -996,7 +996,7 @@ impl ExecutionGadget for CallOpGadget { output_rws, return_rws, ) = if is_precheck_ok && is_precompiled(&callee_address.to_address()) { - let precompile_call: PrecompileCalls = precompile_addr.0[19].into(); + let precompile_call: PrecompileCalls = precompile_addr.into(); let input_len = if let Some(input_len) = precompile_call.input_len() { min(input_len, cd_length.as_usize()) } else { @@ -1147,7 +1147,7 @@ impl ExecutionGadget for CallOpGadget { if is_precompile_call { self.precompile_gadget - .assign(region, offset, precompile_addr.0[19].into())?; + .assign(region, offset, precompile_addr.into())?; } Ok(()) diff --git a/zkevm-circuits/src/evm_circuit/execution/error_oog_precompile.rs b/zkevm-circuits/src/evm_circuit/execution/error_oog_precompile.rs index 94be1f8958..d8ba874a47 100644 --- a/zkevm-circuits/src/evm_circuit/execution/error_oog_precompile.rs +++ b/zkevm-circuits/src/evm_circuit/execution/error_oog_precompile.rs @@ -193,7 +193,7 @@ impl ExecutionGadget for ErrorOOGPrecompileGadget { )?; // required_gas - let precompile_call: PrecompileCalls = precompile_addr.to_fixed_bytes()[19].into(); + let precompile_call: PrecompileCalls = precompile_addr.into(); let required_gas = match precompile_call { PrecompileCalls::Bn128Pairing => { precompile_call.base_gas_cost().as_u64() diff --git a/zkevm-circuits/src/evm_circuit/step.rs b/zkevm-circuits/src/evm_circuit/step.rs index 757e9385bc..cdb1411810 100644 --- a/zkevm-circuits/src/evm_circuit/step.rs +++ b/zkevm-circuits/src/evm_circuit/step.rs @@ -30,6 +30,7 @@ impl From for ExecutionState { PrecompileCalls::Bn128Mul => ExecutionState::PrecompileBn256ScalarMul, PrecompileCalls::Bn128Pairing => ExecutionState::PrecompileBn256Pairing, PrecompileCalls::Blake2F => ExecutionState::PrecompileBlake2f, + PrecompileCalls::P256Verify => todo!("P256Verify"), } } } diff --git a/zkevm-circuits/src/lib.rs b/zkevm-circuits/src/lib.rs index 3f9eebae0e..833901890f 100644 --- a/zkevm-circuits/src/lib.rs +++ b/zkevm-circuits/src/lib.rs @@ -6,7 +6,6 @@ // Needed by DummyGadget in evm circuit #![feature(adt_const_params)] #![feature(trait_alias)] -#![feature(lazy_cell)] // Needed by some builder patterns in testing modules. #![cfg_attr(docsrs, feature(doc_cfg))] // Temporary until we have more of the crate implemented. diff --git a/zkevm-circuits/src/witness/step.rs b/zkevm-circuits/src/witness/step.rs index 9c9e6e16fa..86f1dd1baf 100644 --- a/zkevm-circuits/src/witness/step.rs +++ b/zkevm-circuits/src/witness/step.rs @@ -235,6 +235,7 @@ impl From<&circuit_input_builder::ExecStep> for ExecutionState { PrecompileCalls::Bn128Mul => ExecutionState::PrecompileBn256ScalarMul, PrecompileCalls::Bn128Pairing => ExecutionState::PrecompileBn256Pairing, PrecompileCalls::Blake2F => ExecutionState::PrecompileBlake2f, + PrecompileCalls::P256Verify => todo!("P256Verify"), }, circuit_input_builder::ExecState::BeginTx => ExecutionState::BeginTx, circuit_input_builder::ExecState::EndTx => ExecutionState::EndTx,