From 696112cd4d7f67e1d98cfaa6962b5216dbe8a037 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 7 Aug 2025 15:18:49 +0800 Subject: [PATCH 01/84] cargo check --- Cargo.lock | 54 ++++++++++++--- Cargo.toml | 2 +- crates/circuits/batch-circuit/Cargo.toml | 1 + crates/circuits/batch-circuit/src/circuit.rs | 18 +++-- crates/circuits/bundle-circuit/Cargo.toml | 1 + crates/circuits/bundle-circuit/src/circuit.rs | 18 +++-- crates/circuits/chunk-circuit/Cargo.toml | 1 + crates/circuits/chunk-circuit/src/circuit.rs | 18 ++--- crates/integration/src/lib.rs | 4 +- crates/integration/src/testers/batch.rs | 2 +- crates/integration/src/testers/bundle.rs | 2 +- crates/integration/src/utils/mod.rs | 18 ++--- crates/types/base/src/public_inputs/batch.rs | 15 ---- crates/types/base/src/public_inputs/chunk.rs | 34 --------- crates/types/batch/Cargo.toml | 1 + crates/types/batch/src/header/mod.rs | 2 +- crates/types/batch/src/header/v6.rs | 62 ----------------- crates/types/batch/src/header/v7.rs | 43 ------------ crates/types/batch/src/witness.rs | 69 ++++++++++++------- crates/types/bundle/Cargo.toml | 1 + crates/types/bundle/src/witness.rs | 29 ++++---- crates/types/chunk/Cargo.toml | 1 + crates/types/chunk/src/execute.rs | 30 ++++---- crates/types/chunk/src/witness.rs | 11 ++- crates/types/src/lib.rs | 43 +----------- 25 files changed, 178 insertions(+), 302 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d5f3c265..03ae9fda 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -935,6 +935,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" @@ -6588,6 +6608,7 @@ name = "scroll-zkvm-batch-circuit" version = "0.5.0" dependencies = [ "alloy-primitives", + "bincode 2.0.1", "bitcode", "c-kzg", "halo2curves-axiom 0.7.0", @@ -6647,6 +6668,7 @@ name = "scroll-zkvm-bundle-circuit" version = "0.5.0" dependencies = [ "alloy-primitives", + "bincode 2.0.1", "openvm", "openvm-algebra-guest", "openvm-keccak256-guest", @@ -6660,6 +6682,7 @@ dependencies = [ name = "scroll-zkvm-chunk-circuit" version = "0.5.0" dependencies = [ + "bincode 2.0.1", "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm", "openvm-algebra-complex-macros", @@ -6722,7 +6745,7 @@ version = "0.5.0" dependencies = [ "alloy-primitives", "base64", - "bincode", + "bincode 1.3.3", "c-kzg", "eyre", "git-version", @@ -6759,7 +6782,7 @@ name = "scroll-zkvm-types" version = "0.5.0" dependencies = [ "base64", - "bincode", + "bincode 1.3.3", "c-kzg", "openvm-continuations", "openvm-native-recursion", @@ -6794,6 +6817,7 @@ name = "scroll-zkvm-types-batch" version = "0.5.0" dependencies = [ "alloy-primitives", + "bincode 2.0.1", "c-kzg", "halo2curves-axiom 0.7.0", "itertools 0.14.0", @@ -6814,6 +6838,7 @@ name = "scroll-zkvm-types-bundle" version = "0.5.0" dependencies = [ "alloy-primitives", + "bincode 2.0.1", "itertools 0.14.0", "rkyv", "scroll-zkvm-types-base", @@ -6826,6 +6851,7 @@ name = "scroll-zkvm-types-chunk" version = "0.5.0" dependencies = [ "alloy-primitives", + "bincode 2.0.1", "itertools 0.14.0", "openvm", "openvm-custom-insn", @@ -6860,7 +6886,7 @@ name = "scroll-zkvm-verifier" version = "0.5.0" dependencies = [ "base64", - "bincode", + "bincode 1.3.3", "eyre", "itertools 0.14.0", "once_cell", @@ -7227,7 +7253,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a338d065044702bf751e87cf353daac63e2fc4c53a3e323cbcd98c603ee6e66c" dependencies = [ "ark-std 0.3.0", - "bincode", + "bincode 1.3.3", "ethereum-types", "getset", "halo2-base", @@ -7250,7 +7276,7 @@ version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03046db52868c1b60e8acffa0777ef6dc11ec1bbbb10b9eb612a871f69c8d3f6" dependencies = [ - "bincode", + "bincode 1.3.3", "serde", "sp1-primitives", ] @@ -7261,7 +7287,7 @@ version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6939d6b2f63e54e5fbd208a0293027608f22511741b62fe32b6f67f6c144e0c0" dependencies = [ - "bincode", + "bincode 1.3.3", "blake3", "cfg-if", "hex", @@ -7851,6 +7877,12 @@ dependencies = [ "syn 1.0.109", ] +[[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.4" @@ -7896,6 +7928,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 = "vm-zstd" version = "0.1.1" @@ -8061,9 +8099,9 @@ dependencies = [ [[package]] name = "windows-link" -version = "0.1.3" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] name = "windows-result" diff --git a/Cargo.toml b/Cargo.toml index d8a88434..70304397 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -69,7 +69,7 @@ alloy-primitives = { version = "1.2", default-features = false, features = ["std alloy-serde = { version = "1.0.13", default-features = false } bitcode = { version = "0.6.5", default-features = false, features = ["serde", "derive"] } bincode_v1 = { version = "1.3", package = "bincode"} -bincode = { version = "2.0" } +bincode = { version = "2.0", features = ["serde"] } cargo_metadata = "0.20" c-kzg = { version = "2.0" } derivative = "2.2.0" diff --git a/crates/circuits/batch-circuit/Cargo.toml b/crates/circuits/batch-circuit/Cargo.toml index de32cbf3..aae02382 100644 --- a/crates/circuits/batch-circuit/Cargo.toml +++ b/crates/circuits/batch-circuit/Cargo.toml @@ -6,6 +6,7 @@ repository.workspace = true version = "0.5.0" [dependencies] +bincode.workspace = true scroll-zkvm-types-circuit.workspace = true scroll-zkvm-types-batch.workspace = true diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index 8283674a..37bb5a7b 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -1,5 +1,5 @@ use alloy_primitives::B256; -use scroll_zkvm_types_batch::ArchivedBatchWitness; +use scroll_zkvm_types_batch::BatchWitness; use scroll_zkvm_types_circuit::{ AggCircuit, AggregationInput, Circuit, ProgramCommitment, io::read_witnesses, @@ -25,7 +25,7 @@ openvm::init!(); pub struct BatchCircuit; impl Circuit for BatchCircuit { - type Witness = ArchivedBatchWitness; + type Witness = BatchWitness; type PublicInputs = VersionedBatchInfo; @@ -34,12 +34,16 @@ impl Circuit for BatchCircuit { } fn deserialize_witness(witness_bytes: &[u8]) -> &Self::Witness { - rkyv::access::(witness_bytes) - .expect("BatchCircuit: rkyc deserialisation of witness bytes failed") + let config = bincode::config::standard(); + let (witness, _): (Self::Witness, _) = + bincode::serde::decode_from_slice(witness_bytes, config).unwrap(); + Box::leak(Box::new(witness)) + // rkyv::access::(witness_bytes) + // .expect("BatchCircuit: rkyc deserialisation of witness bytes failed") } fn validate(witness: &Self::Witness) -> Self::PublicInputs { - (BatchInfo::from(witness), (&witness.fork_name).into()) + (BatchInfo::from(witness), (witness.fork_name.clone())) } } @@ -64,11 +68,11 @@ impl AggCircuit for BatchCircuit { } fn aggregated_public_inputs(witness: &Self::Witness) -> Vec { - let fork_name = (&witness.fork_name).into(); + let fork_name = (witness.fork_name).clone(); witness .chunk_infos .iter() - .map(|archived| (archived.into(), fork_name)) + .map(|archived| (archived.clone(), fork_name)) .collect() } diff --git a/crates/circuits/bundle-circuit/Cargo.toml b/crates/circuits/bundle-circuit/Cargo.toml index a51da15b..7bdce203 100644 --- a/crates/circuits/bundle-circuit/Cargo.toml +++ b/crates/circuits/bundle-circuit/Cargo.toml @@ -6,6 +6,7 @@ repository.workspace = true version = "0.5.0" [dependencies] +bincode.workspace = true scroll-zkvm-types-circuit.workspace = true scroll-zkvm-types-bundle.workspace = true diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index 34449cc8..2d97e81b 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -1,5 +1,5 @@ use alloy_primitives::B256; -use scroll_zkvm_types_bundle::ArchivedBundleWitness; +use scroll_zkvm_types_bundle::BundleWitness; use scroll_zkvm_types_circuit::{ AggCircuit, AggregationInput, Circuit, ProgramCommitment, io::read_witnesses, @@ -18,7 +18,7 @@ use openvm_keccak256_guest; pub struct BundleCircuit; impl Circuit for BundleCircuit { - type Witness = ArchivedBundleWitness; + type Witness = BundleWitness; type PublicInputs = VersionedBundleInfo; @@ -27,12 +27,16 @@ impl Circuit for BundleCircuit { } fn deserialize_witness(witness_bytes: &[u8]) -> &Self::Witness { - rkyv::access::(witness_bytes) - .expect("BundleCircuit: rkyv deserialization of witness bytes failed") + let config = bincode::config::standard(); + let (witness, _): (Self::Witness, _) = + bincode::serde::decode_from_slice(witness_bytes, config).unwrap(); + Box::leak(Box::new(witness)) + // rkyv::access::(witness_bytes) + // .expect("BundleCircuit: rkyv deserialization of witness bytes failed") } fn validate(witness: &Self::Witness) -> Self::PublicInputs { - (BundleInfo::from(witness), (&witness.fork_name).into()) + (BundleInfo::from(witness), (witness.fork_name).clone()) } } @@ -57,11 +61,11 @@ impl AggCircuit for BundleCircuit { } fn aggregated_public_inputs(witness: &Self::Witness) -> Vec { - let fork_name = (&witness.fork_name).into(); + let fork_name = (witness.fork_name).clone(); witness .batch_infos .iter() - .map(|archived| (archived.into(), fork_name)) + .map(|archived| (archived.clone(), fork_name)) .collect() } diff --git a/crates/circuits/chunk-circuit/Cargo.toml b/crates/circuits/chunk-circuit/Cargo.toml index 7fd535ff..407292c1 100644 --- a/crates/circuits/chunk-circuit/Cargo.toml +++ b/crates/circuits/chunk-circuit/Cargo.toml @@ -6,6 +6,7 @@ repository.workspace = true version = "0.5.0" [dependencies] +bincode = { workspace = true, features = ["serde"] } scroll-zkvm-types-circuit = { workspace = true } scroll-zkvm-types-chunk = { workspace = true } sbv-precompile = { workspace = true } diff --git a/crates/circuits/chunk-circuit/src/circuit.rs b/crates/circuits/chunk-circuit/src/circuit.rs index 8b7cdeb5..32eac019 100644 --- a/crates/circuits/chunk-circuit/src/circuit.rs +++ b/crates/circuits/chunk-circuit/src/circuit.rs @@ -1,5 +1,5 @@ use openvm::init; -use scroll_zkvm_types_chunk::ArchivedChunkWitness; +use scroll_zkvm_types_chunk::{ChunkWitness, execute}; use scroll_zkvm_types_circuit::{ Circuit, io::read_witnesses, @@ -22,7 +22,7 @@ init!(); pub struct ChunkCircuit; impl Circuit for ChunkCircuit { - type Witness = ArchivedChunkWitness; + type Witness = ChunkWitness; type PublicInputs = VersionedChunkInfo; fn read_witness_bytes() -> Vec { @@ -30,14 +30,16 @@ impl Circuit for ChunkCircuit { } fn deserialize_witness(witness_bytes: &[u8]) -> &Self::Witness { - rkyv::access::(witness_bytes) - .expect("ChunkCircuit: rkyv deserialisation of witness bytes failed") + let config = bincode::config::standard(); + let (witness, _): (Self::Witness, _) = + bincode::serde::decode_from_slice(witness_bytes, config).unwrap(); + Box::leak(Box::new(witness)) + // rkyv::access::(witness_bytes) + // .expect("ChunkCircuit: rkyv deserialisation of witness bytes failed") } fn validate(witness: &Self::Witness) -> Self::PublicInputs { - ( - ChunkInfo::try_from(witness).expect("failed to execute chunk"), - (&witness.fork_name).into(), - ) + let info = execute(witness).unwrap(); + (info, (witness.fork_name.clone())) } } diff --git a/crates/integration/src/lib.rs b/crates/integration/src/lib.rs index 7dd1d012..a57235a2 100644 --- a/crates/integration/src/lib.rs +++ b/crates/integration/src/lib.rs @@ -72,10 +72,10 @@ static DIR_TESTRUN: OnceCell = OnceCell::new(); /// Circuit that implements functionality required to run e2e tests in specified phase (chunk/batch/bundle). pub trait ProverTester { /// Tester witness type - type Witness: rkyv::Archive + PartialProvingTask; + type Witness: PartialProvingTask;// + rkyv::Archive; /// Tester metadata type - type Metadata: for<'a> TryFrom<&'a ::Archived>; + type Metadata;//: for<'a> TryFrom<&'a ::Archived>; /// Naming for tester const NAME: &str; diff --git a/crates/integration/src/testers/batch.rs b/crates/integration/src/testers/batch.rs index 4faeff4f..e96a7c59 100644 --- a/crates/integration/src/testers/batch.rs +++ b/crates/integration/src/testers/batch.rs @@ -24,7 +24,7 @@ impl PartialProvingTask for BatchWitness { } fn write_guest_input(&self, stdin: &mut openvm_sdk::StdIn) -> Result<(), rkyv::rancor::Error> { - let b = rkyv::to_bytes::(self)?; + let b = self.bincode_serialize(None).unwrap(); stdin.write_bytes(b.as_slice()); Ok(()) } diff --git a/crates/integration/src/testers/bundle.rs b/crates/integration/src/testers/bundle.rs index 76cb5255..e6bfc42a 100644 --- a/crates/integration/src/testers/bundle.rs +++ b/crates/integration/src/testers/bundle.rs @@ -28,7 +28,7 @@ impl PartialProvingTask for BundleWitness { } fn write_guest_input(&self, stdin: &mut openvm_sdk::StdIn) -> Result<(), rkyv::rancor::Error> { - let b = self.rkyv_serialize(None)?; + let b = self.bincode_serialize(None).unwrap(); stdin.write_bytes(b.as_slice()); Ok(()) } diff --git a/crates/integration/src/utils/mod.rs b/crates/integration/src/utils/mod.rs index 9232d1f6..19d158ab 100644 --- a/crates/integration/src/utils/mod.rs +++ b/crates/integration/src/utils/mod.rs @@ -1,7 +1,6 @@ use crate::testing_hardfork; use sbv_primitives::{ - B256, - types::{BlockWitness, Transaction, eips::Encodable2718, reth::primitives::TransactionSigned}, + B256, U256, types::{BlockWitness, Transaction, eips::Encodable2718, reth::primitives::TransactionSigned}, }; use scroll_zkvm_types::{ batch::{ @@ -105,26 +104,17 @@ impl From<&BatchHeaderV7> for LastHeader { } pub fn metadata_from_chunk_witnesses(witness: &ChunkWitness) -> eyre::Result { - use scroll_zkvm_types::chunk::ArchivedChunkWitness; - let bytes = witness.rkyv_serialize(None)?; - let archieved_wit = rkyv::access::(&bytes)?; - archieved_wit + witness .try_into() .map_err(|e| eyre::eyre!("get chunk metadata fail {e}")) } pub fn metadata_from_batch_witnesses(witness: &BatchWitness) -> eyre::Result { - use scroll_zkvm_types::batch::ArchivedBatchWitness; - let bytes = rkyv::to_bytes::(witness)?; - let archieved_wit = rkyv::access::(&bytes)?; - Ok(archieved_wit.into()) + Ok(witness.into()) } pub fn metadata_from_bundle_witnesses(witness: &BundleWitness) -> eyre::Result { - use scroll_zkvm_types::bundle::ArchivedBundleWitness; - let bytes = witness.rkyv_serialize(None)?; - let archieved_wit = rkyv::access::(&bytes)?; - Ok(archieved_wit.into()) + Ok(witness.into()) } pub fn build_batch_witnesses( diff --git a/crates/types/base/src/public_inputs/batch.rs b/crates/types/base/src/public_inputs/batch.rs index 139c8b0f..be93c409 100644 --- a/crates/types/base/src/public_inputs/batch.rs +++ b/crates/types/base/src/public_inputs/batch.rs @@ -43,21 +43,6 @@ pub struct BatchInfo { pub post_msg_queue_hash: B256, } -impl From<&ArchivedBatchInfo> for BatchInfo { - fn from(archived: &ArchivedBatchInfo) -> Self { - Self { - parent_state_root: archived.parent_state_root.into(), - parent_batch_hash: archived.parent_batch_hash.into(), - state_root: archived.state_root.into(), - batch_hash: archived.batch_hash.into(), - chain_id: archived.chain_id.into(), - withdraw_root: archived.withdraw_root.into(), - prev_msg_queue_hash: archived.prev_msg_queue_hash.into(), - post_msg_queue_hash: archived.post_msg_queue_hash.into(), - } - } -} - impl BatchInfo { /// Public input hash for a batch (euclidv1 or da-codec@v6) is defined as /// diff --git a/crates/types/base/src/public_inputs/chunk.rs b/crates/types/base/src/public_inputs/chunk.rs index 907713b8..14e775d9 100644 --- a/crates/types/base/src/public_inputs/chunk.rs +++ b/crates/types/base/src/public_inputs/chunk.rs @@ -38,18 +38,6 @@ pub struct BlockContextV2 { pub num_l1_msgs: u16, } -impl From<&ArchivedBlockContextV2> for BlockContextV2 { - fn from(archived: &ArchivedBlockContextV2) -> Self { - Self { - timestamp: archived.timestamp.into(), - base_fee: archived.base_fee.into(), - gas_limit: archived.gas_limit.into(), - num_txs: archived.num_txs.into(), - num_l1_msgs: archived.num_l1_msgs.into(), - } - } -} - impl From<&[u8]> for BlockContextV2 { fn from(bytes: &[u8]) -> Self { assert_eq!(bytes.len(), SIZE_BLOCK_CTX); @@ -214,28 +202,6 @@ impl ChunkInfo { } } -impl From<&ArchivedChunkInfo> for ChunkInfo { - fn from(archived: &ArchivedChunkInfo) -> Self { - Self { - chain_id: archived.chain_id.into(), - prev_state_root: archived.prev_state_root.into(), - post_state_root: archived.post_state_root.into(), - withdraw_root: archived.withdraw_root.into(), - data_hash: archived.data_hash.into(), - tx_data_digest: archived.tx_data_digest.into(), - prev_msg_queue_hash: archived.prev_msg_queue_hash.into(), - post_msg_queue_hash: archived.post_msg_queue_hash.into(), - tx_data_length: archived.tx_data_length.into(), - initial_block_number: archived.initial_block_number.into(), - block_ctxs: archived - .block_ctxs - .iter() - .map(BlockContextV2::from) - .collect(), - } - } -} - pub type VersionedChunkInfo = (ChunkInfo, ForkName); impl MultiVersionPublicInputs for ChunkInfo { diff --git a/crates/types/batch/Cargo.toml b/crates/types/batch/Cargo.toml index 95e82405..bced00ba 100644 --- a/crates/types/batch/Cargo.toml +++ b/crates/types/batch/Cargo.toml @@ -9,6 +9,7 @@ version.workspace = true [dependencies] alloy-primitives = { workspace = true } +bincode = { workspace = true } rkyv.workspace = true serde.workspace = true itertools.workspace = true diff --git a/crates/types/batch/src/header/mod.rs b/crates/types/batch/src/header/mod.rs index eaae2130..fcf9c373 100644 --- a/crates/types/batch/src/header/mod.rs +++ b/crates/types/batch/src/header/mod.rs @@ -25,7 +25,7 @@ pub trait BatchHeader { /// Reference header indicate the version of batch header base on which batch hash /// should be calculated. -#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize)] +#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize, serde::Deserialize, serde::Serialize)] #[rkyv(derive(Debug))] pub enum ReferenceHeader { /// Represents DA-codec v6. diff --git a/crates/types/batch/src/header/v6.rs b/crates/types/batch/src/header/v6.rs index 9a95c835..f583a123 100644 --- a/crates/types/batch/src/header/v6.rs +++ b/crates/types/batch/src/header/v6.rs @@ -95,65 +95,3 @@ impl BatchHeader for BatchHeaderV6 { } } -impl BatchHeader for ArchivedBatchHeaderV6 { - fn version(&self) -> u8 { - self.version - } - - fn index(&self) -> u64 { - self.batch_index.into() - } - - fn parent_batch_hash(&self) -> B256 { - self.parent_batch_hash.into() - } - - fn batch_hash(&self) -> B256 { - let batch_index: u64 = self.batch_index.into(); - let l1_message_popped: u64 = self.l1_message_popped.into(); - let total_l1_message_popped: u64 = self.total_l1_message_popped.into(); - let data_hash: B256 = self.data_hash.into(); - let blob_versioned_hash: B256 = self.blob_versioned_hash.into(); - let parent_batch_hash: B256 = self.parent_batch_hash.into(); - let last_block_timestamp: u64 = self.last_block_timestamp.into(); - let blob_data_proof: [B256; 2] = self.blob_data_proof.map(|h| h.into()); - keccak256( - std::iter::empty() - .chain(vec![self.version].as_slice()) - .chain(batch_index.to_be_bytes().as_slice()) - .chain(l1_message_popped.to_be_bytes().as_slice()) - .chain(total_l1_message_popped.to_be_bytes().as_slice()) - .chain(data_hash.as_slice()) - .chain(blob_versioned_hash.as_slice()) - .chain(parent_batch_hash.as_slice()) - .chain(last_block_timestamp.to_be_bytes().as_slice()) - .chain(blob_data_proof[0].as_slice()) - .chain(blob_data_proof[1].as_slice()) - .cloned() - .collect::>(), - ) - } - - fn blob_versioned_hash(&self) -> B256 { - self.blob_versioned_hash.into() - } -} - -impl From<&ArchivedBatchHeaderV6> for BatchHeaderV6 { - fn from(archived: &ArchivedBatchHeaderV6) -> Self { - Self { - version: archived.version, - batch_index: archived.batch_index.into(), - l1_message_popped: archived.l1_message_popped.into(), - total_l1_message_popped: archived.total_l1_message_popped.into(), - parent_batch_hash: archived.parent_batch_hash.into(), - last_block_timestamp: archived.last_block_timestamp.into(), - data_hash: archived.data_hash.into(), - blob_versioned_hash: archived.blob_versioned_hash.into(), - blob_data_proof: [ - archived.blob_data_proof[0].into(), - archived.blob_data_proof[1].into(), - ], - } - } -} diff --git a/crates/types/batch/src/header/v7.rs b/crates/types/batch/src/header/v7.rs index e70600c9..f2a73aed 100644 --- a/crates/types/batch/src/header/v7.rs +++ b/crates/types/batch/src/header/v7.rs @@ -69,46 +69,3 @@ impl BatchHeader for BatchHeaderV7 { } } -impl BatchHeader for ArchivedBatchHeaderV7 { - fn version(&self) -> u8 { - self.version - } - - fn index(&self) -> u64 { - self.batch_index.into() - } - - fn parent_batch_hash(&self) -> B256 { - self.parent_batch_hash.into() - } - - fn batch_hash(&self) -> B256 { - let batch_index: u64 = self.batch_index.into(); - let blob_versioned_hash: B256 = self.blob_versioned_hash.into(); - let parent_batch_hash: B256 = self.parent_batch_hash.into(); - keccak256( - std::iter::empty() - .chain(vec![self.version].as_slice()) - .chain(batch_index.to_be_bytes().as_slice()) - .chain(blob_versioned_hash.as_slice()) - .chain(parent_batch_hash.as_slice()) - .cloned() - .collect::>(), - ) - } - - fn blob_versioned_hash(&self) -> B256 { - self.blob_versioned_hash.into() - } -} - -impl From<&ArchivedBatchHeaderV7> for BatchHeaderV7 { - fn from(archived: &ArchivedBatchHeaderV7) -> Self { - Self { - version: archived.version, - batch_index: archived.batch_index.into(), - parent_batch_hash: archived.parent_batch_hash.into(), - blob_versioned_hash: archived.blob_versioned_hash.into(), - } - } -} diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index e6f75a9a..102e174e 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -13,21 +13,44 @@ use crate::{ /// Simply rewrap byte48 to avoid unnecessary dep pub type Bytes48 = [u8; 48]; +mod array48 { + use serde::{Deserialize, Deserializer, Serializer}; + + pub fn serialize(array: &[u8; 48], serializer: S) -> Result + where + S: Serializer, + { + serializer.serialize_bytes(array) + } + + pub fn deserialize<'de, D>(deserializer: D) -> Result<[u8; 48], D::Error> + where + D: Deserializer<'de>, + { + let bytes: &[u8] = serde::Deserialize::deserialize(deserializer)?; + bytes.try_into().map_err(|_| { + let msg = format!("expected a byte array of length 48 but got {}", bytes.len()); + serde::de::Error::custom(msg) + }) + } +} /// Witness required by applying point evaluation -#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize)] +#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize, serde::Deserialize, serde::Serialize)] #[rkyv(derive(Debug))] pub struct PointEvalWitness { /// kzg commitment #[rkyv()] + #[serde(with = "array48")] pub kzg_commitment: Bytes48, /// kzg proof #[rkyv()] + #[serde(with = "array48")] pub kzg_proof: Bytes48, } /// Witness to the batch circuit. -#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize)] +#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize, serde::Deserialize, serde::Serialize)] #[rkyv(derive(Debug))] pub struct BatchWitness { /// Flattened root proofs from all chunks in the batch. @@ -49,30 +72,30 @@ pub struct BatchWitness { pub fork_name: ForkName, } -impl ProofCarryingWitness for ArchivedBatchWitness { +impl BatchWitness { + pub fn bincode_serialize( + &self, + guest_version: Option, + ) -> Result, bincode::error::EncodeError> { + let config = bincode::config::standard(); + bincode::serde::encode_to_vec(&self, config) + } +} + +impl ProofCarryingWitness for BatchWitness { fn get_proofs(&self) -> Vec { - self.chunk_proofs - .iter() - .map(|archived| AggregationInput { - public_values: archived - .public_values - .iter() - .map(|u32_le| u32_le.to_native()) - .collect(), - commitment: ProgramCommitment::from(&archived.commitment), - }) - .collect() + self.chunk_proofs.clone() } } -impl From<&ArchivedBatchWitness> for BatchInfo { - fn from(witness: &ArchivedBatchWitness) -> Self { - let chunk_infos: Vec = witness.chunk_infos.iter().map(|ci| ci.into()).collect(); +impl From<&BatchWitness> for BatchInfo { + fn from(witness: &BatchWitness) -> Self { + let chunk_infos: Vec = witness.chunk_infos.iter().map(|ci| ci.clone()).collect(); match &witness.reference_header { - ArchivedReferenceHeader::V6(header) => { + ReferenceHeader::V6(header) => { let args = BuilderArgsV6 { - header: header.into(), + header: header.clone(), chunk_infos, blob_bytes: witness.blob_bytes.to_vec(), kzg_commitment: None, @@ -80,9 +103,9 @@ impl From<&ArchivedBatchWitness> for BatchInfo { }; BatchInfoBuilderV6::build(args) } - ArchivedReferenceHeader::V7(header) => { + ReferenceHeader::V7(header) => { let args = BuilderArgsV7 { - header: header.into(), + header: header.clone(), chunk_infos, blob_bytes: witness.blob_bytes.to_vec(), kzg_commitment: Some(witness.point_eval_witness.kzg_commitment), @@ -90,9 +113,9 @@ impl From<&ArchivedBatchWitness> for BatchInfo { }; BatchInfoBuilderV7::build(args) } - ArchivedReferenceHeader::V8(header) => { + ReferenceHeader::V8(header) => { let args = BuilderArgsV8 { - header: header.into(), + header: header.clone(), chunk_infos, blob_bytes: witness.blob_bytes.to_vec(), kzg_commitment: Some(witness.point_eval_witness.kzg_commitment), diff --git a/crates/types/bundle/Cargo.toml b/crates/types/bundle/Cargo.toml index 04d57428..f176a274 100644 --- a/crates/types/bundle/Cargo.toml +++ b/crates/types/bundle/Cargo.toml @@ -9,6 +9,7 @@ version.workspace = true [dependencies] alloy-primitives = { workspace = true } +bincode = { workspace = true } rkyv.workspace = true serde.workspace = true itertools.workspace = true diff --git a/crates/types/bundle/src/witness.rs b/crates/types/bundle/src/witness.rs index 2e1c129c..c9b13e4b 100644 --- a/crates/types/bundle/src/witness.rs +++ b/crates/types/bundle/src/witness.rs @@ -18,7 +18,7 @@ pub struct BundleWitnessEuclid { } /// The witness for the bundle circuit. -#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize)] +#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize, serde::Deserialize, serde::Serialize)] #[rkyv(derive(Debug))] pub struct BundleWitness { /// Batch proofs being aggregated in the bundle. @@ -40,6 +40,15 @@ impl BundleWitness { batch_infos: self.batch_infos, } } + + pub fn bincode_serialize( + &self, + guest_version: Option, + ) -> Result, bincode::error::EncodeError> { + let config = bincode::config::standard(); + bincode::serde::encode_to_vec(&self, config) + } + /// See ChunkWitnessEuclid::rkyv_serialize for details. pub fn rkyv_serialize( &self, @@ -56,24 +65,14 @@ impl BundleWitness { } } -impl ProofCarryingWitness for ArchivedBundleWitness { +impl ProofCarryingWitness for BundleWitness { fn get_proofs(&self) -> Vec { - self.batch_proofs - .iter() - .map(|archived| AggregationInput { - public_values: archived - .public_values - .iter() - .map(|u32_le| u32_le.to_native()) - .collect(), - commitment: ProgramCommitment::from(&archived.commitment), - }) - .collect() + self.batch_proofs.clone() } } -impl From<&ArchivedBundleWitness> for BundleInfo { - fn from(witness: &ArchivedBundleWitness) -> Self { +impl From<&BundleWitness> for BundleInfo { + fn from(witness: &BundleWitness) -> Self { assert!( !witness.batch_infos.is_empty(), "at least one batch in a bundle" diff --git a/crates/types/chunk/Cargo.toml b/crates/types/chunk/Cargo.toml index 7a6980f5..b5bcd7f4 100644 --- a/crates/types/chunk/Cargo.toml +++ b/crates/types/chunk/Cargo.toml @@ -10,6 +10,7 @@ version.workspace = true [dependencies] revm-precompile = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v74", default-features=false, features = ["kzg-rs", "libsecp256k1"] } alloy-primitives = { workspace = true, features = ["native-keccak"] } +bincode = { workspace = true } rkyv.workspace = true sbv-trie = { workspace = true } sbv-core = { workspace = true } diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index b19647c0..f1c6f2c2 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -1,6 +1,6 @@ use crate::{ - ArchivedChunkWitness, BlockHashProvider, CodeDb, NodesProvider, make_providers, - manually_drop_on_zkvm, witness::ArchivedStateCommitMode, + BlockHashProvider, ChunkWitness, CodeDb, NodesProvider, make_providers, manually_drop_on_zkvm, + witness::StateCommitMode, }; use alloy_primitives::B256; use itertools::Itertools; @@ -15,14 +15,14 @@ use sbv_primitives::{ ext::{BlockWitnessChunkExt, BlockWitnessRethExt as _, TxBytesHashExt}, hardforks::SCROLL_DEV_HARDFORKS, types::{ - reth::primitives::{Block, RecoveredBlock}, - scroll::ChunkInfoBuilder, - }, + reth::primitives::{Block, RecoveredBlock}, + scroll::ChunkInfoBuilder, + } }; use std::sync::Arc; use types_base::{fork_name::ForkName, public_inputs::chunk::ChunkInfo}; -type Witness = ArchivedChunkWitness; +type Witness = ChunkWitness; /// `compression_ratios` can be `None` in host mode. /// But in guest mode, it must be provided. @@ -47,8 +47,8 @@ pub fn execute(witness: &Witness) -> Result { ); let pre_state_root = witness.blocks[0].pre_state_root; - let fork_name = ForkName::from(&witness.fork_name); - let chain = Chain::from_id(witness.blocks[0].chain_id()); + let fork_name = ForkName::from(witness.fork_name.clone()); + let chain = Chain::from_id(witness.blocks[0].chain_id); // SCROLL_DEV_HARDFORKS will enable all forks let mut hardforks = (*SCROLL_DEV_HARDFORKS).clone(); @@ -72,19 +72,15 @@ pub fn execute(witness: &Witness) -> Result { let code_db = manually_drop_on_zkvm!(code_db); let nodes_provider = manually_drop_on_zkvm!(nodes_provider); - let prev_state_root = witness.blocks[0].pre_state_root(); + let prev_state_root = witness.blocks[0].pre_state_root; let state_commit_mode = &witness.state_commit_mode; println!("state_commit_mode: {:?}", state_commit_mode); - let compression_ratios = witness - .compression_ratios - .iter() - .map(|b| b.iter().map(|c| c.into()).collect()) - .collect::>>(); + let compression_ratios = witness.compression_ratios.clone(); let (post_state_root, withdraw_root) = match state_commit_mode { - ArchivedStateCommitMode::Chunk | ArchivedStateCommitMode::Block => execute_inner( + StateCommitMode::Chunk | StateCommitMode::Block => execute_inner( fork_name, &code_db, &nodes_provider, @@ -93,9 +89,9 @@ pub fn execute(witness: &Witness) -> Result { &blocks, chain_spec.clone(), compression_ratios, - matches!(state_commit_mode, ArchivedStateCommitMode::Chunk), + matches!(state_commit_mode, StateCommitMode::Chunk), )?, - ArchivedStateCommitMode::Auto => match execute_inner( + StateCommitMode::Auto => match execute_inner( fork_name, &code_db, &nodes_provider, diff --git a/crates/types/chunk/src/witness.rs b/crates/types/chunk/src/witness.rs index e929a9ca..6c4392a6 100644 --- a/crates/types/chunk/src/witness.rs +++ b/crates/types/chunk/src/witness.rs @@ -122,6 +122,13 @@ impl ChunkWitness { fork_name: self.fork_name, } } + pub fn bincode_serialize( + &self, + guest_version: Option, + ) -> Result, bincode::error::EncodeError> { + let config = bincode::config::standard(); + bincode::serde::encode_to_vec(&self, config) + } /// `guest_version` is related to the guest program. /// It is not always same with the evm hardfork. /// For example, a `Feynman` guest program can execute `EuclidV2` blocks. @@ -158,10 +165,10 @@ impl ChunkWitness { } } -impl TryFrom<&ArchivedChunkWitness> for ChunkInfo { +impl TryFrom<&ChunkWitness> for ChunkInfo { type Error = String; - fn try_from(value: &ArchivedChunkWitness) -> Result { + fn try_from(value: &ChunkWitness) -> Result { crate::execute(value) } } diff --git a/crates/types/src/lib.rs b/crates/types/src/lib.rs index 31de76e6..bdd8cc7a 100644 --- a/crates/types/src/lib.rs +++ b/crates/types/src/lib.rs @@ -3,57 +3,18 @@ pub mod bundle { pub use types_base::public_inputs::bundle::BundleInfo; pub use types_bundle::*; - - pub struct ToArchievedWitness(pub rkyv::util::AlignedVec); - impl ToArchievedWitness { - pub fn create(witness: &BundleWitness) -> Result { - rkyv::to_bytes::(witness) - .map_err(|e| format!("failed to serialize bundle witness: {e}")) - .map(Self) - } - pub fn access(&self) -> Result<&ArchivedBundleWitness, String> { - rkyv::access::(&self.0) - .map_err(|e| format!("rkyv deserialisation of bundle witness bytes failed: {e}")) - } - } } pub mod batch { - pub use types_base::public_inputs::batch::{ArchivedBatchInfo, BatchInfo, VersionedBatchInfo}; + pub use types_base::public_inputs::batch::{BatchInfo, VersionedBatchInfo}; pub use types_batch::*; - - pub struct ToArchievedWitness(pub rkyv::util::AlignedVec); - impl ToArchievedWitness { - pub fn create(witness: &BatchWitness) -> Result { - rkyv::to_bytes::(witness) - .map_err(|e| format!("failed to serialize batch witness: {e}")) - .map(Self) - } - pub fn access(&self) -> Result<&ArchivedBatchWitness, String> { - rkyv::access::(&self.0) - .map_err(|e| format!("rkyv deserialisation of batch witness bytes failed: {e}")) - } - } } pub mod chunk { pub use types_base::public_inputs::chunk::{ - ArchivedChunkInfo, BlockContextV2, ChunkInfo, SIZE_BLOCK_CTX, VersionedChunkInfo, + BlockContextV2, ChunkInfo, SIZE_BLOCK_CTX, VersionedChunkInfo, }; pub use types_chunk::*; - - pub struct ToArchievedWitness(pub rkyv::util::AlignedVec); - impl ToArchievedWitness { - pub fn create(witness: &ChunkWitness) -> Result { - rkyv::to_bytes::(witness) - .map_err(|e| format!("failed to serialize chunk witness: {e}")) - .map(Self) - } - pub fn access(&self) -> Result<&ArchivedChunkWitness, String> { - rkyv::access::(&self.0) - .map_err(|e| format!("rkyv deserialisation of chunk witness bytes failed: {e}")) - } - } } pub use types_base::{aggregation as types_agg, environ, public_inputs}; From 0b29ccfd91b30ae8c974eff7c07fc261defb056e Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 7 Aug 2025 15:25:32 +0800 Subject: [PATCH 02/84] fix --- crates/integration/src/testers/chunk.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/integration/src/testers/chunk.rs b/crates/integration/src/testers/chunk.rs index 07eb8c53..d013a1e8 100644 --- a/crates/integration/src/testers/chunk.rs +++ b/crates/integration/src/testers/chunk.rs @@ -50,7 +50,8 @@ impl PartialProvingTask for ChunkWitness { } fn write_guest_input(&self, stdin: &mut openvm_sdk::StdIn) -> Result<(), rkyv::rancor::Error> { - stdin.write_bytes(self.rkyv_serialize(None)?.as_slice()); + let b = self.bincode_serialize(None).unwrap(); + stdin.write_bytes(b.as_slice()); Ok(()) } From 93143ffe29a13c075e777dd93eb8a447f977a8f6 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 7 Aug 2025 07:28:40 +0000 Subject: [PATCH 03/84] fix --- Makefile | 3 +++ crates/integration/tests/chunk_circuit.rs | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c28fb8ba..2538ea01 100644 --- a/Makefile +++ b/Makefile @@ -32,6 +32,9 @@ clean-guest: build-guest: sh build-guest.sh +build-guest-local: + bash build-guest-actions-entrypoint.sh + clean-build-guest: clean-guest build-guest clean-test-cache: diff --git a/crates/integration/tests/chunk_circuit.rs b/crates/integration/tests/chunk_circuit.rs index 09bbbda7..d1fa1d01 100644 --- a/crates/integration/tests/chunk_circuit.rs +++ b/crates/integration/tests/chunk_circuit.rs @@ -62,7 +62,7 @@ fn test_execute() -> eyre::Result<()> { let (exec_result, total_gas_used) = exec_chunk(&prover, &wit)?; let cycle_per_gas = exec_result.total_cycle / total_gas_used; assert_ne!(cycle_per_gas, 0); - assert!(cycle_per_gas <= 35); + assert!(cycle_per_gas <= 40); Ok(()) } From 7485db7395c09adef0c64320a2f8c51e01a35cc3 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 7 Aug 2025 07:50:42 +0000 Subject: [PATCH 04/84] x --- crates/integration/tests/onchain_verifier.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/integration/tests/onchain_verifier.rs b/crates/integration/tests/onchain_verifier.rs index f5812d9b..e02ef0a1 100644 --- a/crates/integration/tests/onchain_verifier.rs +++ b/crates/integration/tests/onchain_verifier.rs @@ -60,8 +60,6 @@ fn export_onchain_verifier() -> eyre::Result<()> { format!("/home/lispczz/zkvm-prover/releases/{version}/verifier/verifier.bin"); show_deployed_codehash(&code_path)?; } - show_deployed_codehash("/home/lispczz/zkvm-prover/2.bin")?; - show_deployed_codehash("/home/lispczz/zkvm-prover/x.bin")?; Ok(()) } From 4544de290b8a4a433ae789fed01240d9215033c4 Mon Sep 17 00:00:00 2001 From: lightsing Date: Fri, 15 Aug 2025 08:59:56 +0800 Subject: [PATCH 05/84] exchange code --- Cargo.toml | 45 ++-- crates/types/base/Cargo.toml | 1 + crates/types/base/src/fork_name.rs | 12 +- crates/types/base/src/public_inputs/chunk.rs | 149 ++++++++++- crates/types/chunk/Cargo.toml | 2 + crates/types/chunk/src/execute.rs | 248 +++++-------------- crates/types/chunk/src/lib.rs | 1 - crates/types/chunk/src/utils.rs | 48 ---- crates/types/chunk/src/witness.rs | 18 +- 9 files changed, 233 insertions(+), 291 deletions(-) delete mode 100644 crates/types/chunk/src/utils.rs diff --git a/Cargo.toml b/Cargo.toml index f83d453d..75d299fa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,14 +58,16 @@ openvm-transpiler = { git = "https://github.com/openvm-org/openvm.git", rev = "5 openvm-stark-sdk = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.1.1" } p3-field = { git = "https://github.com/Plonky3/Plonky3.git", rev = "539bbc84085efb609f4f62cb03cf49588388abdb" } -sbv-core = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/openvm-1.3", features = ["scroll"] } -sbv-primitives = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/openvm-1.3", features = ["scroll", "serde", "rkyv"] } -sbv-kv = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/openvm-1.3" } -sbv-trie = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/openvm-1.3" } -sbv-precompile = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/openvm-1.3" } - +sbv-core = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master", features = ["scroll", "serde", "rkyv"] } +sbv-helpers = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } +sbv-primitives = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master", features = ["scroll", "serde", "rkyv"] } +sbv-kv = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } +sbv-trie = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } +sbv-precompile = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } +scroll-alloy-evm = { git = "https://github.com/scroll-tech/reth", rev = "74dd0bd368325b1286e4fe99c20e6ef0fdbaee51", default-features = false } -alloy-primitives = { version = "1.2", default-features = false, features = ["std", "map-hashbrown", "map-fxhash", "rkyv"] } + +alloy-primitives = { version = "1.3", default-features = false, features = ["std", "map-hashbrown", "map-fxhash", "rkyv"] } alloy-serde = { version = "1.0.13", default-features = false } bitcode = { version = "0.6.5", default-features = false, features = ["serde", "derive"] } bincode_v1 = { version = "1.3", package = "bincode"} @@ -83,7 +85,7 @@ metrics-util = "0.17" metrics-tracing-context = "0.16.0" rayon = "1.10" rkyv = "0.8" -revm = "=24.0.0" +revm = "27" serde = { version = "1", default-features = false, features = ["derive"] } serde_json = { version = "1.0" } serde_with = "3.11.0" @@ -111,21 +113,20 @@ scroll-zkvm-prover = { path = "crates/prover" } scroll-zkvm-verifier = { path = "crates/verifier" } [patch.crates-io] -revm = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" } -revm-bytecode = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" } -revm-context = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" } -revm-context-interface = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" } -revm-database = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" } -revm-database-interface = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" } -revm-handler = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" } -revm-inspector = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" } -revm-interpreter = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" } -revm-precompile = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" } -revm-primitives = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" } -revm-state = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v78" } +revm = { git = "https://github.com/scroll-tech/revm" } +revm-bytecode = { git = "https://github.com/scroll-tech/revm" } +revm-context = { git = "https://github.com/scroll-tech/revm" } +revm-context-interface = { git = "https://github.com/scroll-tech/revm" } +revm-database = { git = "https://github.com/scroll-tech/revm" } +revm-database-interface = { git = "https://github.com/scroll-tech/revm" } +revm-handler = { git = "https://github.com/scroll-tech/revm" } +revm-inspector = { git = "https://github.com/scroll-tech/revm" } +revm-interpreter = { git = "https://github.com/scroll-tech/revm" } +revm-precompile = { git = "https://github.com/scroll-tech/revm" } +revm-primitives = { git = "https://github.com/scroll-tech/revm" } +revm-state = { git = "https://github.com/scroll-tech/revm" } -ruint = { git = "https://github.com/scroll-tech/uint.git", branch = "v1.15.0" } -alloy-primitives = { git = "https://github.com/scroll-tech/alloy-core", branch = "v1.2.0" } +alloy-primitives = { git = "https://github.com/scroll-tech/alloy-core", branch = "feat/rkyv" } [profile.maxperf] inherits = "release" diff --git a/crates/types/base/Cargo.toml b/crates/types/base/Cargo.toml index ddde297b..32c9df0a 100644 --- a/crates/types/base/Cargo.toml +++ b/crates/types/base/Cargo.toml @@ -16,6 +16,7 @@ serde.workspace = true itertools.workspace = true sha3 = "0.10.8" sha2 = "0.10.8" +tiny-keccak.workspace = true [features] default = [] diff --git a/crates/types/base/src/fork_name.rs b/crates/types/base/src/fork_name.rs index 9edfc051..cc58bd34 100644 --- a/crates/types/base/src/fork_name.rs +++ b/crates/types/base/src/fork_name.rs @@ -16,7 +16,7 @@ use std::fmt; serde::Deserialize, serde::Serialize, )] -#[rkyv(derive(Debug))] +#[rkyv(derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord))] pub enum ForkName { #[default] EuclidV1, @@ -54,16 +54,6 @@ impl ForkName { } } -impl From<&ArchivedForkName> for ForkName { - fn from(archived: &ArchivedForkName) -> Self { - match archived { - ArchivedForkName::EuclidV1 => ForkName::EuclidV1, - ArchivedForkName::EuclidV2 => ForkName::EuclidV2, - ArchivedForkName::Feynman => ForkName::Feynman, - } - } -} - impl From> for ForkName { fn from(value: Option<&str>) -> Self { match value { diff --git a/crates/types/base/src/public_inputs/chunk.rs b/crates/types/base/src/public_inputs/chunk.rs index 907713b8..56a0c162 100644 --- a/crates/types/base/src/public_inputs/chunk.rs +++ b/crates/types/base/src/public_inputs/chunk.rs @@ -5,8 +5,11 @@ use crate::{ use alloy_primitives::{B256, U256}; use sbv_primitives::types::{ consensus::BlockHeader, - reth::primitives::{Block, RecoveredBlock}, + eips::Encodable2718, + reth::primitives::{Block, RecoveredBlock, SignedTransaction, TransactionSigned}, }; +use std::ops::Deref; +use tiny_keccak::{Hasher, Keccak}; /// Number of bytes used to serialise [`BlockContextV2`]. pub const SIZE_BLOCK_CTX: usize = 52; @@ -273,3 +276,147 @@ impl MultiVersionPublicInputs for ChunkInfo { } } } + +pub trait ChunkExt { + /// Hash the transaction bytes. + /// + /// Only L2 transactions are considered while computing the digest. + fn tx_bytes_hash_in(&self, rlp_buffer: &mut Vec) -> (usize, B256); + /// Data hash before Euclid V2 + fn legacy_data_hash(&self) -> B256; + /// Rolling message queue hash after Euclid V2 + fn rolling_msg_queue_hash(&self, rolling_hash: B256) -> B256; +} + +impl]>> ChunkExt for T { + #[inline] + fn tx_bytes_hash_in(&self, rlp_buffer: &mut Vec) -> (usize, B256) { + let blocks = self.as_ref(); + blocks + .iter() + .flat_map(|b| b.body().transactions.iter()) + .tx_bytes_hash_in(rlp_buffer.as_mut()) + } + + #[inline] + fn legacy_data_hash(&self) -> B256 { + let blocks = self.as_ref(); + + let mut data_hasher = Keccak::v256(); + for block in blocks.iter() { + block.legacy_hash_da_header(&mut data_hasher); + } + for block in blocks.iter() { + block.legacy_hash_l1_msg(&mut data_hasher); + } + let mut data_hash = B256::ZERO; + data_hasher.finalize(&mut data_hash.0); + data_hash + } + + #[inline] + fn rolling_msg_queue_hash(&self, mut rolling_hash: B256) -> B256 { + let blocks = self.as_ref(); + for block in blocks.iter() { + rolling_hash = block.hash_msg_queue(&rolling_hash); + } + rolling_hash + } +} + +/// Helper trait for hashing transaction bytes. +trait TxBytesHashExt { + /// Hash the transaction bytes. + /// + /// Only L2 transactions are considered while computing the digest. + fn tx_bytes_hash_in(self, rlp_buffer: &mut Vec) -> (usize, B256); +} + +impl<'a, I: IntoIterator> TxBytesHashExt for I +where + I: IntoIterator, +{ + #[inline] + fn tx_bytes_hash_in(self, rlp_buffer: &mut Vec) -> (usize, B256) { + use tiny_keccak::{Hasher, Keccak}; + + let mut tx_bytes_hasher = Keccak::v256(); + let mut len = 0; + + // Ignore L1 msg txs. + for tx in self.into_iter().filter(|&tx| !tx.is_l1_message()) { + tx.encode_2718(rlp_buffer); + len += rlp_buffer.len(); + tx_bytes_hasher.update(rlp_buffer); + rlp_buffer.clear(); + } + + let mut tx_bytes_hash = B256::ZERO; + tx_bytes_hasher.finalize(&mut tx_bytes_hash.0); + (len, tx_bytes_hash) + } +} + +/// Chunk related extension methods for Block +trait BlockChunkExt { + /// Hash the header of the block + fn legacy_hash_da_header(&self, hasher: &mut impl tiny_keccak::Hasher); + /// Hash the l1 messages of the block + fn legacy_hash_l1_msg(&self, hasher: &mut impl Hasher); + /// Hash the l1 messages of the block + fn hash_msg_queue(&self, initial_queue_hash: &B256) -> B256; +} + +impl BlockChunkExt for RecoveredBlock { + #[inline] + fn legacy_hash_da_header(&self, hasher: &mut impl Hasher) { + hasher.update(&self.number.to_be_bytes()); + hasher.update(&self.timestamp.to_be_bytes()); + hasher.update( + &U256::from_limbs([self.base_fee_per_gas.unwrap_or_default(), 0, 0, 0]) + .to_be_bytes::<{ U256::BYTES }>(), + ); + hasher.update(&self.gas_limit.to_be_bytes()); + // FIXME: l1 tx could be skipped, the actual tx count needs to be calculated + hasher.update(&(self.body().transactions.len() as u16).to_be_bytes()); + } + + #[inline] + fn legacy_hash_l1_msg(&self, hasher: &mut impl Hasher) { + for tx in self + .body() + .transactions + .iter() + .filter(|tx| tx.is_l1_message()) + { + hasher.update(tx.tx_hash().as_slice()) + } + } + + #[inline] + fn hash_msg_queue(&self, initial_queue_hash: &B256) -> B256 { + let mut rolling_hash = *initial_queue_hash; + for tx in self + .body() + .transactions + .iter() + .filter(|tx| tx.is_l1_message()) + { + let mut hasher = Keccak::v256(); + hasher.update(rolling_hash.as_slice()); + hasher.update(tx.tx_hash().as_slice()); + + hasher.finalize(rolling_hash.as_mut_slice()); + + // clear last 32 bits, i.e. 4 bytes. + // https://github.com/scroll-tech/da-codec/blob/26dc8d575244560611548fada6a3a2745c60fe83/encoding/da.go#L817-L825 + // see also https://github.com/scroll-tech/da-codec/pull/42 + rolling_hash.0[28] = 0; + rolling_hash.0[29] = 0; + rolling_hash.0[30] = 0; + rolling_hash.0[31] = 0; + } + + rolling_hash + } +} diff --git a/crates/types/chunk/Cargo.toml b/crates/types/chunk/Cargo.toml index 7a6980f5..1b62c2d6 100644 --- a/crates/types/chunk/Cargo.toml +++ b/crates/types/chunk/Cargo.toml @@ -12,11 +12,13 @@ revm-precompile = { git = "https://github.com/scroll-tech/revm", branch = "feat/ alloy-primitives = { workspace = true, features = ["native-keccak"] } rkyv.workspace = true sbv-trie = { workspace = true } +sbv-helpers.workspace = true sbv-core = { workspace = true } sbv-primitives = { workspace = true, features = ["hardforks", "scroll-hardforks", "scroll-revm-types"] } sbv-kv = { workspace = true } serde.workspace = true itertools.workspace = true +tiny-keccak.workspace = true openvm = { workspace = true, features = ["std"] } openvm-rv32im-guest = { workspace = true } diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index b19647c0..1ef8535c 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -1,217 +1,83 @@ -use crate::{ - ArchivedChunkWitness, BlockHashProvider, CodeDb, NodesProvider, make_providers, - manually_drop_on_zkvm, witness::ArchivedStateCommitMode, -}; -use alloy_primitives::B256; -use itertools::Itertools; -use sbv_core::{EvmDatabase, EvmExecutor}; +use crate::ArchivedChunkWitness; +use sbv_core::verifier::{self, VerifyResult}; +use sbv_helpers::manually_drop_on_zkvm; use sbv_primitives::{ - BlockWitness, U256, - chainspec::{ - Chain, - reth_chainspec::ChainSpec, - scroll::{ScrollChainConfig, ScrollChainSpec}, - }, - ext::{BlockWitnessChunkExt, BlockWitnessRethExt as _, TxBytesHashExt}, - hardforks::SCROLL_DEV_HARDFORKS, - types::{ - reth::primitives::{Block, RecoveredBlock}, - scroll::ChunkInfoBuilder, - }, + B256, BlockWitness, U256, + chainspec::{Chain, build_chain_spec_force_hardfork}, + hardforks::Hardfork, +}; +use std::convert::Infallible; +use types_base::{ + fork_name::ArchivedForkName, + public_inputs::chunk::{ChunkExt, ChunkInfo}, }; -use std::sync::Arc; -use types_base::{fork_name::ForkName, public_inputs::chunk::ChunkInfo}; - -type Witness = ArchivedChunkWitness; /// `compression_ratios` can be `None` in host mode. /// But in guest mode, it must be provided. -pub fn execute(witness: &Witness) -> Result { - if witness.blocks.is_empty() { - return Err("At least one witness must be provided in chunk mode".into()); - } - if !witness.blocks.has_same_chain_id() { - return Err("All witnesses must have the same chain id in chunk mode".into()); - } - if !witness.blocks.has_seq_block_number() { - return Err("All witnesses must have sequential block numbers in chunk mode".into()); - } - // Get the blocks to build the basic chunk-info. - let blocks = manually_drop_on_zkvm!( - witness - .blocks - .iter() - .map(|w| w.build_reth_block()) - .collect::>, _>>() - .map_err(|e| e.to_string())? - ); - let pre_state_root = witness.blocks[0].pre_state_root; - - let fork_name = ForkName::from(&witness.fork_name); +pub fn execute(witness: &ArchivedChunkWitness) -> Result { let chain = Chain::from_id(witness.blocks[0].chain_id()); - - // SCROLL_DEV_HARDFORKS will enable all forks - let mut hardforks = (*SCROLL_DEV_HARDFORKS).clone(); - use sbv_primitives::{chainspec::ForkCondition, hardforks::ScrollHardfork}; - if fork_name < ForkName::Feynman { - hardforks.insert(ScrollHardfork::Feynman, ForkCondition::Never); - } - if fork_name < ForkName::EuclidV2 { - hardforks.insert(ScrollHardfork::EuclidV2, ForkCondition::Never); - } - - let inner = ChainSpec { + let chain_spec = build_chain_spec_force_hardfork( chain, - hardforks, - ..Default::default() - }; - let config = ScrollChainConfig::mainnet(); - let chain_spec = Arc::new(ScrollChainSpec { inner, config }); - - let (code_db, nodes_provider, block_hashes) = make_providers(&witness.blocks); - let code_db = manually_drop_on_zkvm!(code_db); - let nodes_provider = manually_drop_on_zkvm!(nodes_provider); - - let prev_state_root = witness.blocks[0].pre_state_root(); + match witness.fork_name { + ArchivedForkName::EuclidV1 => Hardfork::Euclid, + ArchivedForkName::EuclidV2 => Hardfork::EuclidV2, + ArchivedForkName::Feynman => Hardfork::Feynman, + }, + ); - let state_commit_mode = &witness.state_commit_mode; + let state_commit_mode = rkyv::deserialize::<_, Infallible>(&witness.state_commit_mode).unwrap(); println!("state_commit_mode: {:?}", state_commit_mode); - let compression_ratios = witness - .compression_ratios - .iter() - .map(|b| b.iter().map(|c| c.into()).collect()) - .collect::>>(); + let VerifyResult { + blocks, + pre_state_root, + post_state_root, + withdraw_root, + .. + } = verifier::run( + witness.blocks.as_slice(), + chain_spec.clone(), + state_commit_mode, + Some( + witness + .compression_ratios + .iter() + .map(|x| x.iter().map(Into::::into)), + ), + ) + .map_err(|e| format!("verify error: {e}"))?; + + let blocks = manually_drop_on_zkvm!(blocks); + let mut rlp_buffer = manually_drop_on_zkvm!(Vec::with_capacity(2048)); + let (tx_data_length, tx_data_digest) = blocks.tx_bytes_hash_in(rlp_buffer.as_mut()); - let (post_state_root, withdraw_root) = match state_commit_mode { - ArchivedStateCommitMode::Chunk | ArchivedStateCommitMode::Block => execute_inner( - fork_name, - &code_db, - &nodes_provider, - &block_hashes, - prev_state_root, - &blocks, - chain_spec.clone(), - compression_ratios, - matches!(state_commit_mode, ArchivedStateCommitMode::Chunk), - )?, - ArchivedStateCommitMode::Auto => match execute_inner( - fork_name, - &code_db, - &nodes_provider, - &block_hashes, - prev_state_root, - &blocks, - chain_spec.clone(), - compression_ratios.clone(), - true, - ) { - Ok((post_state_root, withdraw_root)) => (post_state_root, withdraw_root), - Err(e) if e.starts_with("failed to update db:") => { - openvm::io::println(format!("{e}; retrying with defer commit disabled")); - execute_inner( - fork_name, - &code_db, - &nodes_provider, - &block_hashes, - prev_state_root, - &blocks, - chain_spec.clone(), - compression_ratios, - false, - )? - } - Err(e) => return Err(e), - }, + let data_hash = if witness.fork_name < ArchivedForkName::EuclidV2 { + blocks.legacy_data_hash() + } else { + B256::ZERO }; - let mut rlp_buffer = manually_drop_on_zkvm!(Vec::with_capacity(2048)); - let (tx_data_length, tx_data_digest) = blocks - .iter() - .flat_map(|b| b.body().transactions.iter()) - .tx_bytes_hash_in(rlp_buffer.as_mut()); - - let sbv_chunk_info = { - #[allow(unused_mut)] - let mut builder = ChunkInfoBuilder::new(&chain_spec, pre_state_root.into(), &blocks); - if fork_name >= ForkName::EuclidV2 { - builder.set_prev_msg_queue_hash(witness.prev_msg_queue_hash.into()); - } - builder.build(withdraw_root) + let post_msg_queue_hash = if witness.fork_name >= ArchivedForkName::EuclidV2 { + blocks.rolling_msg_queue_hash(witness.prev_msg_queue_hash.into()) + } else { + B256::ZERO }; - if post_state_root != sbv_chunk_info.post_state_root() { - return Err(format!( - "state root mismatch: expected={}, found={}", - sbv_chunk_info.post_state_root(), - post_state_root - )); - } let chunk_info = ChunkInfo { - chain_id: sbv_chunk_info.chain_id(), - prev_state_root: sbv_chunk_info.prev_state_root(), - post_state_root: sbv_chunk_info.post_state_root(), - data_hash: sbv_chunk_info - .clone() - .into_legacy() - .map(|x| x.data_hash) - .unwrap_or_default(), + chain_id: chain.id(), + prev_state_root: pre_state_root, + post_state_root, + data_hash, withdraw_root, tx_data_digest, - tx_data_length: u64::try_from(tx_data_length).expect("tx_data_length: u64"), + tx_data_length: tx_data_length as u64, initial_block_number: blocks[0].header().number, prev_msg_queue_hash: witness.prev_msg_queue_hash.into(), - post_msg_queue_hash: sbv_chunk_info - .into_euclid_v2() - .map(|x| x.post_msg_queue_hash) - .unwrap_or_default(), + post_msg_queue_hash, block_ctxs: blocks.iter().map(Into::into).collect(), }; - openvm::io::println(format!("withdraw_root = {:?}", withdraw_root)); - openvm::io::println(format!("tx_bytes_hash = {:?}", tx_data_digest)); + println!("chunk_info = {:#?}", chunk_info); Ok(chunk_info) } - -#[allow(clippy::too_many_arguments)] -fn execute_inner( - fork_name: ForkName, - code_db: &CodeDb, - nodes_provider: &NodesProvider, - block_hashes: &BlockHashProvider, - prev_state_root: B256, - blocks: &[RecoveredBlock], - chain_spec: Arc, - compression_ratios: Vec>, - defer_commit: bool, -) -> Result<(B256, B256), String> { - let mut db = manually_drop_on_zkvm!( - EvmDatabase::new_from_root(code_db, prev_state_root, nodes_provider, block_hashes) - .map_err(|e| format!("failed to create EvmDatabase: {}", e))? - ); - for (block, compression_ratios) in blocks.iter().zip_eq(compression_ratios.into_iter()) { - let output = manually_drop_on_zkvm!( - EvmExecutor::new(chain_spec.clone(), &db, block, Some(compression_ratios)) - .execute() - .map_err(|e| format!("failed to execute block: {}", e))? - ); - (if fork_name >= ForkName::Feynman { - db.update( - nodes_provider, - std::collections::BTreeMap::from_iter(output.state.state.clone()).iter(), - ) - } else { - db.update(nodes_provider, output.state.state.clone().iter()) - }) - .map_err(|e| format!("failed to update db: {}", e))?; - if !defer_commit { - db.commit_changes(); - } - } - let post_state_root = db.commit_changes(); - let withdraw_root = db - .withdraw_root() - .map_err(|e| format!("failed to get withdraw root: {}", e))?; - Ok((post_state_root, withdraw_root)) -} diff --git a/crates/types/chunk/src/lib.rs b/crates/types/chunk/src/lib.rs index 41ec8060..4b161006 100644 --- a/crates/types/chunk/src/lib.rs +++ b/crates/types/chunk/src/lib.rs @@ -2,7 +2,6 @@ mod utils; mod witness; -pub use utils::{BlockHashProvider, CodeDb, NodesProvider, make_providers}; pub use witness::{ArchivedChunkWitness, ChunkWitness}; mod execute; diff --git a/crates/types/chunk/src/utils.rs b/crates/types/chunk/src/utils.rs deleted file mode 100644 index ebd538d6..00000000 --- a/crates/types/chunk/src/utils.rs +++ /dev/null @@ -1,48 +0,0 @@ -use sbv_kv::nohash::NoHashMap; -use sbv_primitives::{B256, BlockWitness, Bytes, ext::BlockWitnessExt}; -use sbv_trie::{BlockWitnessTrieExt, TrieNode}; - -pub type CodeDb = NoHashMap; - -pub type NodesProvider = NoHashMap; - -pub type BlockHashProvider = sbv_kv::null::NullProvider; - -pub fn make_providers( - witnesses: &[W], -) -> (CodeDb, NodesProvider, BlockHashProvider) { - let code_db = { - // build code db - let num_codes = witnesses.iter().map(|w| w.codes_iter().len()).sum(); - let mut code_db = - NoHashMap::::with_capacity_and_hasher(num_codes, Default::default()); - witnesses.import_codes(&mut code_db); - code_db - }; - let nodes_provider = { - let num_states = witnesses.iter().map(|w| w.states_iter().len()).sum(); - let mut nodes_provider = - NoHashMap::::with_capacity_and_hasher(num_states, Default::default()); - witnesses.import_nodes(&mut nodes_provider).unwrap(); - nodes_provider - }; - let block_hashes = sbv_kv::null::NullProvider; - - (code_db, nodes_provider, block_hashes) -} - -#[macro_export] -#[cfg(not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")))] -macro_rules! manually_drop_on_zkvm { - ($e:expr) => { - std::mem::ManuallyDrop::new($e) - }; -} - -#[macro_export] -#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] -macro_rules! manually_drop_on_zkvm { - ($e:expr) => { - $e - }; -} diff --git a/crates/types/chunk/src/witness.rs b/crates/types/chunk/src/witness.rs index e929a9ca..8051b9cf 100644 --- a/crates/types/chunk/src/witness.rs +++ b/crates/types/chunk/src/witness.rs @@ -1,8 +1,8 @@ use alloy_primitives::B256; use rkyv::util::AlignedVec; +use sbv_core::verifier::StateCommitMode; use sbv_primitives::{U256, types::BlockWitness}; use std::collections::HashSet; - use types_base::{fork_name::ForkName, public_inputs::chunk::ChunkInfo}; /// The witness type accepted by the chunk-circuit. @@ -25,22 +25,6 @@ pub struct ChunkWitnessEuclid { pub fork_name: ForkName, } -#[derive( - Clone, - Debug, - serde::Deserialize, - serde::Serialize, - rkyv::Archive, - rkyv::Deserialize, - rkyv::Serialize, -)] -#[rkyv(derive(Debug))] -pub enum StateCommitMode { - Chunk, - Block, - Auto, -} - /// The witness type accepted by the chunk-circuit. #[derive( Clone, From a32b055a5be839c2be4ec8f3b3cbbe2df5b471eb Mon Sep 17 00:00:00 2001 From: lightsing Date: Mon, 18 Aug 2025 12:23:51 +0800 Subject: [PATCH 06/84] fix rebase --- Cargo.lock | 664 +++++++----------- crates/circuits/batch-circuit/src/circuit.rs | 5 +- crates/circuits/bundle-circuit/src/circuit.rs | 5 +- crates/circuits/chunk-circuit/src/circuit.rs | 3 +- crates/types/chunk/src/lib.rs | 2 - 5 files changed, 258 insertions(+), 421 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ab1435c3..657e9089 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -57,9 +57,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-chains" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6967ca1ed656766e471bc323da42fb0db320ca5e1418b408650e98e4757b3d2" +checksum = "4195a29a4b87137b2bb02105e746102873bc03561805cf45c0e510c961f160e6" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -70,14 +70,14 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73e7f99e3a50210eaee2abd57293a2e72b1a5b7bb251b44c4bf33d02ddd402ab" +checksum = "eda689f7287f15bd3582daba6be8d1545bad3740fd1fb778f629a1fe866bb43b" dependencies = [ - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "alloy-trie", "alloy-tx-macros", "auto_impl", @@ -95,15 +95,15 @@ dependencies = [ [[package]] name = "alloy-consensus-any" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9945351a277c914f3776ae72b3fc1d22f90d2e840276830e48e9be5bf371a8fe" +checksum = "2b5659581e41e8fe350ecc3593cb5c9dcffddfd550896390f2b78a07af67b0fa" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "serde", ] @@ -167,16 +167,16 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4134375e533d095e045982cd7684a29c37089ab7a605ecf2b4aa17a5e61d72d3" +checksum = "6f35887da30b5fc50267109a3c61cd63e6ca1f45967983641053a40ee83468c1" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "auto_impl", "c-kzg", "derive_more 2.0.1", @@ -187,12 +187,12 @@ dependencies = [ [[package]] name = "alloy-evm" -version = "0.12.3" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff5aae4c6dc600734b206b175f3200085ee82dcdaa388760358830a984ca9869" +checksum = "4042e855163839443cba91147fb7737c4aba02df4767cb322b0e8cea5a77642c" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-hardforks", "alloy-primitives", "alloy-rpc-types-eth", @@ -201,19 +201,19 @@ dependencies = [ "derive_more 2.0.1", "op-alloy-consensus", "op-revm", - "revm 26.0.1", + "revm 27.1.0", "thiserror 2.0.12", ] [[package]] name = "alloy-genesis" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61d58e94791b74c2566a2f240f3f796366e2479d4d39b4a3ec848c733fb92ce" +checksum = "11d4009efea6f403b3a80531f9c6f70fc242399498ff71196a1688cc1c901f44" dependencies = [ - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "alloy-trie", "serde", "serde_with", @@ -247,21 +247,21 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b21283a28b117505a75ee1f2e63c16ea2ea72afca44f670b1f02795d9f5d988" +checksum = "80d7980333dd9391719756ac28bc2afa9baa705fc70ffd11dc86ab078dd64477" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "serde", ] [[package]] name = "alloy-primitives" -version = "1.2.0" -source = "git+https://github.com/scroll-tech/alloy-core?branch=v1.2.0#48cf7ca879766d96663b6b336f47677e5194896a" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/alloy-core?branch=feat%2Frkyv#65e074f03f4491168e4ec7853d2b1cebb8a35be2" dependencies = [ "alloy-rlp", "bytes", @@ -309,12 +309,12 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14796fd8574c77213802b0dc0e85886b5cb27c44e72678ab7d0a4a2d5aee79e9" +checksum = "e24c171377c0684e3860385f6d93fbfcc8ecc74f6cce8304c822bf1a50bacce0" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", "derive_more 2.0.1", @@ -323,21 +323,22 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bea7326ca6cd6971c58042055a039d5c97a1431e30380d8b4883ad98067c1b5" +checksum = "b777b98526bbe5b7892ca22a7fd5f18ed624ff664a79f40d0f9f2bf94ba79a84" dependencies = [ "alloy-consensus", "alloy-consensus-any", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-network-primitives", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "alloy-sol-types", "itertools 0.14.0", "serde", "serde_json", + "serde_with", "thiserror 2.0.12", ] @@ -354,9 +355,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c02a06ae34d2354398dc9d2de0503129c3f0904a3eb791b5d0149f267c2688" +checksum = "ee8d2c52adebf3e6494976c8542fbdf12f10123b26e11ad56f77274c16a2a039" dependencies = [ "alloy-primitives", "serde", @@ -451,9 +452,9 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afd621a9ddef2fdc06d17089f45e47cf84d0b46ca5a1bc6c83807c9119636f52" +checksum = "6acb36318dfa50817154064fea7932adf2eec3f51c86680e2b37d7e8906c66bb" dependencies = [ "alloy-primitives", "darling", @@ -1825,6 +1826,14 @@ dependencies = [ "zstd", ] +[[package]] +name = "encoder-standard" +version = "0.1.0" +source = "git+https://github.com/scroll-tech/da-codec#2cfec8c99547b68dc64e2b020fa2b83cfb9c0e99" +dependencies = [ + "zstd", +] + [[package]] name = "endian-type" version = "0.1.2" @@ -3252,15 +3261,15 @@ checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "op-alloy-consensus" -version = "0.18.9" +version = "0.18.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8719d9b783b29cfa1cf8d591b894805786b9ab4940adc700a57fd0d5b721cf5" +checksum = "0c88d2940558fd69f8f07b3cbd7bb3c02fc7d31159c1a7ba9deede50e7881024" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "derive_more 2.0.1", "serde", "serde_with", @@ -3269,13 +3278,13 @@ dependencies = [ [[package]] name = "op-revm" -version = "7.0.1" +version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b97d2b54651fcd2955b454e86b2336c031e17925a127f4c44e2b63b2eeda923" +checksum = "5ce1dc7533f4e5716c55cd3d62488c6200cb4dfda96e0c75a7e484652464343b" dependencies = [ "auto_impl", "once_cell", - "revm 26.0.1", + "revm 27.1.0", "serde", ] @@ -5248,12 +5257,12 @@ dependencies = [ [[package]] name = "reth-chainspec" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-chains", "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-genesis", "alloy-primitives", @@ -5268,11 +5277,11 @@ dependencies = [ [[package]] name = "reth-codecs" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-genesis", "alloy-primitives", "alloy-trie", @@ -5286,8 +5295,8 @@ dependencies = [ [[package]] name = "reth-codecs-derive" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "convert_case 0.7.1", "proc-macro2", @@ -5297,18 +5306,18 @@ dependencies = [ [[package]] name = "reth-db-models" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "reth-primitives-traits", ] [[package]] name = "reth-ethereum-forks" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-eip2124", "alloy-hardforks", @@ -5319,11 +5328,11 @@ dependencies = [ [[package]] name = "reth-ethereum-primitives" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", "reth-codecs", @@ -5334,11 +5343,11 @@ dependencies = [ [[package]] name = "reth-evm" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", "auto_impl", @@ -5350,17 +5359,17 @@ dependencies = [ "reth-storage-api", "reth-storage-errors", "reth-trie-common", - "revm 26.0.1", + "revm 27.1.0", "scroll-alloy-evm", ] [[package]] name = "reth-evm-ethereum" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", "reth-chainspec", @@ -5369,13 +5378,13 @@ dependencies = [ "reth-evm", "reth-execution-types", "reth-primitives-traits", - "revm 26.0.1", + "revm 27.1.0", ] [[package]] name = "reth-execution-errors" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-evm", "alloy-primitives", @@ -5387,24 +5396,24 @@ dependencies = [ [[package]] name = "reth-execution-types" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", "derive_more 2.0.1", "reth-ethereum-primitives", "reth-primitives-traits", "reth-trie-common", - "revm 26.0.1", + "revm 27.1.0", ] [[package]] name = "reth-network-peers" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -5415,8 +5424,8 @@ dependencies = [ [[package]] name = "reth-primitives" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", "once_cell", @@ -5428,11 +5437,11 @@ dependencies = [ [[package]] name = "reth-primitives-traits" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-genesis", "alloy-primitives", "alloy-rlp", @@ -5444,9 +5453,9 @@ dependencies = [ "once_cell", "op-alloy-consensus", "reth-codecs", - "revm-bytecode 5.0.0", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "revm-bytecode 6.1.0", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "scroll-alloy-consensus", "secp256k1 0.30.0", "serde", @@ -5456,8 +5465,8 @@ dependencies = [ [[package]] name = "reth-prune-types" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-primitives", "derive_more 2.0.1", @@ -5466,15 +5475,15 @@ dependencies = [ [[package]] name = "reth-scroll-chainspec" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-chains", "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-genesis", "alloy-primitives", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "auto_impl", "derive_more 2.0.1", "once_cell", @@ -5491,11 +5500,11 @@ dependencies = [ [[package]] name = "reth-scroll-evm" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", "derive_more 2.0.1", @@ -5508,8 +5517,8 @@ dependencies = [ "reth-scroll-forks", "reth-scroll-primitives", "reth-storage-api", - "revm 26.0.1", - "revm-primitives 20.0.0", + "revm 27.1.0", + "revm-primitives 20.1.0", "revm-scroll", "scroll-alloy-consensus", "scroll-alloy-evm", @@ -5520,8 +5529,8 @@ dependencies = [ [[package]] name = "reth-scroll-forks" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-chains", "alloy-primitives", @@ -5534,11 +5543,11 @@ dependencies = [ [[package]] name = "reth-scroll-primitives" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", "bytes", @@ -5551,8 +5560,8 @@ dependencies = [ [[package]] name = "reth-stages-types" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-primitives", "reth-trie-common", @@ -5560,8 +5569,8 @@ dependencies = [ [[package]] name = "reth-static-file-types" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-primitives", "derive_more 2.0.1", @@ -5571,11 +5580,11 @@ dependencies = [ [[package]] name = "reth-storage-api" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rpc-types-engine", "auto_impl", @@ -5588,32 +5597,32 @@ dependencies = [ "reth-stages-types", "reth-storage-errors", "reth-trie-common", - "revm-database 6.0.0", + "revm-database 7.0.2", ] [[package]] name = "reth-storage-errors" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", "derive_more 2.0.1", "reth-primitives-traits", "reth-prune-types", "reth-static-file-types", - "revm-database-interface 6.0.0", + "revm-database-interface 7.0.2", "thiserror 2.0.12", ] [[package]] name = "reth-trie" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", "alloy-trie", @@ -5625,14 +5634,14 @@ dependencies = [ "reth-storage-errors", "reth-trie-common", "reth-trie-sparse", - "revm-database 6.0.0", + "revm-database 7.0.2", "tracing", ] [[package]] name = "reth-trie-common" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -5642,13 +5651,13 @@ dependencies = [ "itertools 0.14.0", "nybbles", "reth-primitives-traits", - "revm-database 6.0.0", + "revm-database 7.0.2", ] [[package]] name = "reth-trie-sparse" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -5663,8 +5672,8 @@ dependencies = [ [[package]] name = "reth-zstd-compressors" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "zstd", ] @@ -5690,39 +5699,20 @@ dependencies = [ [[package]] name = "revm" -version = "24.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d3ae9d1b08303eb5150dcf820a29e14235cf3f24f6c09024458a4dcbffe6695" -dependencies = [ - "revm-bytecode 4.1.0", - "revm-context 5.0.1", - "revm-context-interface 5.0.0", - "revm-database 4.0.1", - "revm-database-interface 4.0.1", - "revm-handler 5.0.1", - "revm-inspector 5.0.1", - "revm-interpreter 20.0.0", - "revm-precompile 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "revm-primitives 19.2.0", - "revm-state 4.0.1", -] - -[[package]] -name = "revm" -version = "26.0.1" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "27.1.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ - "revm-bytecode 5.0.0", - "revm-context 7.0.1", - "revm-context-interface 7.0.1", - "revm-database 6.0.0", - "revm-database-interface 6.0.0", - "revm-handler 7.0.1", - "revm-inspector 7.0.1", - "revm-interpreter 22.0.1", - "revm-precompile 23.0.0", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "revm-bytecode 6.1.0", + "revm-context 8.0.4", + "revm-context-interface 9.0.0", + "revm-database 7.0.2", + "revm-database-interface 7.0.2", + "revm-handler 8.1.0", + "revm-inspector 8.1.0", + "revm-interpreter 24.0.0", + "revm-precompile 25.0.0", + "revm-primitives 20.1.0", + "revm-state 7.0.2", ] [[package]] @@ -5739,26 +5729,13 @@ dependencies = [ [[package]] name = "revm-bytecode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942fe4724cf552fd28db6b0a2ca5b79e884d40dd8288a4027ed1e9090e0c6f49" -dependencies = [ - "bitvec", - "once_cell", - "phf", - "revm-primitives 19.2.0", - "serde", -] - -[[package]] -name = "revm-bytecode" -version = "5.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "6.1.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "bitvec", "once_cell", "phf", - "revm-primitives 20.0.0", + "revm-primitives 20.1.0", "serde", ] @@ -5780,32 +5757,16 @@ dependencies = [ [[package]] name = "revm-context" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b01aad49e1233f94cebda48a4e5cef022f7c7ed29b4edf0d202b081af23435ef" +version = "8.0.4" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "cfg-if", "derive-where", - "revm-bytecode 4.1.0", - "revm-context-interface 5.0.0", - "revm-database-interface 4.0.1", - "revm-primitives 19.2.0", - "revm-state 4.0.1", - "serde", -] - -[[package]] -name = "revm-context" -version = "7.0.1" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" -dependencies = [ - "cfg-if", - "derive-where", - "revm-bytecode 5.0.0", - "revm-context-interface 7.0.1", - "revm-database-interface 6.0.0", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "revm-bytecode 6.1.0", + "revm-context-interface 9.0.0", + "revm-database-interface 7.0.2", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "serde", ] @@ -5826,32 +5787,16 @@ dependencies = [ [[package]] name = "revm-context-interface" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b844f48a411e62c7dde0f757bf5cce49c85b86d6fc1d3b2722c07f2bec4c3ce" +version = "9.0.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "alloy-eip2930", "alloy-eip7702", "auto_impl", "either", - "revm-database-interface 4.0.1", - "revm-primitives 19.2.0", - "revm-state 4.0.1", - "serde", -] - -[[package]] -name = "revm-context-interface" -version = "7.0.1" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" -dependencies = [ - "alloy-eip2930", - "alloy-eip7702", - "auto_impl", - "either", - "revm-database-interface 6.0.0", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "revm-database-interface 7.0.2", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "serde", ] @@ -5871,28 +5816,14 @@ dependencies = [ [[package]] name = "revm-database" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad3fbe34f6bb00a9c3155723b3718b9cb9f17066ba38f9eb101b678cd3626775" +version = "7.0.2" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ - "alloy-eips 1.0.20", - "revm-bytecode 4.1.0", - "revm-database-interface 4.0.1", - "revm-primitives 19.2.0", - "revm-state 4.0.1", - "serde", -] - -[[package]] -name = "revm-database" -version = "6.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" -dependencies = [ - "alloy-eips 1.0.20", - "revm-bytecode 5.0.0", - "revm-database-interface 6.0.0", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "alloy-eips 1.0.24", + "revm-bytecode 6.1.0", + "revm-database-interface 7.0.2", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "serde", ] @@ -5910,24 +5841,13 @@ dependencies = [ [[package]] name = "revm-database-interface" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b8acd36784a6d95d5b9e1b7be3ce014f1e759abb59df1fa08396b30f71adc2a" -dependencies = [ - "auto_impl", - "revm-primitives 19.2.0", - "revm-state 4.0.1", - "serde", -] - -[[package]] -name = "revm-database-interface" -version = "6.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "7.0.2" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "auto_impl", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "either", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "serde", ] @@ -5951,37 +5871,19 @@ dependencies = [ [[package]] name = "revm-handler" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "481e8c3290ff4fa1c066592fdfeb2b172edfd14d12e6cade6f6f5588cad9359a" -dependencies = [ - "auto_impl", - "revm-bytecode 4.1.0", - "revm-context 5.0.1", - "revm-context-interface 5.0.0", - "revm-database-interface 4.0.1", - "revm-interpreter 20.0.0", - "revm-precompile 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "revm-primitives 19.2.0", - "revm-state 4.0.1", - "serde", -] - -[[package]] -name = "revm-handler" -version = "7.0.1" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "8.1.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "auto_impl", "derive-where", - "revm-bytecode 5.0.0", - "revm-context 7.0.1", - "revm-context-interface 7.0.1", - "revm-database-interface 6.0.0", - "revm-interpreter 22.0.1", - "revm-precompile 23.0.0", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "revm-bytecode 6.1.0", + "revm-context 8.0.4", + "revm-context-interface 9.0.0", + "revm-database-interface 7.0.2", + "revm-interpreter 24.0.0", + "revm-precompile 25.0.0", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "serde", ] @@ -6004,34 +5906,17 @@ dependencies = [ [[package]] name = "revm-inspector" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc1167ef8937d8867888e63581d8ece729a72073d322119ef4627d813d99ecb" -dependencies = [ - "auto_impl", - "revm-context 5.0.1", - "revm-database-interface 4.0.1", - "revm-handler 5.0.1", - "revm-interpreter 20.0.0", - "revm-primitives 19.2.0", - "revm-state 4.0.1", - "serde", - "serde_json", -] - -[[package]] -name = "revm-inspector" -version = "7.0.1" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "8.1.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "auto_impl", "either", - "revm-context 7.0.1", - "revm-database-interface 6.0.0", - "revm-handler 7.0.1", - "revm-interpreter 22.0.1", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "revm-context 8.0.4", + "revm-database-interface 7.0.2", + "revm-handler 8.1.0", + "revm-interpreter 24.0.0", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "serde", "serde_json", ] @@ -6050,24 +5935,12 @@ dependencies = [ [[package]] name = "revm-interpreter" -version = "20.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5ee65e57375c6639b0f50555e92a4f1b2434349dd32f52e2176f5c711171697" -dependencies = [ - "revm-bytecode 4.1.0", - "revm-context-interface 5.0.0", - "revm-primitives 19.2.0", - "serde", -] - -[[package]] -name = "revm-interpreter" -version = "22.0.1" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "24.0.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ - "revm-bytecode 5.0.0", - "revm-context-interface 7.0.1", - "revm-primitives 20.0.0", + "revm-bytecode 6.1.0", + "revm-context-interface 9.0.0", + "revm-primitives 20.1.0", "serde", ] @@ -6096,31 +5969,6 @@ dependencies = [ "sha2 0.10.9", ] -[[package]] -name = "revm-precompile" -version = "21.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9311e735123d8d53a02af2aa81877bba185be7c141be7f931bb3d2f3af449c" -dependencies = [ - "ark-bls12-381", - "ark-bn254", - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "aurora-engine-modexp", - "blst", - "c-kzg", - "cfg-if", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libsecp256k1", - "once_cell", - "p256 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", - "revm-primitives 19.2.0", - "ripemd", - "secp256k1 0.30.0", - "sha2 0.10.9", -] - [[package]] name = "revm-precompile" version = "21.0.0" @@ -6144,22 +5992,24 @@ dependencies = [ [[package]] name = "revm-precompile" -version = "23.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "25.0.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "ark-bls12-381", "ark-bn254", "ark-ec", "ark-ff 0.5.0", "ark-serialize 0.5.0", + "arrayref", "aurora-engine-modexp", + "blst", "c-kzg", "cfg-if", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "libsecp256k1", "once_cell", "p256 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", - "revm-primitives 20.0.0", + "revm-primitives 20.1.0", "ripemd", "rug", "secp256k1 0.31.1", @@ -6188,19 +6038,8 @@ dependencies = [ [[package]] name = "revm-primitives" -version = "19.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c1588093530ec4442461163be49c433c07a3235d1ca6f6799fef338dacc50d3" -dependencies = [ - "alloy-primitives", - "num_enum", - "serde", -] - -[[package]] -name = "revm-primitives" -version = "20.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "20.1.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "alloy-primitives", "num_enum", @@ -6210,14 +6049,14 @@ dependencies = [ [[package]] name = "revm-scroll" version = "0.1.0" -source = "git+https://github.com/scroll-tech/scroll-revm?branch=main#6a1e33df5b9e5ad6585a8469faaba9e6ea5e3f3d" +source = "git+https://github.com/scroll-tech/scroll-revm#720ee7802e5ad695ac1f8699bbab9c9f2424417f" dependencies = [ "auto_impl", "enumn", "once_cell", - "revm 26.0.1", - "revm-inspector 7.0.1", - "revm-primitives 20.0.0", + "revm 27.1.0", + "revm-inspector 8.1.0", + "revm-primitives 20.1.0", "serde", ] @@ -6235,24 +6074,12 @@ dependencies = [ [[package]] name = "revm-state" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0040c61c30319254b34507383ba33d85f92949933adf6525a2cede05d165e1fa" +version = "7.0.2" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "bitflags", - "revm-bytecode 4.1.0", - "revm-primitives 19.2.0", - "serde", -] - -[[package]] -name = "revm-state" -version = "6.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" -dependencies = [ - "bitflags", - "revm-bytecode 5.0.0", - "revm-primitives 20.0.0", + "revm-bytecode 6.1.0", + "revm-primitives 20.1.0", "serde", ] @@ -6339,8 +6166,9 @@ dependencies = [ [[package]] name = "ruint" -version = "1.15.0" -source = "git+https://github.com/scroll-tech/uint.git?branch=v1.15.0#e80953859952d6ad3cfd96d0a659499c38b96794" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecb38f82477f20c5c3d62ef52d7c4e536e38ea9b73fb570a20c5cae0e14bcf6" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -6367,7 +6195,8 @@ dependencies = [ [[package]] name = "ruint-macro" version = "1.2.1" -source = "git+https://github.com/scroll-tech/uint.git?branch=v1.15.0#e80953859952d6ad3cfd96d0a659499c38b96794" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" [[package]] name = "rustc-demangle" @@ -6451,20 +6280,24 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "sbv-core" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Fopenvm-1.3#a4d0e2302ffd3ecbeef29e16ddeb361084358f7b" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" dependencies = [ + "cfg-if", + "itertools 0.14.0", + "rkyv", "sbv-helpers", "sbv-kv", "sbv-precompile", "sbv-primitives", "sbv-trie", - "thiserror 1.0.69", + "serde", + "thiserror 2.0.12", ] [[package]] name = "sbv-helpers" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Fopenvm-1.3#a4d0e2302ffd3ecbeef29e16ddeb361084358f7b" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" dependencies = [ "tracing", ] @@ -6472,7 +6305,7 @@ dependencies = [ [[package]] name = "sbv-kv" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Fopenvm-1.3#a4d0e2302ffd3ecbeef29e16ddeb361084358f7b" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" dependencies = [ "auto_impl", "hashbrown 0.15.4", @@ -6482,7 +6315,7 @@ dependencies = [ [[package]] name = "sbv-precompile" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Fopenvm-1.3#a4d0e2302ffd3ecbeef29e16ddeb361084358f7b" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" dependencies = [ "openvm-ecc-guest", "openvm-pairing", @@ -6493,13 +6326,13 @@ dependencies = [ [[package]] name = "sbv-primitives" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Fopenvm-1.3#a4d0e2302ffd3ecbeef29e16ddeb361084358f7b" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "auto_impl", "itertools 0.14.0", "reth-chainspec", @@ -6513,7 +6346,7 @@ dependencies = [ "reth-scroll-evm", "reth-scroll-forks", "reth-scroll-primitives", - "revm 26.0.1", + "revm 27.1.0", "revm-scroll", "rkyv", "sbv-helpers", @@ -6527,7 +6360,7 @@ dependencies = [ [[package]] name = "sbv-trie" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Fopenvm-1.3#a4d0e2302ffd3ecbeef29e16ddeb361084358f7b" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" dependencies = [ "alloy-rlp", "alloy-trie", @@ -6536,19 +6369,19 @@ dependencies = [ "sbv-helpers", "sbv-kv", "sbv-primitives", - "thiserror 1.0.69", + "thiserror 2.0.12", ] [[package]] name = "scroll-alloy-consensus" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "derive_more 2.0.1", "reth-codecs", "serde", @@ -6557,26 +6390,26 @@ dependencies = [ [[package]] name = "scroll-alloy-evm" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", "auto_impl", - "revm 26.0.1", + "encoder-standard", + "revm 27.1.0", "revm-scroll", "scroll-alloy-consensus", "scroll-alloy-hardforks", "serde", - "zstd", ] [[package]] name = "scroll-alloy-hardforks" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" dependencies = [ "alloy-hardforks", "auto_impl", @@ -6700,7 +6533,7 @@ dependencies = [ "openvm-transpiler", "rayon", "regex", - "revm 24.0.0", + "revm 27.1.0", "rkyv", "sbv-primitives", "scroll-zkvm-prover", @@ -6737,7 +6570,7 @@ dependencies = [ "openvm-native-recursion", "openvm-sdk", "openvm-stark-sdk", - "revm 24.0.0", + "revm 27.1.0", "rkyv", "sbv-primitives", "scroll-zkvm-types", @@ -6779,13 +6612,14 @@ name = "scroll-zkvm-types-base" version = "0.5.0" dependencies = [ "alloy-primitives", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "itertools 0.14.0", "rkyv", "sbv-primitives", "serde", "sha2 0.10.9", "sha3", + "tiny-keccak", ] [[package]] @@ -6829,14 +6663,16 @@ dependencies = [ "openvm", "openvm-custom-insn", "openvm-rv32im-guest", - "revm-precompile 21.0.0 (git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v74)", + "revm-precompile 21.0.0", "rkyv", "sbv-core", + "sbv-helpers", "sbv-kv", "sbv-primitives", "sbv-trie", "scroll-zkvm-types-base", "serde", + "tiny-keccak", ] [[package]] @@ -6869,7 +6705,7 @@ dependencies = [ "openvm-native-recursion", "openvm-sdk", "openvm-stark-sdk", - "revm 24.0.0", + "revm 27.1.0", "scroll-zkvm-prover", "scroll-zkvm-types", "serde", diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index 8283674a..c533fb35 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -1,4 +1,5 @@ use alloy_primitives::B256; +use rkyv::rancor; use scroll_zkvm_types_batch::ArchivedBatchWitness; use scroll_zkvm_types_circuit::{ AggCircuit, AggregationInput, Circuit, ProgramCommitment, @@ -39,7 +40,7 @@ impl Circuit for BatchCircuit { } fn validate(witness: &Self::Witness) -> Self::PublicInputs { - (BatchInfo::from(witness), (&witness.fork_name).into()) + (BatchInfo::from(witness), rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap()) } } @@ -64,7 +65,7 @@ impl AggCircuit for BatchCircuit { } fn aggregated_public_inputs(witness: &Self::Witness) -> Vec { - let fork_name = (&witness.fork_name).into(); + let fork_name = rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap(); witness .chunk_infos .iter() diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index 34449cc8..42d36727 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -13,6 +13,7 @@ use crate::child_commitments; #[allow(unused_imports, clippy::single_component_path_imports)] use openvm_keccak256_guest; +use rkyv::rancor; #[derive(Default)] pub struct BundleCircuit; @@ -32,7 +33,7 @@ impl Circuit for BundleCircuit { } fn validate(witness: &Self::Witness) -> Self::PublicInputs { - (BundleInfo::from(witness), (&witness.fork_name).into()) + (BundleInfo::from(witness), rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap()) } } @@ -57,7 +58,7 @@ impl AggCircuit for BundleCircuit { } fn aggregated_public_inputs(witness: &Self::Witness) -> Vec { - let fork_name = (&witness.fork_name).into(); + let fork_name = rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap(); witness .batch_infos .iter() diff --git a/crates/circuits/chunk-circuit/src/circuit.rs b/crates/circuits/chunk-circuit/src/circuit.rs index 8b7cdeb5..bcd1978a 100644 --- a/crates/circuits/chunk-circuit/src/circuit.rs +++ b/crates/circuits/chunk-circuit/src/circuit.rs @@ -1,4 +1,5 @@ use openvm::init; +use rkyv::rancor; use scroll_zkvm_types_chunk::ArchivedChunkWitness; use scroll_zkvm_types_circuit::{ Circuit, @@ -37,7 +38,7 @@ impl Circuit for ChunkCircuit { fn validate(witness: &Self::Witness) -> Self::PublicInputs { ( ChunkInfo::try_from(witness).expect("failed to execute chunk"), - (&witness.fork_name).into(), + rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap(), ) } } diff --git a/crates/types/chunk/src/lib.rs b/crates/types/chunk/src/lib.rs index 4b161006..49cecba7 100644 --- a/crates/types/chunk/src/lib.rs +++ b/crates/types/chunk/src/lib.rs @@ -1,5 +1,3 @@ -mod utils; - mod witness; pub use witness::{ArchivedChunkWitness, ChunkWitness}; From 53caeb2a409340790f80bb36dda28cd8248602fc Mon Sep 17 00:00:00 2001 From: lightsing Date: Mon, 18 Aug 2025 12:23:58 +0800 Subject: [PATCH 07/84] fmt --- crates/circuits/batch-circuit/src/circuit.rs | 5 ++++- crates/circuits/bundle-circuit/src/circuit.rs | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index c533fb35..9450493b 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -40,7 +40,10 @@ impl Circuit for BatchCircuit { } fn validate(witness: &Self::Witness) -> Self::PublicInputs { - (BatchInfo::from(witness), rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap()) + ( + BatchInfo::from(witness), + rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap(), + ) } } diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index 42d36727..a195d7d0 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -33,7 +33,10 @@ impl Circuit for BundleCircuit { } fn validate(witness: &Self::Witness) -> Self::PublicInputs { - (BundleInfo::from(witness), rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap()) + ( + BundleInfo::from(witness), + rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap(), + ) } } From c20af7108c0a4a00d50b1f43e669e6256225351b Mon Sep 17 00:00:00 2001 From: lightsing Date: Mon, 18 Aug 2025 12:25:50 +0800 Subject: [PATCH 08/84] actually Infallible --- crates/circuits/batch-circuit/src/circuit.rs | 6 +++--- crates/circuits/bundle-circuit/src/circuit.rs | 6 +++--- crates/circuits/chunk-circuit/src/circuit.rs | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index 9450493b..58dcca81 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -1,5 +1,5 @@ +use std::convert::Infallible; use alloy_primitives::B256; -use rkyv::rancor; use scroll_zkvm_types_batch::ArchivedBatchWitness; use scroll_zkvm_types_circuit::{ AggCircuit, AggregationInput, Circuit, ProgramCommitment, @@ -42,7 +42,7 @@ impl Circuit for BatchCircuit { fn validate(witness: &Self::Witness) -> Self::PublicInputs { ( BatchInfo::from(witness), - rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap(), + rkyv::deserialize::<_, Infallible>(&witness.fork_name).unwrap(), ) } } @@ -68,7 +68,7 @@ impl AggCircuit for BatchCircuit { } fn aggregated_public_inputs(witness: &Self::Witness) -> Vec { - let fork_name = rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap(); + let fork_name = rkyv::deserialize::<_, Infallible>(&witness.fork_name).unwrap(); witness .chunk_infos .iter() diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index a195d7d0..b236a710 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -1,3 +1,4 @@ +use std::convert::Infallible; use alloy_primitives::B256; use scroll_zkvm_types_bundle::ArchivedBundleWitness; use scroll_zkvm_types_circuit::{ @@ -13,7 +14,6 @@ use crate::child_commitments; #[allow(unused_imports, clippy::single_component_path_imports)] use openvm_keccak256_guest; -use rkyv::rancor; #[derive(Default)] pub struct BundleCircuit; @@ -35,7 +35,7 @@ impl Circuit for BundleCircuit { fn validate(witness: &Self::Witness) -> Self::PublicInputs { ( BundleInfo::from(witness), - rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap(), + rkyv::deserialize::<_, Infallible>(&witness.fork_name).unwrap(), ) } } @@ -61,7 +61,7 @@ impl AggCircuit for BundleCircuit { } fn aggregated_public_inputs(witness: &Self::Witness) -> Vec { - let fork_name = rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap(); + let fork_name = rkyv::deserialize::<_, Infallible>(&witness.fork_name).unwrap(); witness .batch_infos .iter() diff --git a/crates/circuits/chunk-circuit/src/circuit.rs b/crates/circuits/chunk-circuit/src/circuit.rs index bcd1978a..d8a7d327 100644 --- a/crates/circuits/chunk-circuit/src/circuit.rs +++ b/crates/circuits/chunk-circuit/src/circuit.rs @@ -1,5 +1,5 @@ +use std::convert::Infallible; use openvm::init; -use rkyv::rancor; use scroll_zkvm_types_chunk::ArchivedChunkWitness; use scroll_zkvm_types_circuit::{ Circuit, @@ -38,7 +38,7 @@ impl Circuit for ChunkCircuit { fn validate(witness: &Self::Witness) -> Self::PublicInputs { ( ChunkInfo::try_from(witness).expect("failed to execute chunk"), - rkyv::deserialize::<_, rancor::BoxedError>(&witness.fork_name).unwrap(), + rkyv::deserialize::<_, Infallible>(&witness.fork_name).unwrap(), ) } } From 77f8ed02b068825717c22f23f64a9aa06a4d6ffe Mon Sep 17 00:00:00 2001 From: lightsing Date: Mon, 18 Aug 2025 16:13:37 +0800 Subject: [PATCH 09/84] fmt --- crates/circuits/batch-circuit/src/circuit.rs | 2 +- crates/circuits/bundle-circuit/src/circuit.rs | 2 +- crates/circuits/chunk-circuit/src/circuit.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index 58dcca81..39541ecc 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -1,4 +1,3 @@ -use std::convert::Infallible; use alloy_primitives::B256; use scroll_zkvm_types_batch::ArchivedBatchWitness; use scroll_zkvm_types_circuit::{ @@ -9,6 +8,7 @@ use scroll_zkvm_types_circuit::{ chunk::VersionedChunkInfo, }, }; +use std::convert::Infallible; use crate::child_commitments; diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index b236a710..12fabf3e 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -1,4 +1,3 @@ -use std::convert::Infallible; use alloy_primitives::B256; use scroll_zkvm_types_bundle::ArchivedBundleWitness; use scroll_zkvm_types_circuit::{ @@ -9,6 +8,7 @@ use scroll_zkvm_types_circuit::{ bundle::{BundleInfo, VersionedBundleInfo}, }, }; +use std::convert::Infallible; use crate::child_commitments; diff --git a/crates/circuits/chunk-circuit/src/circuit.rs b/crates/circuits/chunk-circuit/src/circuit.rs index d8a7d327..df98bc8c 100644 --- a/crates/circuits/chunk-circuit/src/circuit.rs +++ b/crates/circuits/chunk-circuit/src/circuit.rs @@ -1,4 +1,3 @@ -use std::convert::Infallible; use openvm::init; use scroll_zkvm_types_chunk::ArchivedChunkWitness; use scroll_zkvm_types_circuit::{ @@ -6,6 +5,7 @@ use scroll_zkvm_types_circuit::{ io::read_witnesses, public_inputs::chunk::{ChunkInfo, VersionedChunkInfo}, }; +use std::convert::Infallible; #[allow(unused_imports, clippy::single_component_path_imports)] use { From 3f21ca1ae297f0913f4f927ad335d47fbb9228c9 Mon Sep 17 00:00:00 2001 From: lightsing Date: Mon, 18 Aug 2025 16:13:21 +0800 Subject: [PATCH 10/84] add validium --- Cargo.lock | 486 ++++++++++++++---- Cargo.toml | 3 + crates/integration/src/testers/chunk.rs | 4 +- crates/integration/tests/chunk_circuit.rs | 2 +- crates/types/base/Cargo.toml | 3 + crates/types/base/src/public_inputs/chunk.rs | 82 ++- .../base/src/public_inputs/chunk/validium.rs | 148 ++++++ crates/types/chunk/src/execute.rs | 20 +- crates/types/chunk/src/lib.rs | 2 +- crates/types/chunk/src/witness.rs | 118 ++++- 10 files changed, 729 insertions(+), 139 deletions(-) create mode 100644 crates/types/base/src/public_inputs/chunk/validium.rs diff --git a/Cargo.lock b/Cargo.lock index 657e9089..2d0320c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -28,6 +28,41 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[package]] +name = "aead" +version = "0.6.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c01559752fbde7734af628961723aa734aa46351cbf5c9ce41133ad2ae1a09b9" +dependencies = [ + "crypto-common 0.2.0-rc.3", + "inout", +] + +[[package]] +name = "aes" +version = "0.9.0-rc.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd4838e4ad37bb032dea137f441d5f71c16c26c068af512e64c5bc13a88cdfc7" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.11.0-rc.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2be322be4a73a3a55ad74b9833238e76bfd6034ce69a05c1b41c879f6a3bdca6" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + [[package]] name = "ahash" version = "0.8.12" @@ -235,9 +270,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b26fdd571915bafe857fccba4ee1a4f352965800e46a53e4a5f50187b7776fa" +checksum = "459f98c6843f208856f338bfb25e65325467f7aff35dfeb0484d0a76e059134b" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -335,7 +370,7 @@ dependencies = [ "alloy-rlp", "alloy-serde 1.0.24", "alloy-sol-types", - "itertools 0.14.0", + "itertools 0.13.0", "serde", "serde_json", "serde_with", @@ -366,9 +401,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4be1ce1274ddd7fdfac86e5ece1b225e9bba1f2327e20fbb30ee6b9cc1423fe" +checksum = "d20d867dcf42019d4779519a1ceb55eba8d7f3d0e4f0a89bcba82b8f9eb01e48" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -380,9 +415,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e92f3708ea4e0d9139001c86c051c538af0146944a2a9c7181753bd944bf57" +checksum = "b74e91b0b553c115d14bd0ed41898309356dc85d0e3d4b9014c4e7715e48c8ad" dependencies = [ "alloy-sol-macro-input", "const-hex", @@ -398,9 +433,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afe1bd348a41f8c9b4b54dfb314886786d6201235b0b3f47198b9d910c86bb2" +checksum = "84194d31220803f5f62d0a00f583fd3a062b36382e2bea446f1af96727754565" dependencies = [ "const-hex", "dunce", @@ -414,9 +449,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "1.2.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10db1bd7baa35bc8d4a1b07efbf734e73e5ba09f2580fb8cee3483a36087ceb2" +checksum = "fe8c27b3cf6b2bb8361904732f955bc7c05e00be5f469cec7e2280b6167f3ff0" dependencies = [ "serde", "winnow", @@ -424,9 +459,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6185e98a79cf19010722f48a74b5a65d153631d2f038cabd250f4b9e9813b8ad" +checksum = "a285b46e3e0c177887028278f04cc8262b76fd3b8e0e20e93cea0a58c35f5ac5" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -1309,6 +1344,16 @@ dependencies = [ "windows-link", ] +[[package]] +name = "cipher" +version = "0.5.0-rc.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd4ef774202f1749465fc7cf88d70fc30620e8cacd5429268f4bff7d003bd976" +dependencies = [ + "crypto-common 0.2.0-rc.3", + "inout", +] + [[package]] name = "clap" version = "4.5.39" @@ -1545,6 +1590,25 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a23fa214dea9efd4dacee5a5614646b30216ae0f05d4bb51bafb50e9da1c5be" +dependencies = [ + "hybrid-array", + "rand_core 0.9.3", +] + +[[package]] +name = "ctr" +version = "0.10.0-rc.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f239edce204df0e4503cccef3492552773d1ca4e002659a59ca715f099b45ca1" +dependencies = [ + "cipher", +] + [[package]] name = "darling" version = "0.20.11" @@ -1717,7 +1781,7 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", "const-oid", - "crypto-common", + "crypto-common 0.1.6", "subtle", ] @@ -1771,6 +1835,21 @@ dependencies = [ "spki", ] +[[package]] +name = "ecies" +version = "0.1.0" +source = "git+https://github.com/scroll-tech/ecies-rs#43756a524d5fc9910bca76327b9dc2b7e5b475a3" +dependencies = [ + "aes-gcm", + "digest 0.10.7", + "hkdf", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "k256 0.13.4 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-sha2 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "sha2 0.10.9", + "thiserror 2.0.12", +] + [[package]] name = "educe" version = "0.6.0" @@ -2124,6 +2203,15 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "ghash" +version = "0.6.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df2ef47489983b86b012ce4955b61fcfb1a99a761a1a8c79c3129e722da6795" +dependencies = [ + "polyval", +] + [[package]] name = "gimli" version = "0.31.1" @@ -2449,6 +2537,15 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + [[package]] name = "hmac" version = "0.12.1" @@ -2458,6 +2555,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "hybrid-array" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d15931895091dea5c47afa5b3c9a01ba634b311919fd4d41388fa0e3d76af" +dependencies = [ + "typenum", +] + [[package]] name = "iana-time-zone" version = "0.1.63" @@ -2643,6 +2749,15 @@ dependencies = [ "serde", ] +[[package]] +name = "inout" +version = "0.2.0-rc.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c774c86bce20ea04abe1c37cf0051c5690079a3a28ef5fdac2a5a0412b3d7d74" +dependencies = [ + "hybrid-array", +] + [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -2746,6 +2861,7 @@ dependencies = [ "once_cell", "serdect", "sha2 0.10.9", + "signature", ] [[package]] @@ -2759,11 +2875,30 @@ dependencies = [ "hex-literal", "num-bigint 0.4.6", "once_cell", - "openvm", - "openvm-algebra-guest", - "openvm-algebra-moduli-macros", - "openvm-ecc-guest", - "openvm-ecc-sw-macros", + "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "serde", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "ecdsa", + "elliptic-curve", + "ff 0.13.1", + "hex-literal", + "num-bigint 0.4.6", + "once_cell", + "openvm 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-algebra-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-ecc-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", "serde", ] @@ -3303,9 +3438,22 @@ dependencies = [ "getrandom 0.2.16", "getrandom 0.3.3", "num-bigint 0.4.6", - "openvm-custom-insn", - "openvm-platform", - "openvm-rv32im-guest", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "serde", +] + +[[package]] +name = "openvm" +version = "1.3.0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "bytemuck", + "num-bigint 0.4.6", + "openvm-custom-insn 0.1.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-platform 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", "serde", ] @@ -3343,7 +3491,17 @@ name = "openvm-algebra-complex-macros" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "openvm-macros-common", + "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "openvm-algebra-complex-macros" +version = "1.3.0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "openvm-macros-common 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", "quote", "syn 2.0.101", ] @@ -3356,10 +3514,25 @@ dependencies = [ "halo2curves-axiom 0.7.0", "num-bigint 0.4.6", "once_cell", - "openvm-algebra-complex-macros", - "openvm-algebra-moduli-macros", - "openvm-custom-insn", - "openvm-rv32im-guest", + "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "serde-big-array", + "strum_macros 0.26.4", +] + +[[package]] +name = "openvm-algebra-guest" +version = "1.3.0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "num-bigint 0.4.6", + "once_cell", + "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-custom-insn 0.1.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", "serde-big-array", "strum_macros 0.26.4", ] @@ -3371,7 +3544,19 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092 dependencies = [ "num-bigint 0.4.6", "num-prime", - "openvm-macros-common", + "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "openvm-algebra-moduli-macros" +version = "1.3.0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "num-bigint 0.4.6", + "num-prime", + "openvm-macros-common 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", "quote", "syn 2.0.101", ] @@ -3381,7 +3566,7 @@ name = "openvm-algebra-transpiler" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "openvm-algebra-guest", + "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-instructions", "openvm-instructions-derive", "openvm-stark-backend", @@ -3417,7 +3602,7 @@ name = "openvm-bigint-guest" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "openvm-platform", + "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "strum_macros 0.26.4", ] @@ -3443,7 +3628,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092 dependencies = [ "cargo_metadata 0.18.1", "eyre", - "openvm-platform", + "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "serde", "serde_json", ] @@ -3539,6 +3724,16 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "openvm-custom-insn" +version = "0.1.0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "openvm-ecc-circuit" version = "1.3.0" @@ -3577,11 +3772,29 @@ dependencies = [ "group 0.13.0", "halo2curves-axiom 0.7.0", "once_cell", - "openvm", - "openvm-algebra-guest", - "openvm-custom-insn", - "openvm-ecc-sw-macros", - "openvm-rv32im-guest", + "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "serde", + "strum_macros 0.26.4", +] + +[[package]] +name = "openvm-ecc-guest" +version = "1.3.0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "ecdsa", + "elliptic-curve", + "group 0.13.0", + "once_cell", + "openvm 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-algebra-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-custom-insn 0.1.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", "serde", "strum_macros 0.26.4", ] @@ -3591,7 +3804,17 @@ name = "openvm-ecc-sw-macros" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "openvm-macros-common", + "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "openvm-ecc-sw-macros" +version = "1.3.0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "openvm-macros-common 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", "quote", "syn 2.0.101", ] @@ -3601,7 +3824,7 @@ name = "openvm-ecc-transpiler" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "openvm-ecc-guest", + "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-instructions", "openvm-instructions-derive", "openvm-stark-backend", @@ -3667,7 +3890,7 @@ name = "openvm-keccak256-guest" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "openvm-platform", + "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", ] [[package]] @@ -3692,6 +3915,14 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "openvm-macros-common" +version = "1.3.0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "syn 2.0.101", +] + [[package]] name = "openvm-mod-circuit-builder" version = "1.3.0" @@ -3820,16 +4051,16 @@ dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", - "openvm", - "openvm-algebra-complex-macros", - "openvm-algebra-guest", - "openvm-algebra-moduli-macros", - "openvm-custom-insn", - "openvm-ecc-guest", - "openvm-ecc-sw-macros", + "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-pairing-guest", - "openvm-platform", - "openvm-rv32im-guest", + "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "rand 0.8.5", "serde", ] @@ -3852,7 +4083,7 @@ dependencies = [ "openvm-circuit-primitives", "openvm-circuit-primitives-derive", "openvm-ecc-circuit", - "openvm-ecc-guest", + "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-instructions", "openvm-mod-circuit-builder", "openvm-pairing-guest", @@ -3876,11 +4107,11 @@ dependencies = [ "lazy_static", "num-bigint 0.4.6", "num-traits", - "openvm", - "openvm-algebra-guest", - "openvm-algebra-moduli-macros", - "openvm-custom-insn", - "openvm-ecc-guest", + "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "rand 0.8.5", "serde", "strum_macros 0.26.4", @@ -3906,8 +4137,18 @@ version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ "libm", - "openvm-custom-insn", - "openvm-rv32im-guest", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", +] + +[[package]] +name = "openvm-platform" +version = "1.3.0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "libm", + "openvm-custom-insn 0.1.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", ] [[package]] @@ -3975,7 +4216,17 @@ name = "openvm-rv32im-guest" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "openvm-custom-insn", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "p3-field 0.1.0", + "strum_macros 0.26.4", +] + +[[package]] +name = "openvm-rv32im-guest" +version = "1.3.0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "openvm-custom-insn 0.1.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", "p3-field 0.1.0", "strum_macros 0.26.4", ] @@ -3987,7 +4238,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-rv32im-guest", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4013,7 +4264,7 @@ dependencies = [ "itertools 0.14.0", "metrics", "num-bigint 0.4.6", - "openvm", + "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-algebra-circuit", "openvm-algebra-transpiler", "openvm-bigint-circuit", @@ -4055,7 +4306,16 @@ name = "openvm-sha2" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "openvm-sha256-guest", + "openvm-sha256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "sha2 0.10.9", +] + +[[package]] +name = "openvm-sha2" +version = "1.3.0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "openvm-sha256-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", "sha2 0.10.9", ] @@ -4098,7 +4358,15 @@ name = "openvm-sha256-guest" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "openvm-platform", + "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", +] + +[[package]] +name = "openvm-sha256-guest" +version = "1.3.0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +dependencies = [ + "openvm-platform 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", ] [[package]] @@ -4108,7 +4376,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-sha256-guest", + "openvm-sha256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4185,7 +4453,7 @@ dependencies = [ "elf", "eyre", "openvm-instructions", - "openvm-platform", + "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-stark-backend", "rrs-lib", "thiserror 1.0.69", @@ -4237,11 +4505,11 @@ dependencies = [ "ff 0.13.1", "hex-literal", "num-bigint 0.4.6", - "openvm", - "openvm-algebra-guest", - "openvm-algebra-moduli-macros", - "openvm-ecc-guest", - "openvm-ecc-sw-macros", + "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "serde", ] @@ -4868,6 +5136,17 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "polyval" +version = "0.7.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff52e661730d7c6f95a72137e812e337eb5ff371d38d8588798e0df8404e610c" +dependencies = [ + "cfg-if", + "cpufeatures", + "universal-hash", +] + [[package]] name = "portable-atomic" version = "1.11.1" @@ -6317,9 +6596,9 @@ name = "sbv-precompile" version = "2.0.0" source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" dependencies = [ - "openvm-ecc-guest", + "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-pairing", - "openvm-sha2", + "openvm-sha2 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "sbv-primitives", ] @@ -6425,16 +6704,16 @@ dependencies = [ "c-kzg", "halo2curves-axiom 0.7.0", "itertools 0.14.0", - "openvm", - "openvm-algebra-complex-macros", - "openvm-algebra-guest", - "openvm-ecc-guest", + "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-keccak256-guest", "openvm-pairing", "openvm-pairing-guest", - "openvm-rv32im-guest", - "openvm-sha2", - "openvm-sha256-guest", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-sha2 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-sha256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "rkyv", "scroll-zkvm-types-batch", "scroll-zkvm-types-circuit", @@ -6479,10 +6758,10 @@ name = "scroll-zkvm-bundle-circuit" version = "0.5.0" dependencies = [ "alloy-primitives", - "openvm", - "openvm-algebra-guest", + "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-keccak256-guest", - "openvm-rv32im-guest", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "rkyv", "scroll-zkvm-types-bundle", "scroll-zkvm-types-circuit", @@ -6493,15 +6772,15 @@ name = "scroll-zkvm-chunk-circuit" version = "0.5.0" dependencies = [ "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm", - "openvm-algebra-complex-macros", - "openvm-algebra-guest", + "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-bigint-guest", - "openvm-ecc-guest", + "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-keccak256-guest", "openvm-pairing", "openvm-pairing-guest", - "openvm-rv32im-guest", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "p256 0.13.2 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "rkyv", "sbv-precompile", @@ -6613,12 +6892,15 @@ version = "0.5.0" dependencies = [ "alloy-primitives", "alloy-serde 1.0.24", + "alloy-sol-types", + "ecies", "itertools 0.14.0", "rkyv", "sbv-primitives", "serde", "sha2 0.10.9", "sha3", + "thiserror 2.0.12", "tiny-keccak", ] @@ -6630,12 +6912,12 @@ dependencies = [ "c-kzg", "halo2curves-axiom 0.7.0", "itertools 0.14.0", - "openvm", - "openvm-ecc-guest", + "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-pairing", "openvm-pairing-guest", - "openvm-sha2", - "openvm-sha256-guest", + "openvm-sha2 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-sha256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "rkyv", "scroll-zkvm-types-base", "serde", @@ -6660,9 +6942,9 @@ version = "0.5.0" dependencies = [ "alloy-primitives", "itertools 0.14.0", - "openvm", - "openvm-custom-insn", - "openvm-rv32im-guest", + "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "revm-precompile 21.0.0", "rkyv", "sbv-core", @@ -6682,9 +6964,9 @@ dependencies = [ "alloy-primitives", "getrandom 0.2.16", "itertools 0.14.0", - "openvm", - "openvm-custom-insn", - "openvm-rv32im-guest", + "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "rkyv", "scroll-zkvm-types-base", "serde", @@ -7271,9 +7553,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c8c8f496c33dc6343dac05b4be8d9e0bca180a4caa81d7b8416b10cc2273cd" +checksum = "a0b198d366dbec045acfcd97295eb653a7a2b40e4dc764ef1e79aafcad439d3c" dependencies = [ "paste", "proc-macro2", @@ -7676,6 +7958,16 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "universal-hash" +version = "0.6.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17866ce72039aaa929b785c51d08d0395e02cb5eaffd3efdf634b9b1f80b8157" +dependencies = [ + "crypto-common 0.2.0-rc.3", + "subtle", +] + [[package]] name = "unroll" version = "0.1.5" diff --git a/Cargo.toml b/Cargo.toml index 75d299fa..047ef93d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -69,12 +69,14 @@ scroll-alloy-evm = { git = "https://github.com/scroll-tech/reth", rev = "74dd0bd alloy-primitives = { version = "1.3", default-features = false, features = ["std", "map-hashbrown", "map-fxhash", "rkyv"] } alloy-serde = { version = "1.0.13", default-features = false } +alloy-sol-types = { version = "1.3", default-features = false } bitcode = { version = "0.6.5", default-features = false, features = ["serde", "derive"] } bincode_v1 = { version = "1.3", package = "bincode"} bincode = { version = "2.0" } cargo_metadata = "0.20" c-kzg = { version = "2.0" } derivative = "2.2.0" +ecies = { git = "https://github.com/scroll-tech/ecies-rs" } eyre = "0.6" halo2curves-axiom = { version = "0.5.3" } itertools = "0.14" @@ -97,6 +99,7 @@ snark-verifier-sdk = { version = "=0.2.1", default-features = false, features = "revm", ] } tiny-keccak = "2.0" +thiserror = "2" tracing = "0.1" vm-zstd = { git = "https://github.com/scroll-tech/rust-zstd-decompressor.git", branch = "master" } toml = "0.8.14" diff --git a/crates/integration/src/testers/chunk.rs b/crates/integration/src/testers/chunk.rs index da4ecb14..88d7ef75 100644 --- a/crates/integration/src/testers/chunk.rs +++ b/crates/integration/src/testers/chunk.rs @@ -117,7 +117,7 @@ impl ChunkTaskGenerator { .map(read_block_witness) .collect::>>()?; - let witness = ChunkWitness::new( + let witness = ChunkWitness::new_scroll( &block_witnesses, self.prev_message_hash .unwrap_or_else(|| B256::repeat_byte(1u8)), @@ -141,7 +141,7 @@ pub fn get_witness_from_env_or_builder( .iter() .map(read_block_witness) .collect::>>()?; - Ok(ChunkWitness::new( + Ok(ChunkWitness::new_scroll( &block_witnesses, B256::repeat_byte(1u8), testing_hardfork(), diff --git a/crates/integration/tests/chunk_circuit.rs b/crates/integration/tests/chunk_circuit.rs index dd8723d2..df40289e 100644 --- a/crates/integration/tests/chunk_circuit.rs +++ b/crates/integration/tests/chunk_circuit.rs @@ -74,7 +74,7 @@ fn test_autofill_trie_nodes() -> eyre::Result<()> { let mut template_wit = get_witness_from_env_or_builder(&mut preset_chunk())?; template_wit.blocks.truncate(1); - let wit = ChunkWitness::new( + let wit = ChunkWitness::new_scroll( &template_wit.blocks, template_wit.prev_msg_queue_hash, template_wit.fork_name, diff --git a/crates/types/base/Cargo.toml b/crates/types/base/Cargo.toml index 32c9df0a..91cbeb25 100644 --- a/crates/types/base/Cargo.toml +++ b/crates/types/base/Cargo.toml @@ -10,6 +10,8 @@ version.workspace = true [dependencies] alloy-primitives = { workspace = true } alloy-serde.workspace = true +alloy-sol-types.workspace = true +ecies.workspace = true rkyv.workspace = true sbv-primitives = { workspace = true, features = ["scroll-consensus-types", "scroll-reth-types", "scroll-reth-primitives-types", "reth-primitives-types"] } serde.workspace = true @@ -17,6 +19,7 @@ itertools.workspace = true sha3 = "0.10.8" sha2 = "0.10.8" tiny-keccak.workspace = true +thiserror.workspace = true [features] default = [] diff --git a/crates/types/base/src/public_inputs/chunk.rs b/crates/types/base/src/public_inputs/chunk.rs index 56a0c162..7ea3ecde 100644 --- a/crates/types/base/src/public_inputs/chunk.rs +++ b/crates/types/base/src/public_inputs/chunk.rs @@ -6,11 +6,16 @@ use alloy_primitives::{B256, U256}; use sbv_primitives::types::{ consensus::BlockHeader, eips::Encodable2718, - reth::primitives::{Block, RecoveredBlock, SignedTransaction, TransactionSigned}, + reth::primitives::{Block, RecoveredBlock, TransactionSigned}, }; use std::ops::Deref; +use ecies::SecretKey; +use itertools::Itertools; +use sbv_primitives::types::consensus::TxL1Message; use tiny_keccak::{Hasher, Keccak}; +pub mod validium; + /// Number of bytes used to serialise [`BlockContextV2`]. pub const SIZE_BLOCK_CTX: usize = 52; @@ -285,7 +290,10 @@ pub trait ChunkExt { /// Data hash before Euclid V2 fn legacy_data_hash(&self) -> B256; /// Rolling message queue hash after Euclid V2 - fn rolling_msg_queue_hash(&self, rolling_hash: B256) -> B256; + fn rolling_msg_queue_hash<'a, II, I>(&self, rolling_hash: B256, validium_txs: II) -> B256 + where + II: IntoIterator>, + I: IntoIterator; } impl]>> ChunkExt for T { @@ -315,10 +323,14 @@ impl]>> ChunkExt for T { } #[inline] - fn rolling_msg_queue_hash(&self, mut rolling_hash: B256) -> B256 { + fn rolling_msg_queue_hash<'a, II, I>(&self, mut rolling_hash: B256, validium_txs: II) -> B256 + where + II: IntoIterator>, + I: IntoIterator, + { let blocks = self.as_ref(); - for block in blocks.iter() { - rolling_hash = block.hash_msg_queue(&rolling_hash); + for (block, validium_txs) in blocks.iter().zip_eq(validium_txs) { + rolling_hash = block.hash_msg_queue(&rolling_hash, validium_txs); } rolling_hash } @@ -359,15 +371,29 @@ where /// Chunk related extension methods for Block trait BlockChunkExt { + /// Get an iterator over L1 message transactions in the block. + fn l1_txs_iter(&self) -> impl Iterator; /// Hash the header of the block - fn legacy_hash_da_header(&self, hasher: &mut impl tiny_keccak::Hasher); + fn legacy_hash_da_header(&self, hasher: &mut impl Hasher); /// Hash the l1 messages of the block fn legacy_hash_l1_msg(&self, hasher: &mut impl Hasher); /// Hash the l1 messages of the block - fn hash_msg_queue(&self, initial_queue_hash: &B256) -> B256; + fn hash_msg_queue(&self, initial_queue_hash: &B256, validium_txs: Option<(I, &SecretKey)>) -> B256 + where + I: IntoIterator; } impl BlockChunkExt for RecoveredBlock { + #[inline] + fn l1_txs_iter(&self) -> impl Iterator { + self + .body() + .transactions + .iter() + .filter_map(|tx| tx.as_l1_message()) + .map(|tx| tx.inner()) + } + #[inline] fn legacy_hash_da_header(&self, hasher: &mut impl Hasher) { hasher.update(&self.number.to_be_bytes()); @@ -383,28 +409,23 @@ impl BlockChunkExt for RecoveredBlock { #[inline] fn legacy_hash_l1_msg(&self, hasher: &mut impl Hasher) { - for tx in self - .body() - .transactions - .iter() - .filter(|tx| tx.is_l1_message()) + for tx in self.l1_txs_iter() { hasher.update(tx.tx_hash().as_slice()) } } #[inline] - fn hash_msg_queue(&self, initial_queue_hash: &B256) -> B256 { + fn hash_msg_queue(&self, initial_queue_hash: &B256, validium_txs: Option<(I, &SecretKey)>) -> B256 + where + I: IntoIterator, + { let mut rolling_hash = *initial_queue_hash; - for tx in self - .body() - .transactions - .iter() - .filter(|tx| tx.is_l1_message()) - { + + let mut hash_tx = |tx_hash: B256| { let mut hasher = Keccak::v256(); hasher.update(rolling_hash.as_slice()); - hasher.update(tx.tx_hash().as_slice()); + hasher.update(tx_hash.as_slice()); hasher.finalize(rolling_hash.as_mut_slice()); @@ -415,7 +436,26 @@ impl BlockChunkExt for RecoveredBlock { rolling_hash.0[29] = 0; rolling_hash.0[30] = 0; rolling_hash.0[31] = 0; - } + }; + + if let Some((txs, secret_key)) = validium_txs { + for (validium_tx, tx_in_block) in txs.into_iter().zip_eq(self.l1_txs_iter()) { + match validium::decrypt(&validium_tx, secret_key) { + Ok(decrypted) => { + assert_eq!(decrypted, *tx_in_block); + } + Err(e) => { + eprintln!("{}", e); + } + } + + hash_tx(validium_tx.tx_hash()); + } + } else { + for tx in self.l1_txs_iter() { + hash_tx(tx.tx_hash()); + } + }; rolling_hash } diff --git a/crates/types/base/src/public_inputs/chunk/validium.rs b/crates/types/base/src/public_inputs/chunk/validium.rs new file mode 100644 index 00000000..8dbae854 --- /dev/null +++ b/crates/types/base/src/public_inputs/chunk/validium.rs @@ -0,0 +1,148 @@ +#![allow(non_snake_case)] + +use alloy_primitives::{Address, Bytes, U256}; +use alloy_sol_types::{sol, SolCall}; +use sbv_primitives::types::consensus::TxL1Message; + +pub use ecies::SecretKey; + +sol! { + #[derive( + Debug, + serde::Deserialize, + serde::Serialize, + rkyv::Archive, + rkyv::Deserialize, + rkyv::Serialize, + )] + #[rkyv(derive(Debug))] + event QueueTransaction( + address indexed sender, + address indexed target, + uint256 value, + uint64 queueIndex, + uint256 gasLimit, + bytes data + ); + + #[derive(Debug)] + function relayMessage( + address sender, + address target, + uint256 value, + uint256 messageNonce, + bytes message + ); + + #[derive(Debug)] + function finalizeDepositERC20( + address token, + address l2Token, + address from, + address to, + uint256 amount, + bytes l2Data + ); + + #[derive(Debug)] + function finalizeDepositERC20Encrypted( + address token, + address l2Token, + address from, + bytes to, + uint256 amount, + bytes l2Data + ); + +} + +#[derive(Debug, thiserror::Error)] +pub enum ValidiumError { + #[error(transparent)] + Decode(#[from] alloy_sol_types::Error), + #[error(transparent)] + Decrypt(#[from] ecies::DecryptError), + #[error("Invalid target address")] + InvalidTarget, +} + +impl From<&QueueTransaction> for TxL1Message { + fn from(tx: &QueueTransaction) -> Self { + TxL1Message { + queue_index: tx.queueIndex, + gas_limit: tx.gasLimit.to(), + to: tx.target, + value: tx.value, + sender: tx.sender, + input: tx.data.clone(), + } + } +} + + +impl From<&ArchivedQueueTransaction> for TxL1Message { + fn from(tx: &ArchivedQueueTransaction) -> Self { + let gas_limit: U256 = tx.gasLimit.into(); + TxL1Message { + queue_index: tx.queueIndex.to_native(), + gas_limit: gas_limit.to(), + to: tx.target.into(), + value: tx.value.into(), + sender: tx.sender.into(), + input: Bytes::copy_from_slice(tx.data.as_ref()), + } + } +} + +pub fn decrypt(tx: &TxL1Message, secret_key: &SecretKey) -> Result { + Ok(TxL1Message { + queue_index: tx.queue_index, + gas_limit: tx.gas_limit, + to: tx.to, + value: tx.value, + sender: tx.sender, + input: decrypt_data(&tx.input, secret_key)?, + }) +} + +fn decrypt_data(data: &Bytes, secret_key: &SecretKey) -> Result { + if data.starts_with(&relayMessageCall::SELECTOR) { + let mut msg: relayMessageCall = relayMessageCall::abi_decode(data.as_ref())?; + if msg + .message + .starts_with(&finalizeDepositERC20EncryptedCall::SELECTOR) + { + msg.message = decrypt_message(&mut msg.message, secret_key)?; + return Ok(Bytes::from(msg.abi_encode())); + } + } + Ok(data.clone()) +} + +fn decrypt_message(message: &Bytes, secret_key: &SecretKey) -> Result { + if message.starts_with(&finalizeDepositERC20EncryptedCall::SELECTOR) { + let finalizeDepositERC20EncryptedCall { + token, + l2Token, + from, + to, + amount, + l2Data, + } = finalizeDepositERC20EncryptedCall::abi_decode(message.as_ref())?; + let to = secret_key.try_decrypt(to.as_ref())?; + let to = Address::try_from(to.as_slice()).map_err(|_| ValidiumError::InvalidTarget)?; + return Ok(Bytes::from( + finalizeDepositERC20Call { + token, + l2Token, + from, + to, + amount, + l2Data, + } + .abi_encode(), + )); + } + + Ok(message.clone()) +} diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index 1ef8535c..e00cbbb4 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -1,8 +1,8 @@ -use crate::ArchivedChunkWitness; +use crate::{ArchivedChunkWitness, ChunkWitnessExt}; use sbv_core::verifier::{self, VerifyResult}; use sbv_helpers::manually_drop_on_zkvm; use sbv_primitives::{ - B256, BlockWitness, U256, + BlockWitness, U256, chainspec::{Chain, build_chain_spec_force_hardfork}, hardforks::Hardfork, }; @@ -51,29 +51,17 @@ pub fn execute(witness: &ArchivedChunkWitness) -> Result { let mut rlp_buffer = manually_drop_on_zkvm!(Vec::with_capacity(2048)); let (tx_data_length, tx_data_digest) = blocks.tx_bytes_hash_in(rlp_buffer.as_mut()); - let data_hash = if witness.fork_name < ArchivedForkName::EuclidV2 { - blocks.legacy_data_hash() - } else { - B256::ZERO - }; - - let post_msg_queue_hash = if witness.fork_name >= ArchivedForkName::EuclidV2 { - blocks.rolling_msg_queue_hash(witness.prev_msg_queue_hash.into()) - } else { - B256::ZERO - }; - let chunk_info = ChunkInfo { chain_id: chain.id(), prev_state_root: pre_state_root, post_state_root, - data_hash, + data_hash: witness.legacy_data_hash(&*blocks).unwrap_or_default(), withdraw_root, tx_data_digest, tx_data_length: tx_data_length as u64, initial_block_number: blocks[0].header().number, prev_msg_queue_hash: witness.prev_msg_queue_hash.into(), - post_msg_queue_hash, + post_msg_queue_hash: witness.rolling_msg_queue_hash(&*blocks).unwrap_or_default(), block_ctxs: blocks.iter().map(Into::into).collect(), }; diff --git a/crates/types/chunk/src/lib.rs b/crates/types/chunk/src/lib.rs index 49cecba7..ffd476a7 100644 --- a/crates/types/chunk/src/lib.rs +++ b/crates/types/chunk/src/lib.rs @@ -1,6 +1,6 @@ mod witness; -pub use witness::{ArchivedChunkWitness, ChunkWitness}; +pub use witness::{ArchivedChunkWitness, ChunkWitness, ChunkWitnessExt}; mod execute; pub use execute::execute; diff --git a/crates/types/chunk/src/witness.rs b/crates/types/chunk/src/witness.rs index 8051b9cf..872bc960 100644 --- a/crates/types/chunk/src/witness.rs +++ b/crates/types/chunk/src/witness.rs @@ -1,8 +1,14 @@ use alloy_primitives::B256; use rkyv::util::AlignedVec; use sbv_core::verifier::StateCommitMode; +use sbv_primitives::types::consensus::TxL1Message; +use sbv_primitives::types::reth::primitives::{Block, RecoveredBlock}; use sbv_primitives::{U256, types::BlockWitness}; use std::collections::HashSet; +use std::iter; +use types_base::fork_name::ArchivedForkName; +use types_base::public_inputs::chunk::ChunkExt; +use types_base::public_inputs::chunk::validium::{QueueTransaction, SecretKey}; use types_base::{fork_name::ForkName, public_inputs::chunk::ChunkInfo}; /// The witness type accepted by the chunk-circuit. @@ -25,6 +31,30 @@ pub struct ChunkWitnessEuclid { pub fork_name: ForkName, } +/// The witness type accepted by the chunk-circuit. +#[derive( + Clone, + Debug, + serde::Deserialize, + serde::Serialize, + rkyv::Archive, + rkyv::Deserialize, + rkyv::Serialize, +)] +#[rkyv(derive(Debug))] +pub struct ChunkWitnessFeynman { + /// The block witness for each block in the chunk. + pub blocks: Vec, + /// The on-chain rolling L1 message queue hash before enqueueing any L1 msg tx from the chunk. + pub prev_msg_queue_hash: B256, + /// The code version specify the chain spec + pub fork_name: ForkName, + /// The compression ratios for each block in the chunk. + pub compression_ratios: Vec>, + /// The mode of state commitment for the chunk. + pub state_commit_mode: StateCommitMode, +} + /// The witness type accepted by the chunk-circuit. #[derive( Clone, @@ -47,6 +77,8 @@ pub struct ChunkWitness { pub compression_ratios: Vec>, /// The mode of state commitment for the chunk. pub state_commit_mode: StateCommitMode, + /// Validium encrypted txs and secret key if this is a validium chain. + pub validium: Option<(Vec>, Box<[u8]>)>, } #[derive(Clone, Debug)] @@ -57,7 +89,35 @@ pub struct ChunkDetails { } impl ChunkWitness { - pub fn new(blocks: &[BlockWitness], prev_msg_queue_hash: B256, fork_name: ForkName) -> Self { + pub fn new_scroll( + blocks: &[BlockWitness], + prev_msg_queue_hash: B256, + fork_name: ForkName, + ) -> Self { + Self::new(blocks, prev_msg_queue_hash, fork_name, None) + } + + pub fn new_validium( + blocks: &[BlockWitness], + prev_msg_queue_hash: B256, + fork_name: ForkName, + validium_txs: Vec>, + secret_key: SecretKey, + ) -> Self { + Self::new( + blocks, + prev_msg_queue_hash, + fork_name, + Some((validium_txs, secret_key.to_bytes())), + ) + } + + pub fn new( + blocks: &[BlockWitness], + prev_msg_queue_hash: B256, + fork_name: ForkName, + validium: Option<(Vec>, Box<[u8]>)>, + ) -> Self { let num_codes = blocks.iter().map(|w| w.codes.len()).sum(); let num_states = blocks.iter().map(|w| w.states.len()).sum(); let mut codes = HashSet::with_capacity(num_codes); @@ -96,8 +156,21 @@ impl ChunkWitness { fork_name, compression_ratios, state_commit_mode: StateCommitMode::Auto, + validium, } } + + /// Convert the `ChunkWitness` into a `ChunkWitnessFeynman`. + pub fn into_feynman(self) -> ChunkWitnessFeynman { + ChunkWitnessFeynman { + blocks: self.blocks, + prev_msg_queue_hash: self.prev_msg_queue_hash, + fork_name: self.fork_name, + compression_ratios: self.compression_ratios, + state_commit_mode: self.state_commit_mode, + } + } + /// Convert the `ChunkWitness` into a `ChunkWitnessEuclid`. pub fn into_euclid(self) -> ChunkWitnessEuclid { ChunkWitnessEuclid { @@ -106,6 +179,7 @@ impl ChunkWitness { fork_name: self.fork_name, } } + /// `guest_version` is related to the guest program. /// It is not always same with the evm hardfork. /// For example, a `Feynman` guest program can execute `EuclidV2` blocks. @@ -149,3 +223,45 @@ impl TryFrom<&ArchivedChunkWitness> for ChunkInfo { crate::execute(value) } } + +pub trait ChunkWitnessExt { + fn legacy_data_hash(&self, blocks: &[RecoveredBlock]) -> Option; + + fn rolling_msg_queue_hash(&self, blocks: &[RecoveredBlock]) -> Option; +} + +impl ChunkWitnessExt for ArchivedChunkWitness { + #[inline] + fn legacy_data_hash(&self, blocks: &[RecoveredBlock]) -> Option { + (self.fork_name < ArchivedForkName::EuclidV2).then(|| blocks.legacy_data_hash()) + } + + #[inline] + fn rolling_msg_queue_hash(&self, blocks: &[RecoveredBlock]) -> Option { + if self.fork_name < ArchivedForkName::EuclidV2 { + return None; + } + + let prev_msg_queue_hash: B256 = self.prev_msg_queue_hash.into(); + + let rolling_msg_queue_hash = match self.validium.as_ref() { + None => blocks.rolling_msg_queue_hash( + prev_msg_queue_hash, + iter::repeat_n(None::<(Vec, &SecretKey)>, blocks.len()), + ), + Some(validium) => { + let secret_key = + SecretKey::try_from_bytes(validium.1.as_ref()).expect("invalid secret key"); + blocks.rolling_msg_queue_hash( + prev_msg_queue_hash, + validium + .0 + .iter() + .map(|txs| Some((txs.iter().map(|tx| tx.into()), &secret_key))), + ) + } + }; + + Some(rolling_msg_queue_hash) + } +} From f8e93d47612b0f64e3c75b16c8848e4a0ee4c358 Mon Sep 17 00:00:00 2001 From: lightsing Date: Mon, 18 Aug 2025 16:32:58 +0800 Subject: [PATCH 11/84] mark todo --- crates/types/chunk/src/witness.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/types/chunk/src/witness.rs b/crates/types/chunk/src/witness.rs index 872bc960..3dcdcafd 100644 --- a/crates/types/chunk/src/witness.rs +++ b/crates/types/chunk/src/witness.rs @@ -192,6 +192,7 @@ impl ChunkWitness { let guest_version = guest_version.unwrap_or(self.fork_name); if guest_version >= ForkName::Feynman { // Use the new rkyv serialization for Feynman and later forks + // TODO: Validium compatibility rkyv::to_bytes::(self) } else { // Use the old rkyv serialization for earlier forks From 52755f99ee0ddac1b1b346d5653f6361f0520c4d Mon Sep 17 00:00:00 2001 From: lightsing Date: Mon, 18 Aug 2025 16:33:05 +0800 Subject: [PATCH 12/84] add test data --- .../integration/testdata/validium/1019.json | 87 +++++++++++++++++ .../testdata/validium/1019_validium_txs.json | 10 ++ .../integration/testdata/validium/1256.json | 93 ++++++++++++++++++ .../testdata/validium/1256_validium_txs.json | 10 ++ .../integration/testdata/validium/1276.json | 95 +++++++++++++++++++ .../testdata/validium/1276_validium_txs.json | 10 ++ 6 files changed, 305 insertions(+) create mode 100644 crates/integration/testdata/validium/1019.json create mode 100644 crates/integration/testdata/validium/1019_validium_txs.json create mode 100644 crates/integration/testdata/validium/1256.json create mode 100644 crates/integration/testdata/validium/1256_validium_txs.json create mode 100644 crates/integration/testdata/validium/1276.json create mode 100644 crates/integration/testdata/validium/1276_validium_txs.json diff --git a/crates/integration/testdata/validium/1019.json b/crates/integration/testdata/validium/1019.json new file mode 100644 index 00000000..e943b3bd --- /dev/null +++ b/crates/integration/testdata/validium/1019.json @@ -0,0 +1,87 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x3ce90891d90b3f682c03efcf8acf2545a5f6cbd44151e799d5225d396b05d76c", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "miner": "0x0000000000000000000000000000000000000000", + "state_root": "0x1e745aceffd254c7ea150c57c5d8a8f6f8a3097ac29af7ffce16b6c8aa8ee372", + "transactions_root": "0x96cd929dadc2617e456eb52ca643cd2829687781777575578eb74dabbde1d982", + "receipts_root": "0xec5ea0aec359988f09e33a0e938dc54d4c4ac6482cc98c229968682e4b7f0fb1", + "logs_bloom": "0x00200040000000000000800000000001000000000000001000000000000000000000000000001000000000000000000000000000000010000000000000000400000000000000000000000008000100000000000001000000000000000100000000000000020900400000000010000800000000000000010000000058000000000020000000010000000040000040400020008000000080000000000000100000000000000080000000800000000400000000000000000000008000000000000000000002000000000000000020040000000000000000000200000000000020200000000000000000000001000000080040000000000000000000000008000000", + "difficulty": "0x1", + "number": "0x3fb", + "gas_limit": "0x7a1200", + "gas_used": "0x5f045", + "timestamp": "0x6895ee1b", + "extra_data": "0x", + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": "0x0", + "withdrawals_root": null, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null + }, + "pre_state_root": "0xa0b42392ed00f962dd79f1724d31891c7c49c3b4dc879e072f89630335c18c1b", + "transaction": [ + { + "hash": "0x47efc8d1ea337050ec6e0ff04a407102ad26bc137169636555a022c7bc4db329", + "nonce": "0x0", + "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "gas_price": null, + "gas": "0xf4240", + "max_fee_per_gas": "0x0", + "max_priority_fee_per_gas": null, + "max_fee_per_blob_gas": null, + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a70592000000000000000000000000f64a532493c96a38e5d4e933359e70c575270915000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "signature": null, + "chain_id": null, + "blob_versioned_hashes": null, + "access_list": null, + "authorization_list": null, + "transaction_type": 126, + "queue_index": "0x0" + } + ], + "withdrawals": null, + "states": [ + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594dfadf71fa473d6a7a7a9dcd1499c4315fc457bb8", + "0xf8518080808080808080808080a0f9015f71561f6a9cf46db1082566825aaf6bddf61711bb6b041d7ef1d5e45af9808080a0f2cfb27d3fb57f56f62e0973942639252316ba6c319fb8e1ee92868bdffcae8080", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da516180a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcca0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0b95fe26ce057456c6c450bc74968f0b02f04598b1040f221d6dcf47f1f975349a09e88921a65a4e0885b5184ed269383efaf0710947c872955061c59fc077a3adb8080808080808080", + "0xf87180a0fb98b767393629d9bfb93fada4c90509fea70f7251e8bfbb9958bab7289fa26f80a0d7fb0b8838d85f28436150765402d495f441359787a3574ad50553b7502f76928080808080a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xf851808080808080a0fff67d3bf5e559c8139c86b9d08c0116c5d7a19b5a6c3802e70af76a2f1854c080808080808080a09169a8a5030370a2bc5a6bcfc09fe5218c0524fd4671830314cdb59b7793d1128080", + "0xf869a037cb6b4b7193493044bbb4e88ba2ada699e9da9a01c85b6096bebabe4ba4334ab846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba047747417a662b04fe37e06d9dce49d77cc67bdaa6e04a13ab0df5c54f745dca4", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d95946976a0273fb14fc58df9d7840cfd3256b8af7984", + "0xf869a0328fda92b5c07164bb42506cfa1f54b01846f04fd75a33912207c883cbae5cfbb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xf869a02080c5909396c0dfb921e1e67884b5c70f8f29697d6c89ad487bac3c8b772d99b846f8440180a03f9d1fa709b4e3aa6df641355c90dc9ad53d404185634e1bf87ed25406e67f12a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a058c6460055741fc4aa35ecee30694955aa0d772d607c9457d58b6f78053eb5dfa0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf8689f3b677423fa337485555bdb61c485755844fb70afb79537ffef69215fad1c40b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0dad338cf3bd32b6e5589b15cb870e8f98a8840c62d70871434444bcfde919ddf", + "0xf8718080a07bc829cf8dd426393ba407faf48530e732143890787e850a8ebf259502709db98080808080a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080808080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf9015180a020ac0d23f83ceb8520451be1aba90d998e7aa70fc4d8e5e7f9ce6998508023e780a0ecabdb8f15759fed69d4734fd1afed49fc1ce9fe64376a1844ede73baf3de221a0d9408ef8dce0a99a0c7e4009376112d323637d5619fd04839eaa6ddf8abc01db8080a0e52288535ac7fc004a23c7c29a1f0b5f884c8db35bab85e1902d875ec52d965e80a0b8055db3ca1f0c651766c16598ed1dec041568efa1f70cec9c06b2086338dd55a02d5ee4c7bf0794df78c2b40a930dde6ac7a131f3d48e6ecd0bb06ac5bd354bd7a0b9b23b80cd6b0e8521908972c4cc9302f23e49e7d6bd22e1228f4ba2acce3a37a07ecab3b62549ff9a35e52f9e9ebf8e41dba602c8c2cbd5e058d15d292a4668c780a00b4c87b6a88b23a5955b7d7244a065f8e9e0054361ab088481c3707ea0816cdaa0616e0a2a4fc2ad8b3d9f719a6734f5e7899d00e569e3451a716cf847b99255d880", + "0xf8518080a0b01460450ca263e1ad65154e9d8c57d162d1af2ab4669c53115ebc5433cf8cb18080808080808080a0bee831d91e49e67814173afe867c769a38faa75dcea204a24f470c84c24333688080808080", + "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d48195941480082b3164ccd3bcbd1ecb52720f5850f0e45c", + "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594d37594dde17dcb02e64023bd3cdddb9068bf6db9", + "0xf901f1a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a08a955e1b9ed7d6e47c399e1af7b803cacaddf66f4a44c0f8c7a4985d08485d1580a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0d829f43bc2e1241af0f4eb865e49735d3a235e1d1334fde126462993576799aba03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a06027b81f626cad0425a53d01f6241f0c576b1ca9a6a6b672c81762bc8c42b9c1a0475ee2034ee15615f28a7097df855c3705a63c1b713263aecbd216b78ec48d55a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf7a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5639594d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca", + "0xf85180808080808080808080a05016f95a216237ecc6a3b3a2c382c7d1e68e20c28cfb313eb06f83022b9eadfb8080a0238de5c37d08e53783150d3f58c44f048808a8df72321c17607e13245203bb98808080", + "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a02bce0a77970dc909d192776c6a445a0ed45279b81a34518a4744cde4bb3cd9fda0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe21aa034b255ffe46fabbd100c057b05288ed17ee1de7b08dcb47b4de4114275e0e1ff", + "0xf8b18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcc80a0b0ef21434c42e174ada1a8e8e3f713955a31017558b6dcdaef64ec14f33e9149a0bd7940db4b06e68a4fe74d394d0e0cc24e569a62c02111b3d8156f1987cb473c8080a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xf888a0209d888b8f443fa80d97d6ef86dad20c16dd6152e9d58bfbcb7e5a45ff5e2555b865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a0924a4bbbffb523fbc2a5404f5f66fa235cdf87d5d2cff85bd22469162e12b166a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf869a020ccc237cb14f1e7206826bf271fec2ea755a65ca3b2495aa4019e7b27041a3db846f8440180a050b318ede9092989f5c7bf4c4036ae9335fd312a98fe431f3b0a398a379078f9a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a8295945fdd39bd675b5951be2e58741c1910573a5774f1" + ], + "codes": [ + "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb95781565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb9576001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b7169063b2267a7b903490610c22907f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf8481565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf846001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", + "0x363d3d373d3d3d363d73d37594dde17dcb02e64023bd3cdddb9068bf6db95af43d82803e903d91602b57fd5bf3", + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a" + ] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/1019_validium_txs.json b/crates/integration/testdata/validium/1019_validium_txs.json new file mode 100644 index 00000000..97315775 --- /dev/null +++ b/crates/integration/testdata/validium/1019_validium_txs.json @@ -0,0 +1,10 @@ +[ + { + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "target": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "queueIndex": 0, + "gasLimit": "0xf4240", + "data": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504c73f3c2dc76596795c5ce57be763b5a9060ad45ceec355b04142d7604eb016616e4c0c753605509b62b3d569bd9c77515eff35f2c4b9a2c9b5798b982e5aeeada9eeb59fee8ad81ee1a3259871bfee4a3e906c2c5cffa8c9d6ec114c7c5b9560e5955b077aaf99717df8553d86b81a30d9d832e1000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } +] \ No newline at end of file diff --git a/crates/integration/testdata/validium/1256.json b/crates/integration/testdata/validium/1256.json new file mode 100644 index 00000000..207c77f5 --- /dev/null +++ b/crates/integration/testdata/validium/1256.json @@ -0,0 +1,93 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xd465c6780536f418568d57483ee50e72b833831c19a191ef83389b511251f719", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "miner": "0x0000000000000000000000000000000000000000", + "state_root": "0x415168a9651e1f3b5dc5628b9e366ad37c8a05de330d27ef573022220732a282", + "transactions_root": "0xa5985246bdfe99f40cdaded02470275a1bc68d3a67394a0628fb1ba2638fba1f", + "receipts_root": "0xc0ff0a3a0400e8d1075e576d12fe9ade41a34ac72272f72b9d2221fe3e0210af", + "logs_bloom": "0x00000000000000000000800000000000000000000000001000000000000000000000000000001000000000000000000000000000000010000000000000000c00000000000000000000000008000000000000000001000000000000000000000000000000020100400000000110000800000000000000000000000058004000000000000000010000000040000000400020008000000000000000000000100040000000000080000000800000000000000000000000000000008000000000000000000002000000000000000020000000000000000000000000000001000020200000000000000000000000000000080000000000000000000000000008040000", + "difficulty": "0x1", + "number": "0x4e8", + "gas_limit": "0x7a1200", + "gas_used": "0x25e5b", + "timestamp": "0x6895ef34", + "extra_data": "0x", + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": "0x0", + "withdrawals_root": null, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null + }, + "pre_state_root": "0xd8de3a9ec349663f2ba631e7db5b8638a0dbe7f8d3cf3195c786d3eb8ac5e550", + "transaction": [ + { + "hash": "0xdbd2b250fd90a9f1d781e120361bb8b28828455c89ea598a424a44be78423127", + "nonce": "0x0", + "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "gas_price": null, + "gas": "0xf4240", + "max_fee_per_gas": "0x0", + "max_priority_fee_per_gas": null, + "max_fee_per_blob_gas": null, + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a705920000000000000000000000003aafea05430a56097316b3a2cdf7ff28e4cc2b9c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "signature": null, + "chain_id": null, + "blob_versioned_hashes": null, + "access_list": null, + "authorization_list": null, + "transaction_type": 126, + "queue_index": "0x1" + } + ], + "withdrawals": null, + "states": [ + "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", + "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594d37594dde17dcb02e64023bd3cdddb9068bf6db9", + "0xf8689f3b677423fa337485555bdb61c485755844fb70afb79537ffef69215fad1c40b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0dad338cf3bd32b6e5589b15cb870e8f98a8840c62d70871434444bcfde919ddf", + "0xf9015180a034ffe60b579b442213b6366bfd89b1d76e8b442cc63a97952fd14470d9f8ec1080a0be7c26b6d6ec76fe96797d4ab2281875aa4c5fd84c3300962a9806126bcc24b3a01b12fc256adfd2aa370fdea11f576945f289f1220f5ed4bcd3717e54b1f967858080a0e52288535ac7fc004a23c7c29a1f0b5f884c8db35bab85e1902d875ec52d965e80a0bc550b863978f40529e231caa7b4fdf0a3e036593a253b6524cf693bb8465c2ea07a29a41389a775563f259edd3a16efb5bd22000538cb2497a3f7381ce418a49da0b9b23b80cd6b0e8521908972c4cc9302f23e49e7d6bd22e1228f4ba2acce3a37a07ecab3b62549ff9a35e52f9e9ebf8e41dba602c8c2cbd5e058d15d292a4668c780a016bec6e0789de961941afcea27ad81ac08daf198943b4fe6a557152c237951ada0ab9e001858297618a6854c4077a80dfb5be66336d5c617fa55aae70b7669b68d80", + "0xf851808080808080a0b284313f3cde2222dedc5f9067b40fceb0bed50555bf18fbb7b9d48705febc2d80808080808080a09169a8a5030370a2bc5a6bcfc09fe5218c0524fd4671830314cdb59b7793d1128080", + "0xf8518080a0b01460450ca263e1ad65154e9d8c57d162d1af2ab4669c53115ebc5433cf8cb18080808080808080a0bee831d91e49e67814173afe867c769a38faa75dcea204a24f470c84c24333688080808080", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a8295945fdd39bd675b5951be2e58741c1910573a5774f1", + "0xf869a020ccc237cb14f1e7206826bf271fec2ea755a65ca3b2495aa4019e7b27041a3db846f8440180a05832b9e4a453b204b469dd1ec9b5fd8b67ce307834666e308a75c910ddd13112a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf869a020cb6b4b7193493044bbb4e88ba2ada699e9da9a01c85b6096bebabe4ba4334ab846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba047747417a662b04fe37e06d9dce49d77cc67bdaa6e04a13ab0df5c54f745dca4", + "0xf869a0206fa4d0b426cd21e9e2efb29f0dcc6e93debf41907d3af7842c2668e734ea2cb846f8440180a0f1b5e1fdadf97363ae22e3c30fc8824a4283434608bbe4d26420f49368f8a8eaa0c34dc3e3b2b96c1410bd4cdfde933f041145c8958a0807dab0705c99f1bb557c", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a058c6460055741fc4aa35ecee30694955aa0d772d607c9457d58b6f78053eb5dfa0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf8b18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb2880a0444bb20502e2faba351f25402a825472ee36dbc64fc810596a74df733b093276808080a0bba9533e0c3e882950a739322e029fd8b7cf829893583d1cc6882cbfef9ceea1a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0c557d0d8d6d1ccbbba16ce309be7fc47931cce54470663fa528da9c3a90ff37e808080808080", + "0xe21aa034b255ffe46fabbd100c057b05288ed17ee1de7b08dcb47b4de4114275e0e1ff", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcc80a0b0ef21434c42e174ada1a8e8e3f713955a31017558b6dcdaef64ec14f33e9149a0bd7940db4b06e68a4fe74d394d0e0cc24e569a62c02111b3d8156f1987cb473ca0df8b9048bad60c470a2654eee3f64e485b1b3d9178f250e93203295e530ac60180a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0083dd83c98ee9d5da9a44b612a60e4b0663b2ac84b986213cc10dc878700b06ea0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf869a02080c5909396c0dfb921e1e67884b5c70f8f29697d6c89ad487bac3c8b772d99b846f8440280a03f9d1fa709b4e3aa6df641355c90dc9ad53d404185634e1bf87ed25406e67f12a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", + "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca", + "0xf87180a0c8b1182fb484dce06eed47858db807094b81378e928229b5645afd3c2edc52b480a0d7fb0b8838d85f28436150765402d495f441359787a3574ad50553b7502f76928080808080a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a08a955e1b9ed7d6e47c399e1af7b803cacaddf66f4a44c0f8c7a4985d08485d15a0bfc52ec0ce9136cde6fd254961909b29fdbe545c03435baedd2573a1deeeb42aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0d829f43bc2e1241af0f4eb865e49735d3a235e1d1334fde126462993576799aba03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a06027b81f626cad0425a53d01f6241f0c576b1ca9a6a6b672c81762bc8c42b9c1a08d72b212bbb5bb20ef0f8f467a0667c9b81d48ae25db58f1a55aa6af222af894a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d48195941480082b3164ccd3bcbd1ecb52720f5850f0e45c", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d95946976a0273fb14fc58df9d7840cfd3256b8af7984", + "0xf869a020823f37b7de174b4a867ec555284bb1165c8b33cbe4e2f09f2d87e1f9494cbdb846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "0xf8718080a012029a027a77ca1b6f037157f1f0cdafcdf85e7dc03c30ad04c6f2838714de9a80808080a02a0eb47c159b0ab16b7af59ff9988e1ec5f11329350d1b21af9d476e941db8788080a02a3a0fc1952479e950b7ef6015a3667c81b9de102761af6b0750b7149331e455808080808080", + "0xf8518080808080808080808080a0f9015f71561f6a9cf46db1082566825aaf6bddf61711bb6b041d7ef1d5e45af9808080a026c3cbe8ef6d3f9be6ad0cb64ded4df971bbf51131ba45d1f1634c52092aaae680", + "0xf85180808080808080808080a05016f95a216237ecc6a3b3a2c382c7d1e68e20c28cfb313eb06f83022b9eadfb8080a0238de5c37d08e53783150d3f58c44f048808a8df72321c17607e13245203bb98808080", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a0588d3c1ab6ca32676770c2e6233e63a2aeec88fc199262d5a64acfb50599fab1", + "0xf869a0328fda92b5c07164bb42506cfa1f54b01846f04fd75a33912207c883cbae5cfbb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xf871808080a0d00e6b55bc202837fd9998d284c31e290376de8ed718d50d4a19ff4d2f04a5f1808080a0537d3711100d980c295a131318a5a81887f9d648200ea981a39017445b5e515f80808080808080a05a956fef773f722f82e74365fcd0b89ef9c940c95ec52ace61b1b33a5328b46c80", + "0xf9011180a037b594ccfeb2dfe165f135c1db841f33e8ad15286c54c4bbf883a6ee971b2639a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da516180a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcca0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0b95fe26ce057456c6c450bc74968f0b02f04598b1040f221d6dcf47f1f975349a09e88921a65a4e0885b5184ed269383efaf0710947c872955061c59fc077a3adb808080808080a08384cbc0e87a1d7e5364b015c99d5adb1339a6632aa7199d203197284c62af8e80", + "0xf888a0209d888b8f443fa80d97d6ef86dad20c16dd6152e9d58bfbcb7e5a45ff5e2555b865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a05192d92dbe93bbbd67fd44f3a8abf691d1f2939158e768762545bd38e1bc39f4a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594dfadf71fa473d6a7a7a9dcd1499c4315fc457bb8", + "0xf8718080a07bc829cf8dd426393ba407faf48530e732143890787e850a8ebf259502709db98080808080a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080808080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380" + ], + "codes": [ + "0x363d3d373d3d3d363d73d37594dde17dcb02e64023bd3cdddb9068bf6db95af43d82803e903d91602b57fd5bf3", + "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf8481565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf846001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb95781565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb9576001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b7169063b2267a7b903490610c22907f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a", + "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a" + ] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/1256_validium_txs.json b/crates/integration/testdata/validium/1256_validium_txs.json new file mode 100644 index 00000000..3181829e --- /dev/null +++ b/crates/integration/testdata/validium/1256_validium_txs.json @@ -0,0 +1,10 @@ +[ + { + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "target": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "queueIndex": 1, + "gasLimit": "0xf4240", + "data": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504c28e2df1c91ff662bc8d76e919bff25f558b31324dbd2eaeda382b9e9e5fe74658ac77718c3d2dbe8d9a3809c7fe8d7e83cdb59f5b89aaee465b69b2d5154ec3fb61f2f9034b26254f08b11e0bddd4a12ddf94512399a47fb2068d9a2c672b73106c147c82b84fdc6e5c61b4425bba06d9a9fda3000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } +] \ No newline at end of file diff --git a/crates/integration/testdata/validium/1276.json b/crates/integration/testdata/validium/1276.json new file mode 100644 index 00000000..ed02a60d --- /dev/null +++ b/crates/integration/testdata/validium/1276.json @@ -0,0 +1,95 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xf511f5b60a4998719f8733efe836150f28ca3ab450d076c184b4024b60e742d1", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "miner": "0x0000000000000000000000000000000000000000", + "state_root": "0xf9227a9a66cfb1c29e41fc76684123ad153269fc109c33e230dc3b48f722b17b", + "transactions_root": "0x16f877f7deb45548be28e410df7d2baa7b4fecdc6acd050c7dce3700079d4cbe", + "receipts_root": "0x71caf7ccc2c7be5bf7086346030e906266d90727012fb641591f419a8f1d3005", + "logs_bloom": "0x00000000000000000000800000000000800000000000001000000000000000000000000000001000000000000000000000000400000210000000000000000400000000000000000000000008000000000000000001000000000000000000000000000000020100400000000010000800000000000000000000000058000000000000000000010000000060000000400020008000000000000000000000100000000000000080000000800000000000000000000000000000008000000000000000000002000000000000000020000000000000000000000000000000000020200000000000000000200000000000080000000800000000000000000008000000", + "difficulty": "0x1", + "number": "0x4fc", + "gas_limit": "0x7a1200", + "gas_used": "0x21b8f", + "timestamp": "0x6895ef48", + "extra_data": "0x", + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": "0x0", + "withdrawals_root": null, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null + }, + "pre_state_root": "0x415168a9651e1f3b5dc5628b9e366ad37c8a05de330d27ef573022220732a282", + "transaction": [ + { + "hash": "0x36cd9714ab88ee82730628acb5ab719d0580de1a3f658e9279ba1a53c33e3390", + "nonce": "0x0", + "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "gas_price": null, + "gas": "0xf4240", + "max_fee_per_gas": "0x0", + "max_priority_fee_per_gas": null, + "max_fee_per_blob_gas": null, + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a705920000000000000000000000005ab1be4da1f732ca0c604f1fdac8299053febfe3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "signature": null, + "chain_id": null, + "blob_versioned_hashes": null, + "access_list": null, + "authorization_list": null, + "transaction_type": 126, + "queue_index": "0x2" + } + ], + "withdrawals": null, + "states": [ + "0xeaa03fa4bec1d3298408bb5afcfcd9c430549c5b31f8aa5c5848151c0a55f473c34d88872386f26fc10000", + "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d48195941480082b3164ccd3bcbd1ecb52720f5850f0e45c", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcc80a0b0ef21434c42e174ada1a8e8e3f713955a31017558b6dcdaef64ec14f33e9149a0bd7940db4b06e68a4fe74d394d0e0cc24e569a62c02111b3d8156f1987cb473ca0df8b9048bad60c470a2654eee3f64e485b1b3d9178f250e93203295e530ac60180a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca", + "0xf851808080808080a0b284313f3cde2222dedc5f9067b40fceb0bed50555bf18fbb7b9d48705febc2d80808080808080a09169a8a5030370a2bc5a6bcfc09fe5218c0524fd4671830314cdb59b7793d1128080", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a0588d3c1ab6ca32676770c2e6233e63a2aeec88fc199262d5a64acfb50599fab1", + "0xf8518080a0b01460450ca263e1ad65154e9d8c57d162d1af2ab4669c53115ebc5433cf8cb18080808080808080a0bee831d91e49e67814173afe867c769a38faa75dcea204a24f470c84c24333688080808080", + "0xf9013180a037b594ccfeb2dfe165f135c1db841f33e8ad15286c54c4bbf883a6ee971b2639a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da516180a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcca0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0b95fe26ce057456c6c450bc74968f0b02f04598b1040f221d6dcf47f1f975349a09e88921a65a4e0885b5184ed269383efaf0710947c872955061c59fc077a3adba0349340bdd908871236fa260a16a0cc07ca99b1be947ff71d1bc0342bdebf5de68080808080a08384cbc0e87a1d7e5364b015c99d5adb1339a6632aa7199d203197284c62af8e80", + "0xf8518080808080808080808080a0f9015f71561f6a9cf46db1082566825aaf6bddf61711bb6b041d7ef1d5e45af9808080a026c3cbe8ef6d3f9be6ad0cb64ded4df971bbf51131ba45d1f1634c52092aaae680", + "0xf869a02080c5909396c0dfb921e1e67884b5c70f8f29697d6c89ad487bac3c8b772d99b846f8440280a03f9d1fa709b4e3aa6df641355c90dc9ad53d404185634e1bf87ed25406e67f12a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", + "0xf87180a0199ab2bc362d32aefb61f5bb3371af9a36d426f760e2dcb0c0815e67cae4dba180a0d7fb0b8838d85f28436150765402d495f441359787a3574ad50553b7502f76928080808080a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xf9015180a034ffe60b579b442213b6366bfd89b1d76e8b442cc63a97952fd14470d9f8ec1080a0be7c26b6d6ec76fe96797d4ab2281875aa4c5fd84c3300962a9806126bcc24b3a0ca808a00006496e3f5a8ee3f8c834cecd38e5fd48cfecdbc4aab63269b4113668080a0e52288535ac7fc004a23c7c29a1f0b5f884c8db35bab85e1902d875ec52d965e80a0bc550b863978f40529e231caa7b4fdf0a3e036593a253b6524cf693bb8465c2ea081aa8c377f94d985a8aadefe3f0f1270d0f0a0c3dccd2460200a76961a74574da0b9b23b80cd6b0e8521908972c4cc9302f23e49e7d6bd22e1228f4ba2acce3a37a07ecab3b62549ff9a35e52f9e9ebf8e41dba602c8c2cbd5e058d15d292a4668c780a016bec6e0789de961941afcea27ad81ac08daf198943b4fe6a557152c237951ada0ab9e001858297618a6854c4077a80dfb5be66336d5c617fa55aae70b7669b68d80", + "0xf869a020823f37b7de174b4a867ec555284bb1165c8b33cbe4e2f09f2d87e1f9494cbdb846f8440280a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a08a955e1b9ed7d6e47c399e1af7b803cacaddf66f4a44c0f8c7a4985d08485d15a0bfc52ec0ce9136cde6fd254961909b29fdbe545c03435baedd2573a1deeeb42aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0d829f43bc2e1241af0f4eb865e49735d3a235e1d1334fde126462993576799aba03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a06027b81f626cad0425a53d01f6241f0c576b1ca9a6a6b672c81762bc8c42b9c1a08d72b212bbb5bb20ef0f8f467a0667c9b81d48ae25db58f1a55aa6af222af894a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a058c6460055741fc4aa35ecee30694955aa0d772d607c9457d58b6f78053eb5dfa0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf8718080a012029a027a77ca1b6f037157f1f0cdafcdf85e7dc03c30ad04c6f2838714de9a80808080a02a0eb47c159b0ab16b7af59ff9988e1ec5f11329350d1b21af9d476e941db8788080a02a3a0fc1952479e950b7ef6015a3667c81b9de102761af6b0750b7149331e455808080808080", + "0xf869a0206fa4d0b426cd21e9e2efb29f0dcc6e93debf41907d3af7842c2668e734ea2cb846f8440180a03bc66a9018136605db122456257907a1c79f389b0dd56dc6f336d4e6c9cd25b3a0c34dc3e3b2b96c1410bd4cdfde933f041145c8958a0807dab0705c99f1bb557c", + "0xf8f18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a058fd0c07ae2ba9df11414ef2392a0bc1a631ce255556ae323a1a9c8dd030e18ca0444bb20502e2faba351f25402a825472ee36dbc64fc810596a74df733b093276808080a0bba9533e0c3e882950a739322e029fd8b7cf829893583d1cc6882cbfef9ceea1a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0c557d0d8d6d1ccbbba16ce309be7fc47931cce54470663fa528da9c3a90ff37e80a0acfe702776deb4688bd2282801dab92113716b20e319608a1c683e954a38040f80808080", + "0xf869a020cb6b4b7193493044bbb4e88ba2ada699e9da9a01c85b6096bebabe4ba4334ab846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba047747417a662b04fe37e06d9dce49d77cc67bdaa6e04a13ab0df5c54f745dca4", + "0xf869a020ccc237cb14f1e7206826bf271fec2ea755a65ca3b2495aa4019e7b27041a3db846f8440180a05832b9e4a453b204b469dd1ec9b5fd8b67ce307834666e308a75c910ddd13112a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf871808080a00f33314b1817ecef019640dcc40dd46b5573baf8544cbfd7e29b5ce7a4c247db808080a0537d3711100d980c295a131318a5a81887f9d648200ea981a39017445b5e515f80808080808080a0b8f779f0e4739e12bae97866a670745ee321ea7f48a9766663dab3750a089c3280", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594dfadf71fa473d6a7a7a9dcd1499c4315fc457bb8", + "0xf838a033978b4c69c48dd978ab43fe30f077615294f938fb7f936d9eb340e51ea7db2e9695125300000000000000000000000000000000000004", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0083dd83c98ee9d5da9a44b612a60e4b0663b2ac84b986213cc10dc878700b06ea0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf888a0209d888b8f443fa80d97d6ef86dad20c16dd6152e9d58bfbcb7e5a45ff5e2555b865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a0aad7c72b4d577a3d1d97154c0fc59ed849c8564be46d665253635f24f379ab2ea0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", + "0xf869a0328fda92b5c07164bb42506cfa1f54b01846f04fd75a33912207c883cbae5cfbb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d95946976a0273fb14fc58df9d7840cfd3256b8af7984", + "0xf85180808080808080808080a05016f95a216237ecc6a3b3a2c382c7d1e68e20c28cfb313eb06f83022b9eadfb8080a0238de5c37d08e53783150d3f58c44f048808a8df72321c17607e13245203bb98808080", + "0xf8718080a07bc829cf8dd426393ba407faf48530e732143890787e850a8ebf259502709db98080808080a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080808080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594d37594dde17dcb02e64023bd3cdddb9068bf6db9", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a8295945fdd39bd675b5951be2e58741c1910573a5774f1", + "0xf8689f3b677423fa337485555bdb61c485755844fb70afb79537ffef69215fad1c40b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0dad338cf3bd32b6e5589b15cb870e8f98a8840c62d70871434444bcfde919ddf", + "0xe21aa034b255ffe46fabbd100c057b05288ed17ee1de7b08dcb47b4de4114275e0e1ff" + ], + "codes": [ + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "0x363d3d373d3d3d363d73d37594dde17dcb02e64023bd3cdddb9068bf6db95af43d82803e903d91602b57fd5bf3", + "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a", + "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb95781565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb9576001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b7169063b2267a7b903490610c22907f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf8481565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf846001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a" + ] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/1276_validium_txs.json b/crates/integration/testdata/validium/1276_validium_txs.json new file mode 100644 index 00000000..d32fb440 --- /dev/null +++ b/crates/integration/testdata/validium/1276_validium_txs.json @@ -0,0 +1,10 @@ +[ + { + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "target": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "queueIndex": 2, + "gasLimit": "0xf4240", + "data": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000750490109ecdd2821a2bff973f758b1dc4ec9fbf5621d829a3e2085c24e70b0cce6d79ee2abeda08ca60962db7a5029e92d3325229ec31c3c907c83c833204568d0b9efcd7f83485123f9e056772b62c4e332288e41aa15537ea2262c844a6c8f8ea49ca4c3c0012e7c5177392540f1a86ff0b68c1d4000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } +] \ No newline at end of file From c30be918aa28ee4512a1ba290aeb0750a40304cf Mon Sep 17 00:00:00 2001 From: lightsing Date: Mon, 18 Aug 2025 17:49:04 +0800 Subject: [PATCH 13/84] add test --- Cargo.lock | 325 +++++------------- Cargo.toml | 20 +- .../circuits/chunk-circuit/.cargo/config.toml | 5 +- crates/integration/tests/chunk_circuit.rs | 35 ++ crates/types/chunk/src/witness.rs | 48 ++- 5 files changed, 182 insertions(+), 251 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2d0320c8..95e4dca1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1838,14 +1838,12 @@ dependencies = [ [[package]] name = "ecies" version = "0.1.0" -source = "git+https://github.com/scroll-tech/ecies-rs#43756a524d5fc9910bca76327b9dc2b7e5b475a3" dependencies = [ "aes-gcm", "digest 0.10.7", "hkdf", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", - "k256 0.13.4 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-sha2 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-sha2", "sha2 0.10.9", "thiserror 2.0.12", ] @@ -2864,25 +2862,6 @@ dependencies = [ "signature", ] -[[package]] -name = "k256" -version = "0.13.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" -dependencies = [ - "ecdsa", - "elliptic-curve", - "ff 0.13.1", - "hex-literal", - "num-bigint 0.4.6", - "once_cell", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "serde", -] - [[package]] name = "k256" version = "0.13.4" @@ -2894,11 +2873,11 @@ dependencies = [ "hex-literal", "num-bigint 0.4.6", "once_cell", - "openvm 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm", + "openvm-algebra-guest", + "openvm-algebra-moduli-macros", + "openvm-ecc-guest", + "openvm-ecc-sw-macros", "serde", ] @@ -3432,28 +3411,15 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openvm" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" dependencies = [ "bytemuck", "getrandom 0.2.16", "getrandom 0.3.3", "num-bigint 0.4.6", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "serde", -] - -[[package]] -name = "openvm" -version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" -dependencies = [ - "bytemuck", - "num-bigint 0.4.6", - "openvm-custom-insn 0.1.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-custom-insn", "openvm-platform 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-rv32im-guest", "serde", ] @@ -3486,69 +3452,32 @@ dependencies = [ "strum 0.26.3", ] -[[package]] -name = "openvm-algebra-complex-macros" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" -dependencies = [ - "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "quote", - "syn 2.0.101", -] - [[package]] name = "openvm-algebra-complex-macros" version = "1.3.0" source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" dependencies = [ - "openvm-macros-common 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-macros-common", "quote", "syn 2.0.101", ] -[[package]] -name = "openvm-algebra-guest" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" -dependencies = [ - "halo2curves-axiom 0.7.0", - "num-bigint 0.4.6", - "once_cell", - "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "serde-big-array", - "strum_macros 0.26.4", -] - [[package]] name = "openvm-algebra-guest" version = "1.3.0" source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" dependencies = [ + "halo2curves-axiom 0.7.0", "num-bigint 0.4.6", "once_cell", - "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-custom-insn 0.1.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-algebra-complex-macros", + "openvm-algebra-moduli-macros", + "openvm-custom-insn", + "openvm-rv32im-guest", "serde-big-array", "strum_macros 0.26.4", ] -[[package]] -name = "openvm-algebra-moduli-macros" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" -dependencies = [ - "num-bigint 0.4.6", - "num-prime", - "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "quote", - "syn 2.0.101", -] - [[package]] name = "openvm-algebra-moduli-macros" version = "1.3.0" @@ -3556,7 +3485,7 @@ source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c dependencies = [ "num-bigint 0.4.6", "num-prime", - "openvm-macros-common 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-macros-common", "quote", "syn 2.0.101", ] @@ -3566,7 +3495,7 @@ name = "openvm-algebra-transpiler" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-guest", "openvm-instructions", "openvm-instructions-derive", "openvm-stark-backend", @@ -3600,9 +3529,9 @@ dependencies = [ [[package]] name = "openvm-bigint-guest" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" dependencies = [ - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-platform 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", "strum_macros 0.26.4", ] @@ -3714,16 +3643,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "openvm-custom-insn" -version = "0.1.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "openvm-custom-insn" version = "0.1.0" @@ -3762,25 +3681,6 @@ dependencies = [ "strum 0.26.3", ] -[[package]] -name = "openvm-ecc-guest" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" -dependencies = [ - "ecdsa", - "elliptic-curve", - "group 0.13.0", - "halo2curves-axiom 0.7.0", - "once_cell", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "serde", - "strum_macros 0.26.4", -] - [[package]] name = "openvm-ecc-guest" version = "1.3.0" @@ -3789,32 +3689,23 @@ dependencies = [ "ecdsa", "elliptic-curve", "group 0.13.0", + "halo2curves-axiom 0.7.0", "once_cell", - "openvm 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-custom-insn 0.1.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm", + "openvm-algebra-guest", + "openvm-custom-insn", + "openvm-ecc-sw-macros", + "openvm-rv32im-guest", "serde", "strum_macros 0.26.4", ] -[[package]] -name = "openvm-ecc-sw-macros" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" -dependencies = [ - "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "quote", - "syn 2.0.101", -] - [[package]] name = "openvm-ecc-sw-macros" version = "1.3.0" source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" dependencies = [ - "openvm-macros-common 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-macros-common", "quote", "syn 2.0.101", ] @@ -3824,7 +3715,7 @@ name = "openvm-ecc-transpiler" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-guest", "openvm-instructions", "openvm-instructions-derive", "openvm-stark-backend", @@ -3888,9 +3779,9 @@ dependencies = [ [[package]] name = "openvm-keccak256-guest" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" dependencies = [ - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-platform 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", ] [[package]] @@ -3907,14 +3798,6 @@ dependencies = [ "strum 0.26.3", ] -[[package]] -name = "openvm-macros-common" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" -dependencies = [ - "syn 2.0.101", -] - [[package]] name = "openvm-macros-common" version = "1.3.0" @@ -4043,7 +3926,7 @@ dependencies = [ [[package]] name = "openvm-pairing" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" dependencies = [ "group 0.13.0", "halo2curves-axiom 0.7.0", @@ -4051,16 +3934,16 @@ dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm", + "openvm-algebra-complex-macros", + "openvm-algebra-guest", + "openvm-algebra-moduli-macros", + "openvm-custom-insn", + "openvm-ecc-guest", + "openvm-ecc-sw-macros", "openvm-pairing-guest", - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-platform 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-rv32im-guest", "rand 0.8.5", "serde", ] @@ -4083,7 +3966,7 @@ dependencies = [ "openvm-circuit-primitives", "openvm-circuit-primitives-derive", "openvm-ecc-circuit", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-guest", "openvm-instructions", "openvm-mod-circuit-builder", "openvm-pairing-guest", @@ -4099,7 +3982,7 @@ dependencies = [ [[package]] name = "openvm-pairing-guest" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" dependencies = [ "halo2curves-axiom 0.7.0", "hex-literal", @@ -4107,11 +3990,11 @@ dependencies = [ "lazy_static", "num-bigint 0.4.6", "num-traits", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm", + "openvm-algebra-guest", + "openvm-algebra-moduli-macros", + "openvm-custom-insn", + "openvm-ecc-guest", "rand 0.8.5", "serde", "strum_macros 0.26.4", @@ -4136,9 +4019,8 @@ name = "openvm-platform" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "libm", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-custom-insn", + "openvm-rv32im-guest", ] [[package]] @@ -4147,8 +4029,8 @@ version = "1.3.0" source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" dependencies = [ "libm", - "openvm-custom-insn 0.1.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-custom-insn", + "openvm-rv32im-guest", ] [[package]] @@ -4211,22 +4093,12 @@ dependencies = [ "strum 0.26.3", ] -[[package]] -name = "openvm-rv32im-guest" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" -dependencies = [ - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "p3-field 0.1.0", - "strum_macros 0.26.4", -] - [[package]] name = "openvm-rv32im-guest" version = "1.3.0" source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" dependencies = [ - "openvm-custom-insn 0.1.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-custom-insn", "p3-field 0.1.0", "strum_macros 0.26.4", ] @@ -4238,7 +4110,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-rv32im-guest", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4264,7 +4136,7 @@ dependencies = [ "itertools 0.14.0", "metrics", "num-bigint 0.4.6", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm", "openvm-algebra-circuit", "openvm-algebra-transpiler", "openvm-bigint-circuit", @@ -4301,21 +4173,12 @@ dependencies = [ "tracing", ] -[[package]] -name = "openvm-sha2" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" -dependencies = [ - "openvm-sha256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "sha2 0.10.9", -] - [[package]] name = "openvm-sha2" version = "1.3.0" source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" dependencies = [ - "openvm-sha256-guest 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-sha256-guest", "sha2 0.10.9", ] @@ -4353,14 +4216,6 @@ dependencies = [ "strum 0.26.3", ] -[[package]] -name = "openvm-sha256-guest" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" -dependencies = [ - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", -] - [[package]] name = "openvm-sha256-guest" version = "1.3.0" @@ -4376,7 +4231,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-sha256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-sha256-guest", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4498,18 +4353,18 @@ dependencies = [ [[package]] name = "p256" version = "0.13.2" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" dependencies = [ "ecdsa", "elliptic-curve", "ff 0.13.1", "hex-literal", "num-bigint 0.4.6", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm", + "openvm-algebra-guest", + "openvm-algebra-moduli-macros", + "openvm-ecc-guest", + "openvm-ecc-sw-macros", "serde", ] @@ -6596,9 +6451,9 @@ name = "sbv-precompile" version = "2.0.0" source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" dependencies = [ - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-guest", "openvm-pairing", - "openvm-sha2 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-sha2", "sbv-primitives", ] @@ -6704,16 +6559,16 @@ dependencies = [ "c-kzg", "halo2curves-axiom 0.7.0", "itertools 0.14.0", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm", + "openvm-algebra-complex-macros", + "openvm-algebra-guest", + "openvm-ecc-guest", "openvm-keccak256-guest", "openvm-pairing", "openvm-pairing-guest", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-sha2 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-sha256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-rv32im-guest", + "openvm-sha2", + "openvm-sha256-guest", "rkyv", "scroll-zkvm-types-batch", "scroll-zkvm-types-circuit", @@ -6758,10 +6613,10 @@ name = "scroll-zkvm-bundle-circuit" version = "0.5.0" dependencies = [ "alloy-primitives", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm", + "openvm-algebra-guest", "openvm-keccak256-guest", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-rv32im-guest", "rkyv", "scroll-zkvm-types-bundle", "scroll-zkvm-types-circuit", @@ -6771,17 +6626,17 @@ dependencies = [ name = "scroll-zkvm-chunk-circuit" version = "0.5.0" dependencies = [ - "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "k256 0.13.4 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm", + "openvm-algebra-complex-macros", + "openvm-algebra-guest", "openvm-bigint-guest", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-guest", "openvm-keccak256-guest", "openvm-pairing", "openvm-pairing-guest", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "p256 0.13.2 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-rv32im-guest", + "p256 0.13.2 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", "rkyv", "sbv-precompile", "scroll-zkvm-types-chunk", @@ -6912,12 +6767,12 @@ dependencies = [ "c-kzg", "halo2curves-axiom 0.7.0", "itertools 0.14.0", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm", + "openvm-ecc-guest", "openvm-pairing", "openvm-pairing-guest", - "openvm-sha2 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-sha256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-sha2", + "openvm-sha256-guest", "rkyv", "scroll-zkvm-types-base", "serde", @@ -6942,9 +6797,9 @@ version = "0.5.0" dependencies = [ "alloy-primitives", "itertools 0.14.0", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm", + "openvm-custom-insn", + "openvm-rv32im-guest", "revm-precompile 21.0.0", "rkyv", "sbv-core", @@ -6964,9 +6819,9 @@ dependencies = [ "alloy-primitives", "getrandom 0.2.16", "itertools 0.14.0", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm", + "openvm-custom-insn", + "openvm-rv32im-guest", "rkyv", "scroll-zkvm-types-base", "serde", diff --git a/Cargo.toml b/Cargo.toml index 047ef93d..840b5459 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,7 +76,8 @@ bincode = { version = "2.0" } cargo_metadata = "0.20" c-kzg = { version = "2.0" } derivative = "2.2.0" -ecies = { git = "https://github.com/scroll-tech/ecies-rs" } +#ecies = { git = "https://github.com/scroll-tech/ecies-rs" } +ecies = { path = "../ecies-rs" } eyre = "0.6" halo2curves-axiom = { version = "0.5.3" } itertools = "0.14" @@ -131,6 +132,23 @@ revm-state = { git = "https://github.com/scroll-tech/revm" } alloy-primitives = { git = "https://github.com/scroll-tech/alloy-core", branch = "feat/rkyv" } +# FIXME: when openvm fixes https://github.com/openvm-org/openvm/pull/1937 +[patch.'https://github.com/openvm-org/openvm.git'] +openvm = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-algebra-complex-macros = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-custom-insn = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-sha2 = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-sha256-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-p256 = { git = "https://github.com/lightsing/openvm.git", package = "p256", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-k256 = { git = "https://github.com/lightsing/openvm.git", package = "k256", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-pairing = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-keccak256-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-algebra-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-ecc-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-bigint-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-pairing-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +openvm-rv32im-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } + [profile.maxperf] inherits = "release" lto = "fat" diff --git a/crates/circuits/chunk-circuit/.cargo/config.toml b/crates/circuits/chunk-circuit/.cargo/config.toml index e6e4f106..d692650a 100644 --- a/crates/circuits/chunk-circuit/.cargo/config.toml +++ b/crates/circuits/chunk-circuit/.cargo/config.toml @@ -1,3 +1,4 @@ [patch.crates-io] -k256 = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0" } -p256 = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0" } +# FIXME: when openvm fixes https://github.com/openvm-org/openvm/pull/1937 +k256 = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +p256 = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } diff --git a/crates/integration/tests/chunk_circuit.rs b/crates/integration/tests/chunk_circuit.rs index df40289e..aff2d096 100644 --- a/crates/integration/tests/chunk_circuit.rs +++ b/crates/integration/tests/chunk_circuit.rs @@ -1,3 +1,6 @@ +use std::env; +use std::path::Path; +use alloy_primitives::B256; use eyre::Ok; use scroll_zkvm_integration::{ ProverTester, prove_verify, tester_execute, @@ -7,8 +10,13 @@ use scroll_zkvm_integration::{ }, utils::metadata_from_chunk_witnesses, }; +use scroll_zkvm_integration::testers::chunk::read_block_witness; +use scroll_zkvm_integration::testers::PATH_TESTDATA; use scroll_zkvm_prover::{Prover, utils::vm::ExecutionResult}; +use scroll_zkvm_prover::utils::read_json; use scroll_zkvm_types::chunk::ChunkWitness; +use scroll_zkvm_types::public_inputs::chunk::validium::{QueueTransaction, SecretKey}; +use scroll_zkvm_types::public_inputs::ForkName; fn exec_chunk(prover: &Prover, wit: &ChunkWitness) -> eyre::Result<(ExecutionResult, u64)> { let blk = wit.blocks[0].header.number; @@ -66,6 +74,33 @@ fn test_execute() -> eyre::Result<()> { Ok(()) } +#[test] +fn test_validium_execute() -> eyre::Result<()> { + ChunkProverTester::setup()?; + let prover = ChunkProverTester::load_prover(false)?; + + let base_dir = Path::new(PATH_TESTDATA).join("validium"); + + let secret_key = hex::decode(env::var("VALIDIUM_KEY")?)?; + let secret_key = SecretKey::try_from_bytes(&secret_key)?; + + for blk in [1019, 1256, 1276] { + let block_witness = read_block_witness(base_dir.join(format!("{blk}.json")))?; + let validium_txs: Vec = read_json(base_dir.join(format!("{blk}_validium_txs.json")))?; + + let witness = ChunkWitness::new_validium( + &[block_witness], + B256::ZERO, + ForkName::EuclidV2, + vec![validium_txs], + secret_key.clone(), + ); + + exec_chunk(&prover, &witness)?; + } + Ok(()) +} + #[ignore = "can only run under eculidv2 hardfork"] #[test] fn test_autofill_trie_nodes() -> eyre::Result<()> { diff --git a/crates/types/chunk/src/witness.rs b/crates/types/chunk/src/witness.rs index 3dcdcafd..4b638261 100644 --- a/crates/types/chunk/src/witness.rs +++ b/crates/types/chunk/src/witness.rs @@ -78,7 +78,25 @@ pub struct ChunkWitness { /// The mode of state commitment for the chunk. pub state_commit_mode: StateCommitMode, /// Validium encrypted txs and secret key if this is a validium chain. - pub validium: Option<(Vec>, Box<[u8]>)>, + pub validium: Option, +} + +/// The validium inputs for the chunk witness. +#[derive( + Clone, + Debug, + serde::Deserialize, + serde::Serialize, + rkyv::Archive, + rkyv::Deserialize, + rkyv::Serialize, +)] +#[rkyv(derive(Debug))] +pub struct ValidiumInputs { + /// The validium transactions for each block in the chunk. + pub validium_txs: Vec>, + /// The secret key used for decrypting validium transactions. + pub secret_key: Box<[u8]>, } #[derive(Clone, Debug)] @@ -108,7 +126,10 @@ impl ChunkWitness { blocks, prev_msg_queue_hash, fork_name, - Some((validium_txs, secret_key.to_bytes())), + Some(ValidiumInputs { + validium_txs, + secret_key: secret_key.to_bytes(), + }), ) } @@ -116,7 +137,7 @@ impl ChunkWitness { blocks: &[BlockWitness], prev_msg_queue_hash: B256, fork_name: ForkName, - validium: Option<(Vec>, Box<[u8]>)>, + validium: Option, ) -> Self { let num_codes = blocks.iter().map(|w| w.codes.len()).sum(); let num_states = blocks.iter().map(|w| w.states.len()).sum(); @@ -190,14 +211,15 @@ impl ChunkWitness { guest_version: Option, ) -> Result { let guest_version = guest_version.unwrap_or(self.fork_name); - if guest_version >= ForkName::Feynman { - // Use the new rkyv serialization for Feynman and later forks - // TODO: Validium compatibility - rkyv::to_bytes::(self) - } else { - // Use the old rkyv serialization for earlier forks - rkyv::to_bytes::(&self.clone().into_euclid()) - } + // FIXME: Validium compatibility + rkyv::to_bytes::(self) + // if guest_version >= ForkName::Feynman { + // // Use the new rkyv serialization for Feynman and later forks + // rkyv::to_bytes::(self) + // } else { + // // Use the old rkyv serialization for earlier forks + // rkyv::to_bytes::(&self.clone().into_euclid()) + // } } pub fn stats(&self) -> ChunkDetails { @@ -252,11 +274,11 @@ impl ChunkWitnessExt for ArchivedChunkWitness { ), Some(validium) => { let secret_key = - SecretKey::try_from_bytes(validium.1.as_ref()).expect("invalid secret key"); + SecretKey::try_from_bytes(validium.secret_key.as_ref()).expect("invalid secret key"); blocks.rolling_msg_queue_hash( prev_msg_queue_hash, validium - .0 + .validium_txs .iter() .map(|txs| Some((txs.iter().map(|tx| tx.into()), &secret_key))), ) From 16a73f4309c691ab2fd12c3c099f56a4c8cfaa35 Mon Sep 17 00:00:00 2001 From: lightsing Date: Tue, 19 Aug 2025 16:34:14 +0800 Subject: [PATCH 14/84] upgrade --- Cargo.lock | 1439 +++++++++++++++++++++---------------------- rust-toolchain.toml | 2 +- 2 files changed, 717 insertions(+), 724 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4fb7faf4..22fca1ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,9 +24,9 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "ahash" @@ -57,27 +57,27 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-chains" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6967ca1ed656766e471bc323da42fb0db320ca5e1418b408650e98e4757b3d2" +checksum = "4195a29a4b87137b2bb02105e746102873bc03561805cf45c0e510c961f160e6" dependencies = [ "alloy-primitives", "alloy-rlp", "num_enum", "serde", - "strum 0.27.1", + "strum 0.27.2", ] [[package]] name = "alloy-consensus" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73e7f99e3a50210eaee2abd57293a2e72b1a5b7bb251b44c4bf33d02ddd402ab" +checksum = "eda689f7287f15bd3582daba6be8d1545bad3740fd1fb778f629a1fe866bb43b" dependencies = [ - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "alloy-trie", "alloy-tx-macros", "auto_impl", @@ -90,20 +90,20 @@ dependencies = [ "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] name = "alloy-consensus-any" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9945351a277c914f3776ae72b3fc1d22f90d2e840276830e48e9be5bf371a8fe" +checksum = "2b5659581e41e8fe350ecc3593cb5c9dcffddfd550896390f2b78a07af67b0fa" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "serde", ] @@ -117,7 +117,7 @@ dependencies = [ "alloy-rlp", "crc", "serde", - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] @@ -142,7 +142,7 @@ dependencies = [ "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] @@ -167,16 +167,16 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4134375e533d095e045982cd7684a29c37089ab7a605ecf2b4aa17a5e61d72d3" +checksum = "6f35887da30b5fc50267109a3c61cd63e6ca1f45967983641053a40ee83468c1" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "auto_impl", "c-kzg", "derive_more 2.0.1", @@ -187,12 +187,12 @@ dependencies = [ [[package]] name = "alloy-evm" -version = "0.12.3" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff5aae4c6dc600734b206b175f3200085ee82dcdaa388760358830a984ca9869" +checksum = "2211ccd0f05e2fea4f767242957f5e8cfb08b127ea2e6a3c0d9e5b10e6bf67d9" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-hardforks", "alloy-primitives", "alloy-rpc-types-eth", @@ -201,19 +201,19 @@ dependencies = [ "derive_more 2.0.1", "op-alloy-consensus", "op-revm", - "revm 26.0.1", - "thiserror 2.0.12", + "revm 27.1.0", + "thiserror 2.0.15", ] [[package]] name = "alloy-genesis" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61d58e94791b74c2566a2f240f3f796366e2479d4d39b4a3ec848c733fb92ce" +checksum = "11d4009efea6f403b3a80531f9c6f70fc242399498ff71196a1688cc1c901f44" dependencies = [ - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "alloy-trie", "serde", "serde_with", @@ -221,9 +221,9 @@ dependencies = [ [[package]] name = "alloy-hardforks" -version = "0.2.7" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977d2492ce210e34baf7b36afaacea272c96fbe6774c47e23f97d14033c0e94f" +checksum = "3165210652f71dfc094b051602bafd691f506c54050a174b1cba18fb5ef706a3" dependencies = [ "alloy-chains", "alloy-eip2124", @@ -235,9 +235,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b26fdd571915bafe857fccba4ee1a4f352965800e46a53e4a5f50187b7776fa" +checksum = "459f98c6843f208856f338bfb25e65325467f7aff35dfeb0484d0a76e059134b" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -247,21 +247,21 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b21283a28b117505a75ee1f2e63c16ea2ea72afca44f670b1f02795d9f5d988" +checksum = "80d7980333dd9391719756ac28bc2afa9baa705fc70ffd11dc86ab078dd64477" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "serde", ] [[package]] name = "alloy-primitives" -version = "1.2.0" -source = "git+https://github.com/scroll-tech/alloy-core?branch=v1.2.0#48cf7ca879766d96663b6b336f47677e5194896a" +version = "1.3.0" +source = "git+https://github.com/scroll-tech/alloy-core?branch=feat%2Frkyv#65e074f03f4491168e4ec7853d2b1cebb8a35be2" dependencies = [ "alloy-rlp", "bytes", @@ -269,14 +269,14 @@ dependencies = [ "const-hex", "derive_more 2.0.1", "foldhash", - "hashbrown 0.15.4", - "indexmap 2.9.0", + "hashbrown 0.15.5", + "indexmap 2.10.0", "itoa", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "keccak-asm", "paste", "proptest", - "rand 0.9.1", + "rand 0.9.2", "rkyv", "ruint", "rustc-hash 2.1.1", @@ -304,41 +304,42 @@ checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "alloy-rpc-types-engine" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14796fd8574c77213802b0dc0e85886b5cb27c44e72678ab7d0a4a2d5aee79e9" +checksum = "e24c171377c0684e3860385f6d93fbfcc8ecc74f6cce8304c822bf1a50bacce0" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", "derive_more 2.0.1", - "strum 0.27.1", + "strum 0.27.2", ] [[package]] name = "alloy-rpc-types-eth" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bea7326ca6cd6971c58042055a039d5c97a1431e30380d8b4883ad98067c1b5" +checksum = "b777b98526bbe5b7892ca22a7fd5f18ed624ff664a79f40d0f9f2bf94ba79a84" dependencies = [ "alloy-consensus", "alloy-consensus-any", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-network-primitives", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "alloy-sol-types", "itertools 0.14.0", "serde", "serde_json", - "thiserror 2.0.12", + "serde_with", + "thiserror 2.0.15", ] [[package]] @@ -354,9 +355,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c02a06ae34d2354398dc9d2de0503129c3f0904a3eb791b5d0149f267c2688" +checksum = "ee8d2c52adebf3e6494976c8542fbdf12f10123b26e11ad56f77274c16a2a039" dependencies = [ "alloy-primitives", "serde", @@ -365,41 +366,41 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4be1ce1274ddd7fdfac86e5ece1b225e9bba1f2327e20fbb30ee6b9cc1423fe" +checksum = "d20d867dcf42019d4779519a1ceb55eba8d7f3d0e4f0a89bcba82b8f9eb01e48" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "alloy-sol-macro-expander" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e92f3708ea4e0d9139001c86c051c538af0146944a2a9c7181753bd944bf57" +checksum = "b74e91b0b553c115d14bd0ed41898309356dc85d0e3d4b9014c4e7715e48c8ad" dependencies = [ "alloy-sol-macro-input", "const-hex", "heck 0.5.0", - "indexmap 2.9.0", + "indexmap 2.10.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afe1bd348a41f8c9b4b54dfb314886786d6201235b0b3f47198b9d910c86bb2" +checksum = "84194d31220803f5f62d0a00f583fd3a062b36382e2bea446f1af96727754565" dependencies = [ "const-hex", "dunce", @@ -407,15 +408,15 @@ dependencies = [ "macro-string", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "1.2.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10db1bd7baa35bc8d4a1b07efbf734e73e5ba09f2580fb8cee3483a36087ceb2" +checksum = "fe8c27b3cf6b2bb8361904732f955bc7c05e00be5f469cec7e2280b6167f3ff0" dependencies = [ "serde", "winnow", @@ -423,9 +424,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6185e98a79cf19010722f48a74b5a65d153631d2f038cabd250f4b9e9813b8ad" +checksum = "a285b46e3e0c177887028278f04cc8262b76fd3b8e0e20e93cea0a58c35f5ac5" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -451,15 +452,15 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afd621a9ddef2fdc06d17089f45e47cf84d0b46ca5a1bc6c83807c9119636f52" +checksum = "6acb36318dfa50817154064fea7932adf2eec3f51c86680e2b37d7e8906c66bb" dependencies = [ "alloy-primitives", - "darling", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -488,9 +489,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -518,29 +519,29 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "ark-bls12-381" @@ -579,7 +580,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "itertools 0.13.0", "num-bigint 0.4.6", "num-integer", @@ -672,7 +673,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -710,7 +711,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -725,7 +726,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -799,7 +800,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -850,13 +851,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -877,14 +878,14 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "az" @@ -905,7 +906,7 @@ dependencies = [ "object", "rustc-demangle", "serde", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -952,9 +953,9 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitcode" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf300f4aa6e66f3bdff11f1236a88c622fe47ea814524792240b4d554d9858ee" +checksum = "648bd963d2e5d465377acecfb4b827f9f553b6bc97a8f61715779e9ed9e52b74" dependencies = [ "arrayvec", "bitcode_derive", @@ -965,13 +966,13 @@ dependencies = [ [[package]] name = "bitcode_derive" -version = "0.6.5" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42b6b4cb608b8282dc3b53d0f4c9ab404655d562674c682db7e6c0458cc83c23" +checksum = "ffebfc2d28a12b262c303cb3860ee77b91bd83b1f20f0bd2a9693008e2f55a9e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -992,9 +993,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" dependencies = [ "serde", ] @@ -1096,9 +1097,9 @@ dependencies = [ [[package]] name = "bon" -version = "3.6.3" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced38439e7a86a4761f7f7d5ded5ff009135939ecb464a24452eaa4c1696af7d" +checksum = "67a0c21249ad725ebcadcb1b1885f8e3d56e8e6b8924f560268aab000982d637" dependencies = [ "bon-macros", "rustversion", @@ -1106,24 +1107,24 @@ dependencies = [ [[package]] name = "bon-macros" -version = "3.6.3" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce61d2d3844c6b8d31b2353d9f66cf5e632b3e9549583fe3cac2f4f6136725e" +checksum = "a660ebdea4d4d3ec7788cfc9c035b66efb66028b9b97bf6cde7023ccc8e77e28" dependencies = [ - "darling", + "darling 0.21.2", "ident_case", "prettyplease", "proc-macro2", "quote", "rustversion", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "bumpalo" -version = "3.18.1" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "byte-slice-cast" @@ -1151,14 +1152,14 @@ checksum = "efb7846e0cb180355c2dec69e721edafa36919850f1a9f52ffba4ebc0393cb71" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "bytemuck" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" [[package]] name = "byteorder" @@ -1192,9 +1193,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0" dependencies = [ "serde", ] @@ -1258,7 +1259,7 @@ dependencies = [ "semver 1.0.26", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] @@ -1273,14 +1274,14 @@ dependencies = [ "semver 1.0.26", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] name = "cc" -version = "1.2.26" +version = "1.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956a5e21988b87f372569b66183b78babf23ebc2e744b733e4350a752c4dafac" +checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f" dependencies = [ "jobserver", "libc", @@ -1289,9 +1290,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "chrono" @@ -1310,9 +1311,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.39" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" +checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" dependencies = [ "clap_builder", "clap_derive", @@ -1320,9 +1321,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.39" +version = "4.5.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" +checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" dependencies = [ "anstream", "anstyle", @@ -1332,21 +1333,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.32" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "colorchoice" @@ -1361,14 +1362,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] name = "const-hex" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" +checksum = "dccd746bf9b1038c0507b7cec21eb2b11222db96a2902c96e8c185d6d20fb9c4" dependencies = [ "cfg-if", "cpufeatures", @@ -1518,9 +1519,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" @@ -1550,8 +1551,18 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08440b3dd222c3d0433e63e097463969485f112baff337dfdaca043a0d760570" +dependencies = [ + "darling_core 0.21.2", + "darling_macro 0.21.2", ] [[package]] @@ -1565,7 +1576,21 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.101", + "syn 2.0.106", +] + +[[package]] +name = "darling_core" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25b7912bc28a04ab1b7715a68ea03aaa15662b43a1a4b2c480531fd19f8bf7e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.106", ] [[package]] @@ -1574,9 +1599,20 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core", + "darling_core 0.20.11", "quote", - "syn 2.0.101", + "syn 2.0.106", +] + +[[package]] +name = "darling_macro" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce154b9bea7fb0c8e8326e62d00354000c36e79770ff21b8c84e3aa267d9d531" +dependencies = [ + "darling_core 0.21.2", + "quote", + "syn 2.0.106", ] [[package]] @@ -1618,7 +1654,7 @@ checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1629,18 +1665,18 @@ checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "derive-where" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510c292c8cf384b1a340b816a9a6cf2599eb8f566a44949024af88418000c50b" +checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1653,7 +1689,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1682,7 +1718,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "unicode-xid", ] @@ -1695,7 +1731,7 @@ dependencies = [ "convert_case 0.7.1", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "unicode-xid", ] @@ -1728,7 +1764,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1751,9 +1787,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" @@ -1779,7 +1815,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1818,9 +1854,17 @@ dependencies = [ ] [[package]] -name = "encoder" +name = "encoder-standard" +version = "0.1.0" +source = "git+https://github.com/scroll-tech/da-codec.git?rev=2cfec8c#2cfec8c99547b68dc64e2b020fa2b83cfb9c0e99" +dependencies = [ + "zstd", +] + +[[package]] +name = "encoder-standard" version = "0.1.0" -source = "git+https://github.com/scroll-tech/da-codec.git?rev=ad2db39#ad2db39b5e1ef4532f98ad0de0cc4c4f5f059308" +source = "git+https://github.com/scroll-tech/da-codec#2cfec8c99547b68dc64e2b020fa2b83cfb9c0e99" dependencies = [ "zstd", ] @@ -1848,7 +1892,7 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1860,7 +1904,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1871,7 +1915,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1892,12 +1936,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.60.2", ] [[package]] @@ -2088,7 +2132,7 @@ checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", ] [[package]] @@ -2105,14 +2149,14 @@ dependencies = [ [[package]] name = "getset" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3586f256131df87204eb733da72e3d3eb4f343c639f4b7be279ac7c48baeafe" +checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -2138,20 +2182,20 @@ checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "glam" -version = "0.30.3" +version = "0.30.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b46b9ca4690308844c644e7c634d68792467260e051c8543e0c7871662b3ba7" +checksum = "f2d1aab06663bdce00d6ca5e5ed586ec8d18033a771906c993a1e3755b368d85" [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "gmp-mpfr-sys" @@ -2160,7 +2204,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66d61197a68f6323b9afa616cf83d55d69191e1bf364d4eb7d35ae18defe776" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -2197,9 +2241,9 @@ dependencies = [ [[package]] name = "halo2-axiom" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f0ca78d12ac5c893f286d7cdfe3869290305ab8cac376e2592cdc8396da102" +checksum = "0aee3f8178b78275038e5ea0e2577140056d2c4c87fccaf6777dc0a8eebe455a" dependencies = [ "blake2b_simd", "crossbeam", @@ -2387,9 +2431,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", @@ -2412,9 +2456,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -2603,14 +2647,14 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "indenter" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" +checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" [[package]] name = "indexmap" @@ -2625,12 +2669,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "serde", ] @@ -2802,9 +2846,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.172" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libm" @@ -2888,7 +2932,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -2899,7 +2943,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -2923,9 +2967,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memuse" @@ -2949,7 +2993,7 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62a6a1f7141f1d9bc7a886b87536bbfc97752e08b369e1e0453a9acfab5f5da4" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa", "lockfree-object-pool", "metrics", @@ -2970,7 +3014,7 @@ dependencies = [ "crossbeam-epoch", "crossbeam-utils", "hashbrown 0.14.5", - "indexmap 2.9.0", + "indexmap 2.10.0", "metrics", "num_cpus", "ordered-float 4.6.0", @@ -2981,9 +3025,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] @@ -3026,7 +3070,7 @@ checksum = "1bb5c1d8184f13f7d0ccbeeca0def2f9a181bce2624302793005f5ca8aa62e5e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3180,23 +3224,24 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" dependencies = [ "num_enum_derive", + "rustversion", ] [[package]] name = "num_enum_derive" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3213,9 +3258,9 @@ dependencies = [ [[package]] name = "nybbles" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "675b3a54e5b12af997abc8b6638b0aee51a28caedab70d4967e0d5db3a3f1d06" +checksum = "63cb50036b1ad148038105af40aaa70ff24d8a14fbc44ae5c914e1348533d12e" dependencies = [ "alloy-rlp", "cfg-if", @@ -3252,30 +3297,30 @@ checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "op-alloy-consensus" -version = "0.18.9" +version = "0.18.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8719d9b783b29cfa1cf8d591b894805786b9ab4940adc700a57fd0d5b721cf5" +checksum = "0c88d2940558fd69f8f07b3cbd7bb3c02fc7d31159c1a7ba9deede50e7881024" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "derive_more 2.0.1", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] name = "op-revm" -version = "7.0.1" +version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b97d2b54651fcd2955b454e86b2336c031e17925a127f4c44e2b63b2eeda923" +checksum = "5ce1dc7533f4e5716c55cd3d62488c6200cb4dfda96e0c75a7e484652464343b" dependencies = [ "auto_impl", "once_cell", - "revm 26.0.1", + "revm 27.1.0", "serde", ] @@ -3349,7 +3394,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092 dependencies = [ "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3359,7 +3404,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3403,7 +3448,7 @@ dependencies = [ "num-prime", "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3415,7 +3460,7 @@ dependencies = [ "num-prime", "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3537,7 +3582,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "itertools 0.14.0", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3562,7 +3607,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "itertools 0.14.0", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3587,7 +3632,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092 dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3597,7 +3642,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3673,7 +3718,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092 dependencies = [ "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3683,7 +3728,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3723,7 +3768,7 @@ version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3787,7 +3832,7 @@ name = "openvm-macros-common" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" dependencies = [ - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3795,7 +3840,7 @@ name = "openvm-macros-common" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3874,7 +3919,7 @@ version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -4896,7 +4941,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -4943,12 +4988,12 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" +checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" dependencies = [ "memchr", - "thiserror 2.0.12", + "thiserror 2.0.15", "ucd-trie", ] @@ -4983,7 +5028,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -5070,12 +5115,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.33" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -5126,14 +5171,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -5149,7 +5194,7 @@ dependencies = [ "bitflags", "lazy_static", "num-traits", - "rand 0.9.1", + "rand 0.9.2", "rand_chacha 0.9.0", "rand_xorshift 0.4.0", "regex-syntax 0.8.5", @@ -5184,20 +5229,20 @@ checksum = "ca414edb151b4c8d125c12566ab0d74dc9cdba36fb80eb7b848c15f495fd32d1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "quanta" -version = "0.12.5" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" +checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" dependencies = [ "crossbeam-utils", "libc", "once_cell", "raw-cpuid", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "web-sys", "winapi", ] @@ -5219,9 +5264,9 @@ dependencies = [ [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "radium" @@ -5262,9 +5307,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -5339,9 +5384,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -5349,14 +5394,34 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] +[[package]] +name = "ref-cast" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "regex" version = "1.11.1" @@ -5412,12 +5477,12 @@ dependencies = [ [[package]] name = "reth-chainspec" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-chains", "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-genesis", "alloy-primitives", @@ -5432,11 +5497,11 @@ dependencies = [ [[package]] name = "reth-codecs" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-genesis", "alloy-primitives", "alloy-trie", @@ -5450,29 +5515,29 @@ dependencies = [ [[package]] name = "reth-codecs-derive" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "convert_case 0.7.1", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "reth-db-models" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "reth-primitives-traits", ] [[package]] name = "reth-ethereum-forks" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-eip2124", "alloy-hardforks", @@ -5483,11 +5548,11 @@ dependencies = [ [[package]] name = "reth-ethereum-primitives" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", "reth-codecs", @@ -5498,11 +5563,11 @@ dependencies = [ [[package]] name = "reth-evm" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", "auto_impl", @@ -5514,73 +5579,75 @@ dependencies = [ "reth-storage-api", "reth-storage-errors", "reth-trie-common", - "revm 26.0.1", + "revm 27.1.0", "scroll-alloy-evm", ] [[package]] name = "reth-evm-ethereum" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", + "alloy-rpc-types-engine", "reth-chainspec", "reth-ethereum-forks", "reth-ethereum-primitives", "reth-evm", "reth-execution-types", "reth-primitives-traits", - "revm 26.0.1", + "reth-storage-errors", + "revm 27.1.0", ] [[package]] name = "reth-execution-errors" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-evm", "alloy-primitives", "alloy-rlp", "nybbles", "reth-storage-errors", - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] name = "reth-execution-types" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", "derive_more 2.0.1", "reth-ethereum-primitives", "reth-primitives-traits", "reth-trie-common", - "revm 26.0.1", + "revm 27.1.0", ] [[package]] name = "reth-network-peers" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-primitives", "alloy-rlp", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.15", "url", ] [[package]] name = "reth-primitives" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "once_cell", @@ -5592,11 +5659,11 @@ dependencies = [ [[package]] name = "reth-primitives-traits" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-genesis", "alloy-primitives", "alloy-rlp", @@ -5608,37 +5675,37 @@ dependencies = [ "once_cell", "op-alloy-consensus", "reth-codecs", - "revm-bytecode 5.0.0", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "revm-bytecode 6.1.0", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "scroll-alloy-consensus", "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] name = "reth-prune-types" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-primitives", "derive_more 2.0.1", - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] name = "reth-scroll-chainspec" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-chains", "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-genesis", "alloy-primitives", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "auto_impl", "derive_more 2.0.1", "once_cell", @@ -5655,13 +5722,14 @@ dependencies = [ [[package]] name = "reth-scroll-evm" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", + "alloy-rpc-types-engine", "derive_more 2.0.1", "reth-chainspec", "reth-evm", @@ -5672,20 +5740,20 @@ dependencies = [ "reth-scroll-forks", "reth-scroll-primitives", "reth-storage-api", - "revm 26.0.1", - "revm-primitives 20.0.0", + "revm 27.1.0", + "revm-primitives 20.1.0", "revm-scroll", "scroll-alloy-consensus", "scroll-alloy-evm", "scroll-alloy-hardforks", - "thiserror 2.0.12", + "thiserror 2.0.15", "tracing", ] [[package]] name = "reth-scroll-forks" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-chains", "alloy-primitives", @@ -5698,11 +5766,11 @@ dependencies = [ [[package]] name = "reth-scroll-primitives" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", "bytes", @@ -5715,8 +5783,8 @@ dependencies = [ [[package]] name = "reth-stages-types" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-primitives", "reth-trie-common", @@ -5724,22 +5792,22 @@ dependencies = [ [[package]] name = "reth-static-file-types" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-primitives", "derive_more 2.0.1", "serde", - "strum 0.27.1", + "strum 0.27.2", ] [[package]] name = "reth-storage-api" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rpc-types-engine", "auto_impl", @@ -5752,32 +5820,32 @@ dependencies = [ "reth-stages-types", "reth-storage-errors", "reth-trie-common", - "revm-database 6.0.0", + "revm-database 7.0.2", ] [[package]] name = "reth-storage-errors" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", "derive_more 2.0.1", "reth-primitives-traits", "reth-prune-types", "reth-static-file-types", - "revm-database-interface 6.0.0", - "thiserror 2.0.12", + "revm-database-interface 7.0.2", + "thiserror 2.0.15", ] [[package]] name = "reth-trie" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", "alloy-trie", @@ -5789,14 +5857,14 @@ dependencies = [ "reth-storage-errors", "reth-trie-common", "reth-trie-sparse", - "revm-database 6.0.0", + "revm-database 7.0.2", "tracing", ] [[package]] name = "reth-trie-common" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -5806,13 +5874,13 @@ dependencies = [ "itertools 0.14.0", "nybbles", "reth-primitives-traits", - "revm-database 6.0.0", + "revm-database 7.0.2", ] [[package]] name = "reth-trie-sparse" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -5827,8 +5895,8 @@ dependencies = [ [[package]] name = "reth-zstd-compressors" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "zstd", ] @@ -5854,39 +5922,20 @@ dependencies = [ [[package]] name = "revm" -version = "24.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d3ae9d1b08303eb5150dcf820a29e14235cf3f24f6c09024458a4dcbffe6695" +version = "27.1.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ - "revm-bytecode 4.1.0", - "revm-context 5.0.1", - "revm-context-interface 5.0.0", - "revm-database 4.0.1", - "revm-database-interface 4.0.1", - "revm-handler 5.0.1", - "revm-inspector 5.0.1", - "revm-interpreter 20.0.0", - "revm-precompile 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "revm-primitives 19.2.0", - "revm-state 4.0.1", -] - -[[package]] -name = "revm" -version = "26.0.1" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" -dependencies = [ - "revm-bytecode 5.0.0", - "revm-context 7.0.1", - "revm-context-interface 7.0.1", - "revm-database 6.0.0", - "revm-database-interface 6.0.0", - "revm-handler 7.0.1", - "revm-inspector 7.0.1", - "revm-interpreter 22.0.1", - "revm-precompile 23.0.0", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "revm-bytecode 6.1.0", + "revm-context 8.0.4", + "revm-context-interface 9.0.0", + "revm-database 7.0.2", + "revm-database-interface 7.0.2", + "revm-handler 8.1.0", + "revm-inspector 8.1.0", + "revm-interpreter 24.0.0", + "revm-precompile 25.0.0", + "revm-primitives 20.1.0", + "revm-state 7.0.2", ] [[package]] @@ -5903,26 +5952,13 @@ dependencies = [ [[package]] name = "revm-bytecode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942fe4724cf552fd28db6b0a2ca5b79e884d40dd8288a4027ed1e9090e0c6f49" +version = "6.1.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "bitvec", "once_cell", "phf", - "revm-primitives 19.2.0", - "serde", -] - -[[package]] -name = "revm-bytecode" -version = "5.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" -dependencies = [ - "bitvec", - "once_cell", - "phf", - "revm-primitives 20.0.0", + "revm-primitives 20.1.0", "serde", ] @@ -5944,32 +5980,16 @@ dependencies = [ [[package]] name = "revm-context" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b01aad49e1233f94cebda48a4e5cef022f7c7ed29b4edf0d202b081af23435ef" -dependencies = [ - "cfg-if", - "derive-where", - "revm-bytecode 4.1.0", - "revm-context-interface 5.0.0", - "revm-database-interface 4.0.1", - "revm-primitives 19.2.0", - "revm-state 4.0.1", - "serde", -] - -[[package]] -name = "revm-context" -version = "7.0.1" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "8.0.4" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "cfg-if", "derive-where", - "revm-bytecode 5.0.0", - "revm-context-interface 7.0.1", - "revm-database-interface 6.0.0", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "revm-bytecode 6.1.0", + "revm-context-interface 9.0.0", + "revm-database-interface 7.0.2", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "serde", ] @@ -5990,32 +6010,16 @@ dependencies = [ [[package]] name = "revm-context-interface" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b844f48a411e62c7dde0f757bf5cce49c85b86d6fc1d3b2722c07f2bec4c3ce" +version = "9.0.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "alloy-eip2930", "alloy-eip7702", "auto_impl", "either", - "revm-database-interface 4.0.1", - "revm-primitives 19.2.0", - "revm-state 4.0.1", - "serde", -] - -[[package]] -name = "revm-context-interface" -version = "7.0.1" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" -dependencies = [ - "alloy-eip2930", - "alloy-eip7702", - "auto_impl", - "either", - "revm-database-interface 6.0.0", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "revm-database-interface 7.0.2", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "serde", ] @@ -6035,28 +6039,14 @@ dependencies = [ [[package]] name = "revm-database" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad3fbe34f6bb00a9c3155723b3718b9cb9f17066ba38f9eb101b678cd3626775" +version = "7.0.2" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ - "alloy-eips 1.0.20", - "revm-bytecode 4.1.0", - "revm-database-interface 4.0.1", - "revm-primitives 19.2.0", - "revm-state 4.0.1", - "serde", -] - -[[package]] -name = "revm-database" -version = "6.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" -dependencies = [ - "alloy-eips 1.0.20", - "revm-bytecode 5.0.0", - "revm-database-interface 6.0.0", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "alloy-eips 1.0.24", + "revm-bytecode 6.1.0", + "revm-database-interface 7.0.2", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "serde", ] @@ -6074,24 +6064,13 @@ dependencies = [ [[package]] name = "revm-database-interface" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b8acd36784a6d95d5b9e1b7be3ce014f1e759abb59df1fa08396b30f71adc2a" +version = "7.0.2" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "auto_impl", - "revm-primitives 19.2.0", - "revm-state 4.0.1", - "serde", -] - -[[package]] -name = "revm-database-interface" -version = "6.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" -dependencies = [ - "auto_impl", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "either", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "serde", ] @@ -6115,37 +6094,19 @@ dependencies = [ [[package]] name = "revm-handler" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "481e8c3290ff4fa1c066592fdfeb2b172edfd14d12e6cade6f6f5588cad9359a" -dependencies = [ - "auto_impl", - "revm-bytecode 4.1.0", - "revm-context 5.0.1", - "revm-context-interface 5.0.0", - "revm-database-interface 4.0.1", - "revm-interpreter 20.0.0", - "revm-precompile 21.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "revm-primitives 19.2.0", - "revm-state 4.0.1", - "serde", -] - -[[package]] -name = "revm-handler" -version = "7.0.1" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "8.1.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "auto_impl", "derive-where", - "revm-bytecode 5.0.0", - "revm-context 7.0.1", - "revm-context-interface 7.0.1", - "revm-database-interface 6.0.0", - "revm-interpreter 22.0.1", - "revm-precompile 23.0.0", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "revm-bytecode 6.1.0", + "revm-context 8.0.4", + "revm-context-interface 9.0.0", + "revm-database-interface 7.0.2", + "revm-interpreter 24.0.0", + "revm-precompile 25.0.0", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "serde", ] @@ -6168,34 +6129,17 @@ dependencies = [ [[package]] name = "revm-inspector" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc1167ef8937d8867888e63581d8ece729a72073d322119ef4627d813d99ecb" -dependencies = [ - "auto_impl", - "revm-context 5.0.1", - "revm-database-interface 4.0.1", - "revm-handler 5.0.1", - "revm-interpreter 20.0.0", - "revm-primitives 19.2.0", - "revm-state 4.0.1", - "serde", - "serde_json", -] - -[[package]] -name = "revm-inspector" -version = "7.0.1" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "8.1.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "auto_impl", "either", - "revm-context 7.0.1", - "revm-database-interface 6.0.0", - "revm-handler 7.0.1", - "revm-interpreter 22.0.1", - "revm-primitives 20.0.0", - "revm-state 6.0.0", + "revm-context 8.0.4", + "revm-database-interface 7.0.2", + "revm-handler 8.1.0", + "revm-interpreter 24.0.0", + "revm-primitives 20.1.0", + "revm-state 7.0.2", "serde", "serde_json", ] @@ -6214,24 +6158,12 @@ dependencies = [ [[package]] name = "revm-interpreter" -version = "20.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5ee65e57375c6639b0f50555e92a4f1b2434349dd32f52e2176f5c711171697" -dependencies = [ - "revm-bytecode 4.1.0", - "revm-context-interface 5.0.0", - "revm-primitives 19.2.0", - "serde", -] - -[[package]] -name = "revm-interpreter" -version = "22.0.1" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "24.0.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ - "revm-bytecode 5.0.0", - "revm-context-interface 7.0.1", - "revm-primitives 20.0.0", + "revm-bytecode 6.1.0", + "revm-context-interface 9.0.0", + "revm-primitives 20.1.0", "serde", ] @@ -6260,31 +6192,6 @@ dependencies = [ "sha2 0.10.9", ] -[[package]] -name = "revm-precompile" -version = "21.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9311e735123d8d53a02af2aa81877bba185be7c141be7f931bb3d2f3af449c" -dependencies = [ - "ark-bls12-381", - "ark-bn254", - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "aurora-engine-modexp", - "blst", - "c-kzg", - "cfg-if", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libsecp256k1", - "once_cell", - "p256 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", - "revm-primitives 19.2.0", - "ripemd", - "secp256k1 0.30.0", - "sha2 0.10.9", -] - [[package]] name = "revm-precompile" version = "21.0.0" @@ -6308,22 +6215,24 @@ dependencies = [ [[package]] name = "revm-precompile" -version = "23.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "25.0.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "ark-bls12-381", "ark-bn254", "ark-ec", "ark-ff 0.5.0", "ark-serialize 0.5.0", + "arrayref", "aurora-engine-modexp", + "blst", "c-kzg", "cfg-if", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "libsecp256k1", "once_cell", "p256 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", - "revm-primitives 20.0.0", + "revm-primitives 20.1.0", "ripemd", "rug", "secp256k1 0.31.1", @@ -6352,19 +6261,8 @@ dependencies = [ [[package]] name = "revm-primitives" -version = "19.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c1588093530ec4442461163be49c433c07a3235d1ca6f6799fef338dacc50d3" -dependencies = [ - "alloy-primitives", - "num_enum", - "serde", -] - -[[package]] -name = "revm-primitives" -version = "20.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" +version = "20.1.0" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "alloy-primitives", "num_enum", @@ -6374,14 +6272,14 @@ dependencies = [ [[package]] name = "revm-scroll" version = "0.1.0" -source = "git+https://github.com/scroll-tech/scroll-revm?branch=main#6a1e33df5b9e5ad6585a8469faaba9e6ea5e3f3d" +source = "git+https://github.com/scroll-tech/scroll-revm#720ee7802e5ad695ac1f8699bbab9c9f2424417f" dependencies = [ "auto_impl", "enumn", "once_cell", - "revm 26.0.1", - "revm-inspector 7.0.1", - "revm-primitives 20.0.0", + "revm 27.1.0", + "revm-inspector 8.1.0", + "revm-primitives 20.1.0", "serde", ] @@ -6399,24 +6297,12 @@ dependencies = [ [[package]] name = "revm-state" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0040c61c30319254b34507383ba33d85f92949933adf6525a2cede05d165e1fa" +version = "7.0.2" +source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ "bitflags", - "revm-bytecode 4.1.0", - "revm-primitives 19.2.0", - "serde", -] - -[[package]] -name = "revm-state" -version = "6.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v78#c143b332683b41849632cc482bddbcb1be0d8d6f" -dependencies = [ - "bitflags", - "revm-bytecode 5.0.0", - "revm-primitives 20.0.0", + "revm-bytecode 6.1.0", + "revm-primitives 20.1.0", "serde", ] @@ -6441,14 +6327,14 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e147371c75553e1e2fcdb483944a8540b8438c31426279553b9a8182a9b7b65" +checksum = "19f5c3e5da784cd8c69d32cdc84673f3204536ca56e1fa01be31a74b92c932ac" dependencies = [ "bytecheck", "bytes", - "hashbrown 0.15.4", - "indexmap 2.9.0", + "hashbrown 0.15.5", + "indexmap 2.10.0", "munge", "ptr_meta", "rancor", @@ -6460,13 +6346,13 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246b40ac189af6c675d124b802e8ef6d5246c53e17367ce9501f8f66a81abb7a" +checksum = "4270433626cffc9c4c1d3707dd681f2a2718d3d7b09ad754bec137acecda8d22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -6503,8 +6389,9 @@ dependencies = [ [[package]] name = "ruint" -version = "1.15.0" -source = "git+https://github.com/scroll-tech/uint.git?branch=v1.15.0#e80953859952d6ad3cfd96d0a659499c38b96794" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecb38f82477f20c5c3d62ef52d7c4e536e38ea9b73fb570a20c5cae0e14bcf6" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -6519,7 +6406,7 @@ dependencies = [ "primitive-types", "proptest", "rand 0.8.5", - "rand 0.9.1", + "rand 0.9.2", "rkyv", "rlp", "ruint-macro", @@ -6531,13 +6418,14 @@ dependencies = [ [[package]] name = "ruint-macro" version = "1.2.1" -source = "git+https://github.com/scroll-tech/uint.git?branch=v1.15.0#e80953859952d6ad3cfd96d0a659499c38b96794" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -6577,22 +6465,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.60.2", ] [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-fork" @@ -6615,20 +6503,24 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "sbv-core" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Fopenvm-1.3#a4d0e2302ffd3ecbeef29e16ddeb361084358f7b" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#24ccbe28337aa325cf5c299223e64c419ad63441" dependencies = [ + "cfg-if", + "itertools 0.14.0", + "rkyv", "sbv-helpers", "sbv-kv", "sbv-precompile", "sbv-primitives", "sbv-trie", - "thiserror 1.0.69", + "serde", + "thiserror 2.0.15", ] [[package]] name = "sbv-helpers" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Fopenvm-1.3#a4d0e2302ffd3ecbeef29e16ddeb361084358f7b" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#24ccbe28337aa325cf5c299223e64c419ad63441" dependencies = [ "tracing", ] @@ -6636,17 +6528,17 @@ dependencies = [ [[package]] name = "sbv-kv" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Fopenvm-1.3#a4d0e2302ffd3ecbeef29e16ddeb361084358f7b" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#24ccbe28337aa325cf5c299223e64c419ad63441" dependencies = [ "auto_impl", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "rustc-hash 2.1.1", ] [[package]] name = "sbv-precompile" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Fopenvm-1.3#a4d0e2302ffd3ecbeef29e16ddeb361084358f7b" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#24ccbe28337aa325cf5c299223e64c419ad63441" dependencies = [ "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-pairing", @@ -6657,13 +6549,13 @@ dependencies = [ [[package]] name = "sbv-primitives" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Fopenvm-1.3#a4d0e2302ffd3ecbeef29e16ddeb361084358f7b" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#24ccbe28337aa325cf5c299223e64c419ad63441" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "auto_impl", "itertools 0.14.0", "reth-chainspec", @@ -6677,7 +6569,7 @@ dependencies = [ "reth-scroll-evm", "reth-scroll-forks", "reth-scroll-primitives", - "revm 26.0.1", + "revm 27.1.0", "revm-scroll", "rkyv", "sbv-helpers", @@ -6691,7 +6583,7 @@ dependencies = [ [[package]] name = "sbv-trie" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Fopenvm-1.3#a4d0e2302ffd3ecbeef29e16ddeb361084358f7b" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#24ccbe28337aa325cf5c299223e64c419ad63441" dependencies = [ "alloy-rlp", "alloy-trie", @@ -6700,19 +6592,43 @@ dependencies = [ "sbv-helpers", "sbv-kv", "sbv-primitives", - "thiserror 1.0.69", + "thiserror 2.0.15", +] + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", ] [[package]] name = "scroll-alloy-consensus" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "derive_more 2.0.1", "reth-codecs", "serde", @@ -6721,26 +6637,26 @@ dependencies = [ [[package]] name = "scroll-alloy-evm" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.20", + "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", "auto_impl", - "revm 26.0.1", + "encoder-standard 0.1.0 (git+https://github.com/scroll-tech/da-codec)", + "revm 27.1.0", "revm-scroll", "scroll-alloy-consensus", "scroll-alloy-hardforks", "serde", - "zstd", ] [[package]] name = "scroll-alloy-hardforks" -version = "1.5.0" -source = "git+https://github.com/scroll-tech/reth?rev=090d7950d169abbfb896875a7b1ff3f8ca356ac8#090d7950d169abbfb896875a7b1ff3f8ca356ac8" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-hardforks", "auto_impl", @@ -6864,7 +6780,7 @@ dependencies = [ "openvm-transpiler", "rayon", "regex", - "revm 24.0.0", + "revm 27.1.0", "rkyv", "sbv-primitives", "scroll-zkvm-prover", @@ -6901,7 +6817,7 @@ dependencies = [ "openvm-native-recursion", "openvm-sdk", "openvm-stark-sdk", - "revm 24.0.0", + "revm 27.1.0", "rkyv", "sbv-primitives", "scroll-zkvm-types", @@ -6912,7 +6828,7 @@ dependencies = [ "serde_json", "serde_stacker", "snark-verifier-sdk", - "thiserror 2.0.12", + "thiserror 2.0.15", "toml", "tracing", ] @@ -6943,13 +6859,14 @@ name = "scroll-zkvm-types-base" version = "0.5.0" dependencies = [ "alloy-primitives", - "alloy-serde 1.0.20", + "alloy-serde 1.0.24", "itertools 0.14.0", "rkyv", "sbv-primitives", "serde", "sha2 0.10.9", "sha3", + "tiny-keccak", ] [[package]] @@ -6993,14 +6910,16 @@ dependencies = [ "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "revm-precompile 21.0.0 (git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v74)", + "revm-precompile 21.0.0", "rkyv", "sbv-core", + "sbv-helpers", "sbv-kv", "sbv-primitives", "sbv-trie", "scroll-zkvm-types-base", "serde", + "tiny-keccak", ] [[package]] @@ -7033,7 +6952,7 @@ dependencies = [ "openvm-native-recursion", "openvm-sdk", "openvm-stark-sdk", - "revm 24.0.0", + "revm 27.1.0", "scroll-zkvm-prover", "scroll-zkvm-types", "serde", @@ -7076,7 +6995,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c3c81b43dc2d8877c216a3fccf76677ee1ebccd429566d3e67447290d0c42b2" dependencies = [ "bitcoin_hashes", - "rand 0.9.1", + "rand 0.9.2", "secp256k1-sys 0.11.0", ] @@ -7145,9 +7064,9 @@ dependencies = [ [[package]] name = "serde-untagged" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e" +checksum = "34836a629bcbc6f1afdf0907a744870039b1e14c0561cb26094fa683b158eff3" dependencies = [ "erased-serde", "serde", @@ -7190,16 +7109,16 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa", "memchr", "ryu", @@ -7227,15 +7146,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.9.0", + "indexmap 2.10.0", + "schemars 0.9.0", + "schemars 1.0.4", "serde", "serde_derive", "serde_json", @@ -7245,14 +7166,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" dependencies = [ - "darling", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -7409,9 +7330,9 @@ dependencies = [ [[package]] name = "sp1-lib" -version = "5.0.0" +version = "5.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03046db52868c1b60e8acffa0777ef6dc11ec1bbbb10b9eb612a871f69c8d3f6" +checksum = "0e1fe81b6f87134f9170cb642f948ae41e0ee1cd3785e0cb665add5b67106d1a" dependencies = [ "bincode", "serde", @@ -7420,9 +7341,9 @@ dependencies = [ [[package]] name = "sp1-primitives" -version = "5.0.0" +version = "5.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6939d6b2f63e54e5fbd208a0293027608f22511741b62fe32b6f67f6c144e0c0" +checksum = "dddd8d022840c1c500e0d7f82e9b9cf080b7dabd469f06b394010e6a594f692b" dependencies = [ "bincode", "blake3", @@ -7485,7 +7406,7 @@ dependencies = [ "cfg-if", "libc", "psm", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -7523,11 +7444,11 @@ dependencies = [ [[package]] name = "strum" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" dependencies = [ - "strum_macros 0.27.1", + "strum_macros 0.27.2", ] [[package]] @@ -7540,7 +7461,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -7553,20 +7474,19 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "strum_macros" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "rustversion", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -7588,9 +7508,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.101" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -7599,14 +7519,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c8c8f496c33dc6343dac05b4be8d9e0bca180a4caa81d7b8416b10cc2273cd" +checksum = "a0b198d366dbec045acfcd97295eb653a7a2b40e4dc764ef1e79aafcad439d3c" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -7617,7 +7537,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -7636,7 +7556,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -7657,7 +7577,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -7668,7 +7588,7 @@ checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "test-case-core", ] @@ -7683,11 +7603,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.15", ] [[package]] @@ -7698,28 +7618,27 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] @@ -7803,9 +7722,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -7843,7 +7762,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "serde", "serde_spanned", "toml_datetime", @@ -7870,13 +7789,13 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1ffbcf9c6f6b99d386e7444eb608ba646ae452a36b39737deb9663b610f662" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -8039,9 +7958,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" dependencies = [ "js-sys", "wasm-bindgen", @@ -8062,11 +7981,11 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vm-zstd" version = "0.1.1" -source = "git+https://github.com/scroll-tech/rust-zstd-decompressor.git?branch=master#0aa0c51819334a79bca90525ae87297fbaabd6d8" +source = "git+https://github.com/scroll-tech/rust-zstd-decompressor.git?branch=master#d47c5fb58a1ae8412c721b428a624766cbefa97e" dependencies = [ "anyhow", "bitstream-io", - "encoder", + "encoder-standard 0.1.0 (git+https://github.com/scroll-tech/da-codec.git?rev=2cfec8c)", "itertools 0.11.0", "serde", "strum 0.25.0", @@ -8084,9 +8003,9 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" @@ -8119,7 +8038,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "wasm-bindgen-shared", ] @@ -8141,7 +8060,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -8208,7 +8127,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -8219,7 +8138,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -8252,7 +8171,16 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.3", ] [[package]] @@ -8261,14 +8189,31 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "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", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", ] [[package]] @@ -8277,53 +8222,101 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + [[package]] name = "winnow" -version = "0.7.10" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" +checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" dependencies = [ "memchr", ] @@ -8372,28 +8365,28 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -8413,7 +8406,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "synstructure", ] @@ -8434,7 +8427,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -8450,9 +8443,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -8467,7 +8460,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] diff --git a/rust-toolchain.toml b/rust-toolchain.toml index f56d6b4c..851af0bd 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.86" +channel = "1.88" targets = ["riscv32im-unknown-none-elf", "x86_64-unknown-linux-gnu"] components = ["llvm-tools", "rustc-dev"] From 3516c093fdd4d863541784261eab9cd022eb8b7a Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Wed, 20 Aug 2025 08:57:22 +0800 Subject: [PATCH 15/84] update openvm guest --- Cargo.lock | 344 +++++++++--------- Cargo.toml | 28 +- crates/circuits/batch-circuit/openvm_init.rs | 4 +- .../circuits/chunk-circuit/.cargo/config.toml | 4 +- crates/circuits/chunk-circuit/openvm_init.rs | 4 +- 5 files changed, 192 insertions(+), 192 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 22fca1ac..289c0ca7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2786,7 +2786,7 @@ dependencies = [ [[package]] name = "k256" version = "0.13.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "ecdsa", "elliptic-curve", @@ -2794,11 +2794,11 @@ dependencies = [ "hex-literal", "num-bigint 0.4.6", "once_cell", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-algebra-moduli-macros 1.4.0-rc.4", + "openvm-ecc-guest 1.4.0-rc.4", + "openvm-ecc-sw-macros 1.4.0-rc.4", "serde", ] @@ -3333,28 +3333,28 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openvm" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "bytemuck", - "getrandom 0.2.16", - "getrandom 0.3.3", "num-bigint 0.4.6", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-platform 1.3.0", + "openvm-rv32im-guest 1.3.0", "serde", ] [[package]] name = "openvm" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "bytemuck", + "getrandom 0.2.16", + "getrandom 0.3.3", "num-bigint 0.4.6", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-platform 1.4.0-rc.4", + "openvm-rv32im-guest 1.4.0-rc.4", "serde", ] @@ -3390,19 +3390,19 @@ dependencies = [ [[package]] name = "openvm-algebra-complex-macros" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-macros-common 1.3.0", "quote", "syn 2.0.106", ] [[package]] name = "openvm-algebra-complex-macros" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-macros-common 1.4.0-rc.4", "quote", "syn 2.0.106", ] @@ -3410,31 +3410,31 @@ dependencies = [ [[package]] name = "openvm-algebra-guest" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "halo2curves-axiom 0.7.0", "num-bigint 0.4.6", "once_cell", - "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-algebra-complex-macros 1.3.0", + "openvm-algebra-moduli-macros 1.3.0", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-rv32im-guest 1.3.0", "serde-big-array", "strum_macros 0.26.4", ] [[package]] name = "openvm-algebra-guest" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "halo2curves-axiom 0.7.0", "num-bigint 0.4.6", "once_cell", - "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-algebra-complex-macros 1.4.0-rc.4", + "openvm-algebra-moduli-macros 1.4.0-rc.4", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-rv32im-guest 1.4.0-rc.4", "serde-big-array", "strum_macros 0.26.4", ] @@ -3442,23 +3442,23 @@ dependencies = [ [[package]] name = "openvm-algebra-moduli-macros" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "num-bigint 0.4.6", "num-prime", - "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-macros-common 1.3.0", "quote", "syn 2.0.106", ] [[package]] name = "openvm-algebra-moduli-macros" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "num-bigint 0.4.6", "num-prime", - "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-macros-common 1.4.0-rc.4", "quote", "syn 2.0.106", ] @@ -3468,7 +3468,7 @@ name = "openvm-algebra-transpiler" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-algebra-guest 1.3.0", "openvm-instructions", "openvm-instructions-derive", "openvm-stark-backend", @@ -3502,18 +3502,18 @@ dependencies = [ [[package]] name = "openvm-bigint-guest" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-platform 1.3.0", "strum_macros 0.26.4", ] [[package]] name = "openvm-bigint-guest" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-platform 1.4.0-rc.4", "strum_macros 0.26.4", ] @@ -3522,7 +3522,7 @@ name = "openvm-bigint-transpiler" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-bigint-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-bigint-guest 1.3.0", "openvm-instructions", "openvm-instructions-derive", "openvm-rv32im-transpiler", @@ -3539,7 +3539,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "cargo_metadata 0.18.1", "eyre", - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-platform 1.3.0", "serde", "serde_json", ] @@ -3628,7 +3628,7 @@ dependencies = [ [[package]] name = "openvm-custom-insn" version = "0.1.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "proc-macro2", "quote", @@ -3676,37 +3676,37 @@ dependencies = [ [[package]] name = "openvm-ecc-guest" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "ecdsa", "elliptic-curve", "group 0.13.0", "halo2curves-axiom 0.7.0", "once_cell", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm 1.3.0", + "openvm-algebra-guest 1.3.0", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-ecc-sw-macros 1.3.0", + "openvm-rv32im-guest 1.3.0", "serde", "strum_macros 0.26.4", ] [[package]] name = "openvm-ecc-guest" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "ecdsa", "elliptic-curve", "group 0.13.0", "halo2curves-axiom 0.7.0", "once_cell", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-ecc-sw-macros 1.4.0-rc.4", + "openvm-rv32im-guest 1.4.0-rc.4", "serde", "strum_macros 0.26.4", ] @@ -3714,19 +3714,19 @@ dependencies = [ [[package]] name = "openvm-ecc-sw-macros" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-macros-common 1.3.0", "quote", "syn 2.0.106", ] [[package]] name = "openvm-ecc-sw-macros" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "openvm-macros-common 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-macros-common 1.4.0-rc.4", "quote", "syn 2.0.106", ] @@ -3736,7 +3736,7 @@ name = "openvm-ecc-transpiler" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-ecc-guest 1.3.0", "openvm-instructions", "openvm-instructions-derive", "openvm-stark-backend", @@ -3800,17 +3800,17 @@ dependencies = [ [[package]] name = "openvm-keccak256-guest" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-platform 1.3.0", ] [[package]] name = "openvm-keccak256-guest" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-platform 1.4.0-rc.4", ] [[package]] @@ -3820,7 +3820,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-keccak256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-keccak256-guest 1.3.0", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -3830,15 +3830,15 @@ dependencies = [ [[package]] name = "openvm-macros-common" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "syn 2.0.106", ] [[package]] name = "openvm-macros-common" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "syn 2.0.106", ] @@ -3962,8 +3962,8 @@ dependencies = [ [[package]] name = "openvm-pairing" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "group 0.13.0", "halo2curves-axiom 0.7.0", @@ -3971,16 +3971,16 @@ dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-pairing-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm 1.4.0-rc.4", + "openvm-algebra-complex-macros 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-algebra-moduli-macros 1.4.0-rc.4", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-ecc-guest 1.4.0-rc.4", + "openvm-ecc-sw-macros 1.4.0-rc.4", + "openvm-pairing-guest 1.4.0-rc.4", + "openvm-platform 1.4.0-rc.4", + "openvm-rv32im-guest 1.4.0-rc.4", "rand 0.8.5", "serde", ] @@ -4003,10 +4003,10 @@ dependencies = [ "openvm-circuit-primitives", "openvm-circuit-primitives-derive", "openvm-ecc-circuit", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-ecc-guest 1.3.0", "openvm-instructions", "openvm-mod-circuit-builder", - "openvm-pairing-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-pairing-guest 1.3.0", "openvm-pairing-transpiler", "openvm-rv32-adapters", "openvm-rv32im-circuit", @@ -4019,7 +4019,7 @@ dependencies = [ [[package]] name = "openvm-pairing-guest" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "halo2curves-axiom 0.7.0", "hex-literal", @@ -4027,11 +4027,11 @@ dependencies = [ "lazy_static", "num-bigint 0.4.6", "num-traits", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm 1.3.0", + "openvm-algebra-guest 1.3.0", + "openvm-algebra-moduli-macros 1.3.0", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-ecc-guest 1.3.0", "rand 0.8.5", "serde", "strum_macros 0.26.4", @@ -4039,8 +4039,8 @@ dependencies = [ [[package]] name = "openvm-pairing-guest" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "halo2curves-axiom 0.7.0", "hex-literal", @@ -4048,11 +4048,11 @@ dependencies = [ "lazy_static", "num-bigint 0.4.6", "num-traits", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-algebra-moduli-macros 1.4.0-rc.4", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-ecc-guest 1.4.0-rc.4", "rand 0.8.5", "serde", "strum_macros 0.26.4", @@ -4065,7 +4065,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-pairing-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-pairing-guest 1.3.0", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4075,21 +4075,21 @@ dependencies = [ [[package]] name = "openvm-platform" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "libm", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-rv32im-guest 1.3.0", ] [[package]] name = "openvm-platform" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "libm", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-rv32im-guest 1.4.0-rc.4", ] [[package]] @@ -4155,19 +4155,19 @@ dependencies = [ [[package]] name = "openvm-rv32im-guest" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", "p3-field 0.1.0", "strum_macros 0.26.4", ] [[package]] name = "openvm-rv32im-guest" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", "p3-field 0.1.0", "strum_macros 0.26.4", ] @@ -4179,7 +4179,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-rv32im-guest 1.3.0", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4205,7 +4205,7 @@ dependencies = [ "itertools 0.14.0", "metrics", "num-bigint 0.4.6", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm 1.3.0", "openvm-algebra-circuit", "openvm-algebra-transpiler", "openvm-bigint-circuit", @@ -4244,10 +4244,10 @@ dependencies = [ [[package]] name = "openvm-sha2" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "openvm-sha256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-sha256-guest 1.4.0-rc.4", "sha2 0.10.9", ] @@ -4288,17 +4288,17 @@ dependencies = [ [[package]] name = "openvm-sha256-guest" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-platform 1.3.0", ] [[package]] name = "openvm-sha256-guest" -version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-platform 1.4.0-rc.4", ] [[package]] @@ -4308,7 +4308,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-sha256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-sha256-guest 1.3.0", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4385,7 +4385,7 @@ dependencies = [ "elf", "eyre", "openvm-instructions", - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-platform 1.3.0", "openvm-stark-backend", "rrs-lib", "thiserror 1.0.69", @@ -4430,18 +4430,18 @@ dependencies = [ [[package]] name = "p256" version = "0.13.2" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "ecdsa", "elliptic-curve", "ff 0.13.1", "hex-literal", "num-bigint 0.4.6", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-moduli-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-sw-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-algebra-moduli-macros 1.4.0-rc.4", + "openvm-ecc-guest 1.4.0-rc.4", + "openvm-ecc-sw-macros 1.4.0-rc.4", "serde", ] @@ -6503,7 +6503,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "sbv-core" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#24ccbe28337aa325cf5c299223e64c419ad63441" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ "cfg-if", "itertools 0.14.0", @@ -6520,7 +6520,7 @@ dependencies = [ [[package]] name = "sbv-helpers" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#24ccbe28337aa325cf5c299223e64c419ad63441" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ "tracing", ] @@ -6528,7 +6528,7 @@ dependencies = [ [[package]] name = "sbv-kv" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#24ccbe28337aa325cf5c299223e64c419ad63441" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ "auto_impl", "hashbrown 0.15.5", @@ -6538,9 +6538,9 @@ dependencies = [ [[package]] name = "sbv-precompile" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#24ccbe28337aa325cf5c299223e64c419ad63441" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-ecc-guest 1.4.0-rc.4", "openvm-pairing", "openvm-sha2", "sbv-primitives", @@ -6549,7 +6549,7 @@ dependencies = [ [[package]] name = "sbv-primitives" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#24ccbe28337aa325cf5c299223e64c419ad63441" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -6583,7 +6583,7 @@ dependencies = [ [[package]] name = "sbv-trie" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#24ccbe28337aa325cf5c299223e64c419ad63441" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ "alloy-rlp", "alloy-trie", @@ -6672,16 +6672,16 @@ dependencies = [ "c-kzg", "halo2curves-axiom 0.7.0", "itertools 0.14.0", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-keccak256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm 1.4.0-rc.4", + "openvm-algebra-complex-macros 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-ecc-guest 1.4.0-rc.4", + "openvm-keccak256-guest 1.4.0-rc.4", "openvm-pairing", - "openvm-pairing-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-pairing-guest 1.4.0-rc.4", + "openvm-rv32im-guest 1.4.0-rc.4", "openvm-sha2", - "openvm-sha256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-sha256-guest 1.4.0-rc.4", "rkyv", "scroll-zkvm-types-batch", "scroll-zkvm-types-circuit", @@ -6726,10 +6726,10 @@ name = "scroll-zkvm-bundle-circuit" version = "0.5.0" dependencies = [ "alloy-primitives", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-keccak256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-keccak256-guest 1.4.0-rc.4", + "openvm-rv32im-guest 1.4.0-rc.4", "rkyv", "scroll-zkvm-types-bundle", "scroll-zkvm-types-circuit", @@ -6739,17 +6739,17 @@ dependencies = [ name = "scroll-zkvm-chunk-circuit" version = "0.5.0" dependencies = [ - "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-complex-macros 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-algebra-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-bigint-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-keccak256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm 1.4.0-rc.4", + "openvm-algebra-complex-macros 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-bigint-guest 1.4.0-rc.4", + "openvm-ecc-guest 1.4.0-rc.4", + "openvm-keccak256-guest 1.4.0-rc.4", "openvm-pairing", - "openvm-pairing-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "p256 0.13.2 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-pairing-guest 1.4.0-rc.4", + "openvm-rv32im-guest 1.4.0-rc.4", + "p256 0.13.2 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", "rkyv", "sbv-precompile", "scroll-zkvm-types-chunk", @@ -6877,12 +6877,12 @@ dependencies = [ "c-kzg", "halo2curves-axiom 0.7.0", "itertools 0.14.0", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-ecc-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm 1.4.0-rc.4", + "openvm-ecc-guest 1.4.0-rc.4", "openvm-pairing", - "openvm-pairing-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-pairing-guest 1.4.0-rc.4", "openvm-sha2", - "openvm-sha256-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-sha256-guest 1.4.0-rc.4", "rkyv", "scroll-zkvm-types-base", "serde", @@ -6907,9 +6907,9 @@ version = "0.5.0" dependencies = [ "alloy-primitives", "itertools 0.14.0", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm 1.4.0-rc.4", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-rv32im-guest 1.4.0-rc.4", "revm-precompile 21.0.0", "rkyv", "sbv-core", @@ -6929,9 +6929,9 @@ dependencies = [ "alloy-primitives", "getrandom 0.2.16", "itertools 0.14.0", - "openvm 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", - "openvm-rv32im-guest 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm 1.4.0-rc.4", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-rv32im-guest 1.4.0-rc.4", "rkyv", "scroll-zkvm-types-base", "serde", diff --git a/Cargo.toml b/Cargo.toml index cd484863..7d5f139c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,20 +26,20 @@ version = "0.5.0" [workspace.dependencies] # openvm guest libs -openvm = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0" } -openvm-algebra-complex-macros = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0", default-features = false } -openvm-custom-insn = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0", default-features = false } -openvm-sha2 = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0" } -openvm-sha256-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0", default-features = false } -openvm-p256 = { git = "https://github.com/openvm-org/openvm.git", package = "p256", rev = "5368d4756993fc1e51092499a816867cf4808de0", features = ["std"] } -openvm-k256 = { git = "https://github.com/openvm-org/openvm.git", package = "k256", rev = "5368d4756993fc1e51092499a816867cf4808de0", features = ["std"] } -openvm-pairing = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0" } -openvm-keccak256-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0", default-features = false } -openvm-algebra-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0", default-features = false } -openvm-ecc-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0", default-features = false } -openvm-bigint-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0", default-features = false } -openvm-pairing-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0", default-features = false } -openvm-rv32im-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0", default-features = false } +openvm = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97" } +openvm-algebra-complex-macros = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } +openvm-custom-insn = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } +openvm-sha2 = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97" } +openvm-sha256-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } +openvm-p256 = { git = "https://github.com/openvm-org/openvm.git", package = "p256", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", features = ["std"] } +openvm-k256 = { git = "https://github.com/openvm-org/openvm.git", package = "k256", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", features = ["std"] } +openvm-pairing = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97" } +openvm-keccak256-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } +openvm-algebra-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } +openvm-ecc-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } +openvm-bigint-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } +openvm-pairing-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } +openvm-rv32im-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } # openvm host libs openvm-build = { git = "https://github.com/openvm-org/openvm.git", rev = "c033e184cdb04a5bfdbd95ca5651c44f5a355c0c", default-features = false } diff --git a/crates/circuits/batch-circuit/openvm_init.rs b/crates/circuits/batch-circuit/openvm_init.rs index d3aef73a..9a303b40 100644 --- a/crates/circuits/batch-circuit/openvm_init.rs +++ b/crates/circuits/batch-circuit/openvm_init.rs @@ -1,4 +1,4 @@ // This file is automatically generated by cargo openvm. Do not rename or edit. openvm_algebra_guest::moduli_macros::moduli_init! { "4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787", "52435875175126190479447740508185965837690552500527637822603658699938581184513" } -openvm_algebra_guest::complex_macros::complex_init! { Bls12_381Fp2 { mod_idx = 0 } } -openvm_ecc_guest::sw_macros::sw_init! { Bls12_381G1Affine } +openvm_algebra_guest::complex_macros::complex_init! { "Bls12_381Fp2" { mod_idx = 0 } } +openvm_ecc_guest::sw_macros::sw_init! { "Bls12_381G1Affine" } diff --git a/crates/circuits/chunk-circuit/.cargo/config.toml b/crates/circuits/chunk-circuit/.cargo/config.toml index e6e4f106..5a34042c 100644 --- a/crates/circuits/chunk-circuit/.cargo/config.toml +++ b/crates/circuits/chunk-circuit/.cargo/config.toml @@ -1,3 +1,3 @@ [patch.crates-io] -k256 = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0" } -p256 = { git = "https://github.com/openvm-org/openvm.git", rev = "5368d4756993fc1e51092499a816867cf4808de0" } +k256 = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97" } +p256 = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97" } diff --git a/crates/circuits/chunk-circuit/openvm_init.rs b/crates/circuits/chunk-circuit/openvm_init.rs index 268212d6..7c9f2870 100644 --- a/crates/circuits/chunk-circuit/openvm_init.rs +++ b/crates/circuits/chunk-circuit/openvm_init.rs @@ -1,4 +1,4 @@ // This file is automatically generated by cargo openvm. Do not rename or edit. openvm_algebra_guest::moduli_macros::moduli_init! { "21888242871839275222246405745257275088696311157297823662689037894645226208583", "21888242871839275222246405745257275088548364400416034343698204186575808495617", "115792089237316195423570985008687907853269984665640564039457584007908834671663", "115792089237316195423570985008687907852837564279074904382605163141518161494337", "115792089210356248762697446949407573530086143415290314195533631308867097853951", "115792089210356248762697446949407573529996955224135760342422259061068512044369" } -openvm_algebra_guest::complex_macros::complex_init! { Bn254Fp2 { mod_idx = 0 } } -openvm_ecc_guest::sw_macros::sw_init! { Secp256k1Point, P256Point, Bn254G1Affine } +openvm_algebra_guest::complex_macros::complex_init! { "Bn254Fp2" { mod_idx = 0 } } +openvm_ecc_guest::sw_macros::sw_init! { "Secp256k1Point", "P256Point", "Bn254G1Affine" } From d56a94d9e2a0cff7dbc4521bf0ea4aa0b163141d Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Wed, 20 Aug 2025 09:07:36 +0800 Subject: [PATCH 16/84] fmt & check --- Cargo.lock | 7 +++-- crates/circuits/batch-circuit/src/circuit.rs | 5 +--- crates/circuits/bundle-circuit/src/circuit.rs | 5 +--- crates/integration/src/lib.rs | 4 +-- crates/integration/src/utils/mod.rs | 3 +- crates/types/batch/src/header/mod.rs | 10 ++++++- crates/types/batch/src/header/v6.rs | 1 - crates/types/batch/src/header/v7.rs | 1 - crates/types/batch/src/witness.rs | 20 +++++++++++-- crates/types/bundle/src/witness.rs | 10 ++++++- crates/types/chunk/src/execute.rs | 28 ++++++++----------- 11 files changed, 57 insertions(+), 37 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 45684811..d29b546c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6747,8 +6747,8 @@ name = "scroll-zkvm-bundle-circuit" version = "0.5.0" dependencies = [ "alloy-primitives", - "openvm 1.4.0-rc.4", "bincode 2.0.1", + "openvm 1.4.0-rc.4", "openvm-algebra-guest 1.4.0-rc.4", "openvm-keccak256-guest 1.4.0-rc.4", "openvm-rv32im-guest 1.4.0-rc.4", @@ -6761,6 +6761,7 @@ dependencies = [ name = "scroll-zkvm-chunk-circuit" version = "0.5.0" dependencies = [ + "bincode 2.0.1", "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", "openvm 1.4.0-rc.4", "openvm-algebra-complex-macros 1.4.0-rc.4", @@ -8180,9 +8181,9 @@ dependencies = [ [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-result" diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index 927c5893..25fb6134 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -44,10 +44,7 @@ impl Circuit for BatchCircuit { } fn validate(witness: &Self::Witness) -> Self::PublicInputs { - ( - BatchInfo::from(witness), - witness.fork_name.clone() - ) + (BatchInfo::from(witness), witness.fork_name.clone()) } } diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index 31acd9ba..de5dbe21 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -37,10 +37,7 @@ impl Circuit for BundleCircuit { } fn validate(witness: &Self::Witness) -> Self::PublicInputs { - ( - BundleInfo::from(witness), - witness.fork_name.clone(), - ) + (BundleInfo::from(witness), witness.fork_name.clone()) } } diff --git a/crates/integration/src/lib.rs b/crates/integration/src/lib.rs index c8ed5f7a..69126267 100644 --- a/crates/integration/src/lib.rs +++ b/crates/integration/src/lib.rs @@ -74,10 +74,10 @@ static DIR_TESTRUN: OnceCell = OnceCell::new(); /// Circuit that implements functionality required to run e2e tests in specified phase (chunk/batch/bundle). pub trait ProverTester { /// Tester witness type - type Witness: PartialProvingTask;// + rkyv::Archive; + type Witness: PartialProvingTask; // + rkyv::Archive; /// Tester metadata type - type Metadata;//: for<'a> TryFrom<&'a ::Archived>; + type Metadata; //: for<'a> TryFrom<&'a ::Archived>; /// Naming for tester const NAME: &str; diff --git a/crates/integration/src/utils/mod.rs b/crates/integration/src/utils/mod.rs index 3259e9a5..8c5b8f4d 100644 --- a/crates/integration/src/utils/mod.rs +++ b/crates/integration/src/utils/mod.rs @@ -1,6 +1,7 @@ use crate::testing_hardfork; use sbv_primitives::{ - B256, U256, types::{BlockWitness, Transaction, eips::Encodable2718, reth::primitives::TransactionSigned}, + B256, U256, + types::{BlockWitness, Transaction, eips::Encodable2718, reth::primitives::TransactionSigned}, }; use scroll_zkvm_types::{ batch::{ diff --git a/crates/types/batch/src/header/mod.rs b/crates/types/batch/src/header/mod.rs index fcf9c373..84c368e0 100644 --- a/crates/types/batch/src/header/mod.rs +++ b/crates/types/batch/src/header/mod.rs @@ -25,7 +25,15 @@ pub trait BatchHeader { /// Reference header indicate the version of batch header base on which batch hash /// should be calculated. -#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize, serde::Deserialize, serde::Serialize)] +#[derive( + Clone, + Debug, + rkyv::Archive, + rkyv::Deserialize, + rkyv::Serialize, + serde::Deserialize, + serde::Serialize, +)] #[rkyv(derive(Debug))] pub enum ReferenceHeader { /// Represents DA-codec v6. diff --git a/crates/types/batch/src/header/v6.rs b/crates/types/batch/src/header/v6.rs index f583a123..d8f21247 100644 --- a/crates/types/batch/src/header/v6.rs +++ b/crates/types/batch/src/header/v6.rs @@ -94,4 +94,3 @@ impl BatchHeader for BatchHeaderV6 { self.blob_versioned_hash } } - diff --git a/crates/types/batch/src/header/v7.rs b/crates/types/batch/src/header/v7.rs index f2a73aed..bb05b1ad 100644 --- a/crates/types/batch/src/header/v7.rs +++ b/crates/types/batch/src/header/v7.rs @@ -68,4 +68,3 @@ impl BatchHeader for BatchHeaderV7 { self.blob_versioned_hash } } - diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index 102e174e..c1ab6081 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -36,7 +36,15 @@ mod array48 { } /// Witness required by applying point evaluation -#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize, serde::Deserialize, serde::Serialize)] +#[derive( + Clone, + Debug, + rkyv::Archive, + rkyv::Deserialize, + rkyv::Serialize, + serde::Deserialize, + serde::Serialize, +)] #[rkyv(derive(Debug))] pub struct PointEvalWitness { /// kzg commitment @@ -50,7 +58,15 @@ pub struct PointEvalWitness { } /// Witness to the batch circuit. -#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize, serde::Deserialize, serde::Serialize)] +#[derive( + Clone, + Debug, + rkyv::Archive, + rkyv::Deserialize, + rkyv::Serialize, + serde::Deserialize, + serde::Serialize, +)] #[rkyv(derive(Debug))] pub struct BatchWitness { /// Flattened root proofs from all chunks in the batch. diff --git a/crates/types/bundle/src/witness.rs b/crates/types/bundle/src/witness.rs index c9b13e4b..0dd6da08 100644 --- a/crates/types/bundle/src/witness.rs +++ b/crates/types/bundle/src/witness.rs @@ -18,7 +18,15 @@ pub struct BundleWitnessEuclid { } /// The witness for the bundle circuit. -#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize, serde::Deserialize, serde::Serialize)] +#[derive( + Clone, + Debug, + rkyv::Archive, + rkyv::Deserialize, + rkyv::Serialize, + serde::Deserialize, + serde::Serialize, +)] #[rkyv(derive(Debug))] pub struct BundleWitness { /// Batch proofs being aggregated in the bundle. diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index 1ef8535c..64a35520 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -1,31 +1,30 @@ -use crate::ArchivedChunkWitness; +use crate::ChunkWitness; use sbv_core::verifier::{self, VerifyResult}; use sbv_helpers::manually_drop_on_zkvm; use sbv_primitives::{ - B256, BlockWitness, U256, + B256, BlockWitness, chainspec::{Chain, build_chain_spec_force_hardfork}, hardforks::Hardfork, }; -use std::convert::Infallible; use types_base::{ - fork_name::ArchivedForkName, + fork_name::ForkName, public_inputs::chunk::{ChunkExt, ChunkInfo}, }; /// `compression_ratios` can be `None` in host mode. /// But in guest mode, it must be provided. -pub fn execute(witness: &ArchivedChunkWitness) -> Result { +pub fn execute(witness: &ChunkWitness) -> Result { let chain = Chain::from_id(witness.blocks[0].chain_id()); let chain_spec = build_chain_spec_force_hardfork( chain, match witness.fork_name { - ArchivedForkName::EuclidV1 => Hardfork::Euclid, - ArchivedForkName::EuclidV2 => Hardfork::EuclidV2, - ArchivedForkName::Feynman => Hardfork::Feynman, + ForkName::EuclidV1 => Hardfork::Euclid, + ForkName::EuclidV2 => Hardfork::EuclidV2, + ForkName::Feynman => Hardfork::Feynman, }, ); - let state_commit_mode = rkyv::deserialize::<_, Infallible>(&witness.state_commit_mode).unwrap(); + let state_commit_mode = witness.state_commit_mode.clone(); println!("state_commit_mode: {:?}", state_commit_mode); let VerifyResult { @@ -38,12 +37,7 @@ pub fn execute(witness: &ArchivedChunkWitness) -> Result { witness.blocks.as_slice(), chain_spec.clone(), state_commit_mode, - Some( - witness - .compression_ratios - .iter() - .map(|x| x.iter().map(Into::::into)), - ), + Some(witness.compression_ratios.clone()), ) .map_err(|e| format!("verify error: {e}"))?; @@ -51,13 +45,13 @@ pub fn execute(witness: &ArchivedChunkWitness) -> Result { let mut rlp_buffer = manually_drop_on_zkvm!(Vec::with_capacity(2048)); let (tx_data_length, tx_data_digest) = blocks.tx_bytes_hash_in(rlp_buffer.as_mut()); - let data_hash = if witness.fork_name < ArchivedForkName::EuclidV2 { + let data_hash = if witness.fork_name < ForkName::EuclidV2 { blocks.legacy_data_hash() } else { B256::ZERO }; - let post_msg_queue_hash = if witness.fork_name >= ArchivedForkName::EuclidV2 { + let post_msg_queue_hash = if witness.fork_name >= ForkName::EuclidV2 { blocks.rolling_msg_queue_hash(witness.prev_msg_queue_hash.into()) } else { B256::ZERO From a76294142cf19da749f39ef6f816f3d3cd467b3f Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Wed, 20 Aug 2025 09:31:06 +0800 Subject: [PATCH 17/84] update batch program --- Cargo.lock | 1 - crates/circuits/batch-circuit/Cargo.toml | 4 +- crates/circuits/batch-circuit/src/circuit.rs | 1 - crates/circuits/bundle-circuit/src/circuit.rs | 1 - crates/circuits/chunk-circuit/src/circuit.rs | 1 - crates/types/base/Cargo.toml | 2 +- crates/types/base/src/public_inputs/chunk.rs | 205 +++--------------- crates/types/base/src/utils/hash.rs | 2 - .../batch/src/blob_consistency/constants.rs | 46 ++++ .../types/batch/src/blob_consistency/mod.rs | 3 +- .../batch/src/blob_consistency/openvm.rs | 91 +++----- crates/types/batch/src/builder/v7.rs | 6 +- crates/types/batch/src/witness.rs | 2 +- crates/types/chunk/src/execute.rs | 52 ++++- crates/types/chunk/src/lib.rs | 1 + crates/types/chunk/src/types.rs | 156 +++++++++++++ 16 files changed, 330 insertions(+), 244 deletions(-) create mode 100644 crates/types/batch/src/blob_consistency/constants.rs create mode 100644 crates/types/chunk/src/types.rs diff --git a/Cargo.lock b/Cargo.lock index d29b546c..88c033f4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6885,7 +6885,6 @@ dependencies = [ "alloy-serde 1.0.24", "itertools 0.14.0", "rkyv", - "sbv-primitives", "serde", "sha2 0.10.9", "sha3", diff --git a/crates/circuits/batch-circuit/Cargo.toml b/crates/circuits/batch-circuit/Cargo.toml index aae02382..3a8f7ac0 100644 --- a/crates/circuits/batch-circuit/Cargo.toml +++ b/crates/circuits/batch-circuit/Cargo.toml @@ -6,7 +6,6 @@ repository.workspace = true version = "0.5.0" [dependencies] -bincode.workspace = true scroll-zkvm-types-circuit.workspace = true scroll-zkvm-types-batch.workspace = true @@ -23,7 +22,8 @@ openvm-rv32im-guest.workspace = true halo2curves-axiom = "0.7.0" -alloy-primitives = { workspace = true } +alloy-primitives = { workspace = true, features = ["native-keccak"] } +bincode.workspace = true bitcode.workspace = true itertools.workspace = true rkyv.workspace = true diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index 25fb6134..0b9aa041 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -8,7 +8,6 @@ use scroll_zkvm_types_circuit::{ chunk::VersionedChunkInfo, }, }; -use std::convert::Infallible; use crate::child_commitments; diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index de5dbe21..b3437f61 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -8,7 +8,6 @@ use scroll_zkvm_types_circuit::{ bundle::{BundleInfo, VersionedBundleInfo}, }, }; -use std::convert::Infallible; use crate::child_commitments; diff --git a/crates/circuits/chunk-circuit/src/circuit.rs b/crates/circuits/chunk-circuit/src/circuit.rs index 4b98b713..53933266 100644 --- a/crates/circuits/chunk-circuit/src/circuit.rs +++ b/crates/circuits/chunk-circuit/src/circuit.rs @@ -5,7 +5,6 @@ use scroll_zkvm_types_circuit::{ io::read_witnesses, public_inputs::chunk::{ChunkInfo, VersionedChunkInfo}, }; -use std::convert::Infallible; #[allow(unused_imports, clippy::single_component_path_imports)] use { diff --git a/crates/types/base/Cargo.toml b/crates/types/base/Cargo.toml index 32c9df0a..93692cbf 100644 --- a/crates/types/base/Cargo.toml +++ b/crates/types/base/Cargo.toml @@ -11,7 +11,7 @@ version.workspace = true alloy-primitives = { workspace = true } alloy-serde.workspace = true rkyv.workspace = true -sbv-primitives = { workspace = true, features = ["scroll-consensus-types", "scroll-reth-types", "scroll-reth-primitives-types", "reth-primitives-types"] } +#sbv-primitives = { workspace = true, features = ["scroll-consensus-types", "scroll-reth-types", "scroll-reth-primitives-types", "reth-primitives-types"] } serde.workspace = true itertools.workspace = true sha3 = "0.10.8" diff --git a/crates/types/base/src/public_inputs/chunk.rs b/crates/types/base/src/public_inputs/chunk.rs index 8c5a0683..ef2671fe 100644 --- a/crates/types/base/src/public_inputs/chunk.rs +++ b/crates/types/base/src/public_inputs/chunk.rs @@ -3,13 +3,6 @@ use crate::{ utils::keccak256, }; use alloy_primitives::{B256, U256}; -use sbv_primitives::types::{ - consensus::BlockHeader, - eips::Encodable2718, - reth::primitives::{Block, RecoveredBlock, SignedTransaction, TransactionSigned}, -}; -use std::ops::Deref; -use tiny_keccak::{Hasher, Keccak}; /// Number of bytes used to serialise [`BlockContextV2`]. pub const SIZE_BLOCK_CTX: usize = 52; @@ -41,6 +34,18 @@ pub struct BlockContextV2 { pub num_l1_msgs: u16, } +impl From<&ArchivedBlockContextV2> for BlockContextV2 { + fn from(archived: &ArchivedBlockContextV2) -> Self { + Self { + timestamp: archived.timestamp.into(), + base_fee: archived.base_fee.into(), + gas_limit: archived.gas_limit.into(), + num_txs: archived.num_txs.into(), + num_l1_msgs: archived.num_l1_msgs.into(), + } + } +} + impl From<&[u8]> for BlockContextV2 { fn from(bytes: &[u8]) -> Self { assert_eq!(bytes.len(), SIZE_BLOCK_CTX); @@ -61,26 +66,6 @@ impl From<&[u8]> for BlockContextV2 { } } -impl From<&RecoveredBlock> for BlockContextV2 { - fn from(block: &RecoveredBlock) -> BlockContextV2 { - BlockContextV2 { - timestamp: block.timestamp, - gas_limit: block.gas_limit, - base_fee: U256::from(block.base_fee_per_gas().expect("base_fee_expected")), - num_txs: u16::try_from(block.body().transactions.len()).expect("num txs u16"), - num_l1_msgs: u16::try_from( - block - .body() - .transactions - .iter() - .filter(|tx| tx.is_l1_message()) - .count(), - ) - .expect("num l1 msgs u16"), - } - } -} - impl BlockContextV2 { /// Serialize the block context in packed form. pub fn to_bytes(&self) -> Vec { @@ -205,6 +190,28 @@ impl ChunkInfo { } } +impl From<&ArchivedChunkInfo> for ChunkInfo { + fn from(archived: &ArchivedChunkInfo) -> Self { + Self { + chain_id: archived.chain_id.into(), + prev_state_root: archived.prev_state_root.into(), + post_state_root: archived.post_state_root.into(), + withdraw_root: archived.withdraw_root.into(), + data_hash: archived.data_hash.into(), + tx_data_digest: archived.tx_data_digest.into(), + prev_msg_queue_hash: archived.prev_msg_queue_hash.into(), + post_msg_queue_hash: archived.post_msg_queue_hash.into(), + tx_data_length: archived.tx_data_length.into(), + initial_block_number: archived.initial_block_number.into(), + block_ctxs: archived + .block_ctxs + .iter() + .map(BlockContextV2::from) + .collect(), + } + } +} + pub type VersionedChunkInfo = (ChunkInfo, ForkName); impl MultiVersionPublicInputs for ChunkInfo { @@ -242,147 +249,3 @@ impl MultiVersionPublicInputs for ChunkInfo { } } } - -pub trait ChunkExt { - /// Hash the transaction bytes. - /// - /// Only L2 transactions are considered while computing the digest. - fn tx_bytes_hash_in(&self, rlp_buffer: &mut Vec) -> (usize, B256); - /// Data hash before Euclid V2 - fn legacy_data_hash(&self) -> B256; - /// Rolling message queue hash after Euclid V2 - fn rolling_msg_queue_hash(&self, rolling_hash: B256) -> B256; -} - -impl]>> ChunkExt for T { - #[inline] - fn tx_bytes_hash_in(&self, rlp_buffer: &mut Vec) -> (usize, B256) { - let blocks = self.as_ref(); - blocks - .iter() - .flat_map(|b| b.body().transactions.iter()) - .tx_bytes_hash_in(rlp_buffer.as_mut()) - } - - #[inline] - fn legacy_data_hash(&self) -> B256 { - let blocks = self.as_ref(); - - let mut data_hasher = Keccak::v256(); - for block in blocks.iter() { - block.legacy_hash_da_header(&mut data_hasher); - } - for block in blocks.iter() { - block.legacy_hash_l1_msg(&mut data_hasher); - } - let mut data_hash = B256::ZERO; - data_hasher.finalize(&mut data_hash.0); - data_hash - } - - #[inline] - fn rolling_msg_queue_hash(&self, mut rolling_hash: B256) -> B256 { - let blocks = self.as_ref(); - for block in blocks.iter() { - rolling_hash = block.hash_msg_queue(&rolling_hash); - } - rolling_hash - } -} - -/// Helper trait for hashing transaction bytes. -trait TxBytesHashExt { - /// Hash the transaction bytes. - /// - /// Only L2 transactions are considered while computing the digest. - fn tx_bytes_hash_in(self, rlp_buffer: &mut Vec) -> (usize, B256); -} - -impl<'a, I: IntoIterator> TxBytesHashExt for I -where - I: IntoIterator, -{ - #[inline] - fn tx_bytes_hash_in(self, rlp_buffer: &mut Vec) -> (usize, B256) { - use tiny_keccak::{Hasher, Keccak}; - - let mut tx_bytes_hasher = Keccak::v256(); - let mut len = 0; - - // Ignore L1 msg txs. - for tx in self.into_iter().filter(|&tx| !tx.is_l1_message()) { - tx.encode_2718(rlp_buffer); - len += rlp_buffer.len(); - tx_bytes_hasher.update(rlp_buffer); - rlp_buffer.clear(); - } - - let mut tx_bytes_hash = B256::ZERO; - tx_bytes_hasher.finalize(&mut tx_bytes_hash.0); - (len, tx_bytes_hash) - } -} - -/// Chunk related extension methods for Block -trait BlockChunkExt { - /// Hash the header of the block - fn legacy_hash_da_header(&self, hasher: &mut impl tiny_keccak::Hasher); - /// Hash the l1 messages of the block - fn legacy_hash_l1_msg(&self, hasher: &mut impl Hasher); - /// Hash the l1 messages of the block - fn hash_msg_queue(&self, initial_queue_hash: &B256) -> B256; -} - -impl BlockChunkExt for RecoveredBlock { - #[inline] - fn legacy_hash_da_header(&self, hasher: &mut impl Hasher) { - hasher.update(&self.number.to_be_bytes()); - hasher.update(&self.timestamp.to_be_bytes()); - hasher.update( - &U256::from_limbs([self.base_fee_per_gas.unwrap_or_default(), 0, 0, 0]) - .to_be_bytes::<{ U256::BYTES }>(), - ); - hasher.update(&self.gas_limit.to_be_bytes()); - // FIXME: l1 tx could be skipped, the actual tx count needs to be calculated - hasher.update(&(self.body().transactions.len() as u16).to_be_bytes()); - } - - #[inline] - fn legacy_hash_l1_msg(&self, hasher: &mut impl Hasher) { - for tx in self - .body() - .transactions - .iter() - .filter(|tx| tx.is_l1_message()) - { - hasher.update(tx.tx_hash().as_slice()) - } - } - - #[inline] - fn hash_msg_queue(&self, initial_queue_hash: &B256) -> B256 { - let mut rolling_hash = *initial_queue_hash; - for tx in self - .body() - .transactions - .iter() - .filter(|tx| tx.is_l1_message()) - { - let mut hasher = Keccak::v256(); - hasher.update(rolling_hash.as_slice()); - hasher.update(tx.tx_hash().as_slice()); - - hasher.finalize(rolling_hash.as_mut_slice()); - - // clear last 32 bits, i.e. 4 bytes. - // https://github.com/scroll-tech/da-codec/blob/26dc8d575244560611548fada6a3a2745c60fe83/encoding/da.go#L817-L825 - // see also https://github.com/scroll-tech/da-codec/pull/42 - rolling_hash.0[28] = 0; - rolling_hash.0[29] = 0; - rolling_hash.0[30] = 0; - rolling_hash.0[31] = 0; - } - - rolling_hash - } -} diff --git a/crates/types/base/src/utils/hash.rs b/crates/types/base/src/utils/hash.rs index 9d94d210..42f36508 100644 --- a/crates/types/base/src/utils/hash.rs +++ b/crates/types/base/src/utils/hash.rs @@ -1,7 +1,5 @@ use alloy_primitives::B256; -/// From the utility of ether-rs -/// /// Computes the Keccak-256 hash of input bytes. /// /// Note that strings are interpreted as UTF-8 bytes, diff --git a/crates/types/batch/src/blob_consistency/constants.rs b/crates/types/batch/src/blob_consistency/constants.rs new file mode 100644 index 00000000..b88bb558 --- /dev/null +++ b/crates/types/batch/src/blob_consistency/constants.rs @@ -0,0 +1,46 @@ +// Use the second G2 field in kzg setup (G2[1]), +// the value of this G2 field is: +// b5bfd7dd8cdeb128 +// 843bc287230af389 +// 26187075cbfbefa8 +// 1009a2ce615ac53d +// 2914e5870cb452d2 +// afaaab24f3499f72 +// 185cbfee53492714 +// 734429b7b38608e2 +// 3926c911cceceac9 +// a36851477ba4c60b +// 087041de621000ed +// c98edada20c1def2 +// extracted from https://github.com/ethereum/c-kzg-4844/blob/81a8949f29d27d225ca74ebb4e9061bdd100560a/src/trusted_setup.txt#L4100 +#[allow(dead_code)] +const KZG_G2_SETUP_BYTES_COMPRESSED: [u8; 96] = [ + 0xb5, 0xbf, 0xd7, 0xdd, 0x8c, 0xde, 0xb1, 0x28, 0x84, 0x3b, 0xc2, 0x87, 0x23, 0x0a, 0xf3, 0x89, + 0x26, 0x18, 0x70, 0x75, 0xcb, 0xfb, 0xef, 0xa8, 0x10, 0x09, 0xa2, 0xce, 0x61, 0x5a, 0xc5, 0x3d, + 0x29, 0x14, 0xe5, 0x87, 0x0c, 0xb4, 0x52, 0xd2, 0xaf, 0xaa, 0xab, 0x24, 0xf3, 0x49, 0x9f, 0x72, + 0x18, 0x5c, 0xbf, 0xee, 0x53, 0x49, 0x27, 0x14, 0x73, 0x44, 0x29, 0xb7, 0xb3, 0x86, 0x08, 0xe2, + 0x39, 0x26, 0xc9, 0x11, 0xcc, 0xec, 0xea, 0xc9, 0xa3, 0x68, 0x51, 0x47, 0x7b, 0xa4, 0xc6, 0x0b, + 0x08, 0x70, 0x41, 0xde, 0x62, 0x10, 0x00, 0xed, 0xc9, 0x8e, 0xda, 0xda, 0x20, 0xc1, 0xde, 0xf2, +]; +pub const KZG_G2_SETUP_BYTES: [u8; 192] = [ + 0x15, 0xbf, 0xd7, 0xdd, 0x8c, 0xde, 0xb1, 0x28, 0x84, 0x3b, 0xc2, 0x87, 0x23, 0x0a, 0xf3, 0x89, + 0x26, 0x18, 0x70, 0x75, 0xcb, 0xfb, 0xef, 0xa8, 0x10, 0x09, 0xa2, 0xce, 0x61, 0x5a, 0xc5, 0x3d, + 0x29, 0x14, 0xe5, 0x87, 0x0c, 0xb4, 0x52, 0xd2, 0xaf, 0xaa, 0xab, 0x24, 0xf3, 0x49, 0x9f, 0x72, + 0x18, 0x5c, 0xbf, 0xee, 0x53, 0x49, 0x27, 0x14, 0x73, 0x44, 0x29, 0xb7, 0xb3, 0x86, 0x08, 0xe2, + 0x39, 0x26, 0xc9, 0x11, 0xcc, 0xec, 0xea, 0xc9, 0xa3, 0x68, 0x51, 0x47, 0x7b, 0xa4, 0xc6, 0x0b, + 0x08, 0x70, 0x41, 0xde, 0x62, 0x10, 0x00, 0xed, 0xc9, 0x8e, 0xda, 0xda, 0x20, 0xc1, 0xde, 0xf2, + 0x16, 0x66, 0xc5, 0x4b, 0x0a, 0x32, 0x52, 0x95, 0x03, 0x43, 0x2f, 0xca, 0xe0, 0x18, 0x1b, 0x4b, + 0xef, 0x79, 0xde, 0x09, 0xfc, 0x63, 0x67, 0x1f, 0xda, 0x5e, 0xd1, 0xba, 0x9b, 0xfa, 0x07, 0x89, + 0x94, 0x95, 0x34, 0x6f, 0x3d, 0x7a, 0xc9, 0xcd, 0x23, 0x04, 0x8e, 0xf3, 0x0d, 0x0a, 0x15, 0x4f, + 0x01, 0x43, 0x53, 0xbd, 0xb9, 0x6b, 0x62, 0x6d, 0xd7, 0xd5, 0xee, 0x85, 0x99, 0xd1, 0xfc, 0xa2, + 0x13, 0x15, 0x69, 0x49, 0x0e, 0x28, 0xde, 0x18, 0xe8, 0x24, 0x51, 0xa4, 0x96, 0xa9, 0xc9, 0x79, + 0x4c, 0xe2, 0x6d, 0x10, 0x59, 0x41, 0xf3, 0x83, 0xee, 0x68, 0x9b, 0xfb, 0xbb, 0x83, 0x2a, 0x99, +]; + +#[test] +fn test_g2() { + use halo2curves_axiom::bls12_381::G2Affine; + let p1 = G2Affine::from_compressed_be(&KZG_G2_SETUP_BYTES_COMPRESSED).unwrap(); + let p2 = G2Affine::from_uncompressed_unchecked_be(&KZG_G2_SETUP_BYTES).unwrap(); + assert_eq!(p1, p2); +} diff --git a/crates/types/batch/src/blob_consistency/mod.rs b/crates/types/batch/src/blob_consistency/mod.rs index 6e7ca74e..9757f51a 100644 --- a/crates/types/batch/src/blob_consistency/mod.rs +++ b/crates/types/batch/src/blob_consistency/mod.rs @@ -2,10 +2,11 @@ use alloy_primitives::{B256 as H256, U256}; use openvm_pairing::bls12_381::Scalar; +mod constants; mod openvm; pub use openvm::point_evaluation; -pub use openvm::{EccToPairing, kzg_to_versioned_hash, verify_kzg_proof}; +pub use openvm::{ToIntrinsic, kzg_to_versioned_hash, verify_kzg_proof}; // Number of bytes in a u256. pub const N_BYTES_U256: usize = 32; diff --git a/crates/types/batch/src/blob_consistency/openvm.rs b/crates/types/batch/src/blob_consistency/openvm.rs index 3fdb6180..096c7941 100644 --- a/crates/types/batch/src/blob_consistency/openvm.rs +++ b/crates/types/batch/src/blob_consistency/openvm.rs @@ -1,3 +1,4 @@ +use std::ops::{AddAssign, MulAssign}; use std::sync::LazyLock; use algebra::{Field, IntMod}; @@ -10,6 +11,8 @@ use openvm_ecc_guest::{AffinePoint, CyclicGroup, msm, weierstrass::WeierstrassPo use openvm_pairing::bls12_381::{Bls12_381, Fp, Fp2, G1Affine, G2Affine, Scalar}; use openvm_pairing_guest::{algebra, pairing::PairingCheck}; +use crate::blob_consistency::constants::KZG_G2_SETUP_BYTES; + use super::{BLOB_WIDTH, LOG_BLOB_WIDTH}; static BLS_MODULUS: LazyLock = LazyLock::new(|| U256::from_le_bytes(Scalar::MODULUS)); @@ -22,11 +25,15 @@ static ROOTS_OF_UNITY: LazyLock> = LazyLock::new(|| { let exponent = (modulus - U256::from(1)) / U256::from(4096); let root_of_unity = pow_bytes(&primitive_root_of_unity, &exponent.to_be_bytes::<32>()); - let ascending_order: Vec<_> = std::iter::successors(Some(::ONE), |x| { - Some(x.clone() * root_of_unity.clone()) - }) - .take(BLOB_WIDTH) - .collect(); + let mut ascending_order: Vec = Vec::new(); + ascending_order.resize(BLOB_WIDTH, ::ZERO); + ascending_order[0] = ::ONE; // First element should be 1 + + for i in 1..BLOB_WIDTH { + let (left, right) = ascending_order.split_at_mut(i); + right[0].add_assign(&left[left.len() - 1]); + right[0].mul_assign(&root_of_unity); + } (0..BLOB_WIDTH) .map(|i| { @@ -36,77 +43,51 @@ static ROOTS_OF_UNITY: LazyLock> = LazyLock::new(|| { .collect() }); -static G2_GENERATOR: LazyLock = LazyLock::new(|| Bls12_381_G2::generator().convert()); +static G2_GENERATOR: LazyLock = + LazyLock::new(|| Bls12_381_G2::generator().to_intrinsic()); static KZG_G2_SETUP: LazyLock = LazyLock::new(|| { - // Use the second G2 field in kzg setup (G2[1]), - // the value of this G2 field is: - // b5bfd7dd8cdeb128 - // 843bc287230af389 - // 26187075cbfbefa8 - // 1009a2ce615ac53d - // 2914e5870cb452d2 - // afaaab24f3499f72 - // 185cbfee53492714 - // 734429b7b38608e2 - // 3926c911cceceac9 - // a36851477ba4c60b - // 087041de621000ed - // c98edada20c1def2 - // extracted from https://github.com/ethereum/c-kzg-4844/blob/81a8949f29d27d225ca74ebb4e9061bdd100560a/src/trusted_setup.txt#L4100 - const KZG_G2_SETUP_BYTES: [u8; 96] = [ - 0xb5, 0xbf, 0xd7, 0xdd, 0x8c, 0xde, 0xb1, 0x28, 0x84, 0x3b, 0xc2, 0x87, 0x23, 0x0a, 0xf3, - 0x89, 0x26, 0x18, 0x70, 0x75, 0xcb, 0xfb, 0xef, 0xa8, 0x10, 0x09, 0xa2, 0xce, 0x61, 0x5a, - 0xc5, 0x3d, 0x29, 0x14, 0xe5, 0x87, 0x0c, 0xb4, 0x52, 0xd2, 0xaf, 0xaa, 0xab, 0x24, 0xf3, - 0x49, 0x9f, 0x72, 0x18, 0x5c, 0xbf, 0xee, 0x53, 0x49, 0x27, 0x14, 0x73, 0x44, 0x29, 0xb7, - 0xb3, 0x86, 0x08, 0xe2, 0x39, 0x26, 0xc9, 0x11, 0xcc, 0xec, 0xea, 0xc9, 0xa3, 0x68, 0x51, - 0x47, 0x7b, 0xa4, 0xc6, 0x0b, 0x08, 0x70, 0x41, 0xde, 0x62, 0x10, 0x00, 0xed, 0xc9, 0x8e, - 0xda, 0xda, 0x20, 0xc1, 0xde, 0xf2, - ]; - - Bls12_381_G2::from_compressed_be(&KZG_G2_SETUP_BYTES) + Bls12_381_G2::from_uncompressed_unchecked_be(&KZG_G2_SETUP_BYTES) .expect("kzg G2 setup bytes") - .convert() + .to_intrinsic() }); /// The version for KZG as per EIP-4844. const VERSIONED_HASH_VERSION_KZG: u8 = 1; -/// Helper trait that provides functionality to convert types from [`openvm_ecc_guest`] to -/// [`openvm_pairing_guest`]. -pub trait EccToPairing { - /// The desired converted type from [`openvm_pairing_guest`]. - type PairingType; +/// Helper trait that provides functionality to convert the given type from native to the desired intrinsic type +pub trait ToIntrinsic { + /// The desired intrinsic type + type IntrinsicType; - /// Convert the given type from [`openvm_ecc_guest`] to the desired type from - /// [`openvm_pairing_guest`]. - fn convert(&self) -> Self::PairingType; + /// Convert the given type from native to the desired intrinsic type + fn to_intrinsic(&self) -> Self::IntrinsicType; } -impl EccToPairing for Bls12_381_Fq { - type PairingType = Fp; +impl ToIntrinsic for Bls12_381_Fq { + type IntrinsicType = Fp; - fn convert(&self) -> Self::PairingType { + fn to_intrinsic(&self) -> Self::IntrinsicType { let bytes = self.to_bytes(); Fp::from_le_bytes_unchecked(&bytes) } } -impl EccToPairing for Bls12_381_G1 { - type PairingType = G1Affine; +impl ToIntrinsic for Bls12_381_G1 { + type IntrinsicType = G1Affine; - fn convert(&self) -> Self::PairingType { - G1Affine::from_xy_unchecked(self.x.convert(), self.y.convert()) + fn to_intrinsic(&self) -> Self::IntrinsicType { + G1Affine::from_xy_unchecked(self.x.to_intrinsic(), self.y.to_intrinsic()) } } -impl EccToPairing for Bls12_381_G2 { - type PairingType = G2Affine; +impl ToIntrinsic for Bls12_381_G2 { + type IntrinsicType = G2Affine; - fn convert(&self) -> Self::PairingType { + fn to_intrinsic(&self) -> Self::IntrinsicType { G2Affine::from_xy_unchecked( - Fp2::new(self.x.c0.convert(), self.x.c1.convert()), - Fp2::new(self.y.c0.convert(), self.y.c1.convert()), + Fp2::new(self.x.c0.to_intrinsic(), self.x.c1.to_intrinsic()), + Fp2::new(self.y.c0.to_intrinsic(), self.y.c1.to_intrinsic()), ) } } @@ -236,10 +217,10 @@ mod test { let y = Scalar::from_be_bytes_unchecked(y.as_ref()); let commitment = Bls12_381_G1::from_compressed_be(commitment.to_bytes().as_ref()) .unwrap() - .convert(); + .to_intrinsic(); let proof = Bls12_381_G1::from_compressed_be(proof.to_bytes().as_ref()) .unwrap() - .convert(); + .to_intrinsic(); let proof_ok = verify_kzg_proof(z, y, commitment, proof); assert!(proof_ok, "verify failed"); } diff --git a/crates/types/batch/src/builder/v7.rs b/crates/types/batch/src/builder/v7.rs index c12aa303..8fd3dc2b 100644 --- a/crates/types/batch/src/builder/v7.rs +++ b/crates/types/batch/src/builder/v7.rs @@ -6,7 +6,7 @@ use types_base::public_inputs::batch::BatchInfo; use crate::{ BatchHeader, PayloadV7, blob_consistency::{ - BlobPolynomial, EccToPairing, N_BLOB_BYTES, kzg_to_versioned_hash, verify_kzg_proof, + BlobPolynomial, N_BLOB_BYTES, ToIntrinsic, kzg_to_versioned_hash, verify_kzg_proof, }, payload::{Envelope, Payload}, }; @@ -63,10 +63,10 @@ impl super::BatchInfoBuilder for GenericBatchInfoBuilderV7

{ let proof_ok = { let commitment = Bls12_381_G1::from_compressed_be(&kzg_commitment) .expect("kzg commitment") - .convert(); + .to_intrinsic(); let proof = Bls12_381_G1::from_compressed_be(&kzg_proof) .expect("kzg proof") - .convert(); + .to_intrinsic(); verify_kzg_proof(challenge, evaluation, commitment, proof) }; assert!(proof_ok, "pairing fail!"); diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index c1ab6081..b02545f2 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -8,7 +8,7 @@ use crate::{ BatchInfoBuilder, BatchInfoBuilderV6, BatchInfoBuilderV7, BatchInfoBuilderV8, BuilderArgsV6, BuilderArgsV7, BuilderArgsV8, }, - header::{ArchivedReferenceHeader, ReferenceHeader}, + header::ReferenceHeader, }; /// Simply rewrap byte48 to avoid unnecessary dep diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index 64a35520..f80008a5 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -1,14 +1,18 @@ -use crate::ChunkWitness; +use crate::{ChunkWitness, types::ChunkExt}; use sbv_core::verifier::{self, VerifyResult}; use sbv_helpers::manually_drop_on_zkvm; use sbv_primitives::{ - B256, BlockWitness, + B256, BlockWitness, U256, chainspec::{Chain, build_chain_spec_force_hardfork}, hardforks::Hardfork, + types::{ + consensus::BlockHeader, + reth::primitives::{Block, RecoveredBlock}, + }, }; use types_base::{ fork_name::ForkName, - public_inputs::chunk::{ChunkExt, ChunkInfo}, + public_inputs::chunk::{BlockContextV2, ChunkInfo}, }; /// `compression_ratios` can be `None` in host mode. @@ -68,10 +72,50 @@ pub fn execute(witness: &ChunkWitness) -> Result { initial_block_number: blocks[0].header().number, prev_msg_queue_hash: witness.prev_msg_queue_hash.into(), post_msg_queue_hash, - block_ctxs: blocks.iter().map(Into::into).collect(), + block_ctxs: blocks.iter().map(block_to_context).collect(), }; println!("chunk_info = {:#?}", chunk_info); Ok(chunk_info) } + +fn block_to_context(block: &RecoveredBlock) -> BlockContextV2 { + BlockContextV2 { + timestamp: block.timestamp, + gas_limit: block.gas_limit, + base_fee: U256::from(block.base_fee_per_gas().expect("base_fee_expected")), + num_txs: u16::try_from(block.body().transactions.len()).expect("num txs u16"), + num_l1_msgs: u16::try_from( + block + .body() + .transactions + .iter() + .filter(|tx| tx.is_l1_message()) + .count(), + ) + .expect("num l1 msgs u16"), + } +} + +/* +impl From<&RecoveredBlock> for BlockContextV2 { + fn from(block: &RecoveredBlock) -> BlockContextV2 { + BlockContextV2 { + timestamp: block.timestamp, + gas_limit: block.gas_limit, + base_fee: U256::from(block.base_fee_per_gas().expect("base_fee_expected")), + num_txs: u16::try_from(block.body().transactions.len()).expect("num txs u16"), + num_l1_msgs: u16::try_from( + block + .body() + .transactions + .iter() + .filter(|tx| tx.is_l1_message()) + .count(), + ) + .expect("num l1 msgs u16"), + } + } +} + */ diff --git a/crates/types/chunk/src/lib.rs b/crates/types/chunk/src/lib.rs index 49cecba7..b40c09a1 100644 --- a/crates/types/chunk/src/lib.rs +++ b/crates/types/chunk/src/lib.rs @@ -1,3 +1,4 @@ +mod types; mod witness; pub use witness::{ArchivedChunkWitness, ChunkWitness}; diff --git a/crates/types/chunk/src/types.rs b/crates/types/chunk/src/types.rs new file mode 100644 index 00000000..6e3afe7e --- /dev/null +++ b/crates/types/chunk/src/types.rs @@ -0,0 +1,156 @@ +use std::ops::Deref; + +use sbv_primitives::{ + B256, U256, + types::{ + eips::Encodable2718, + reth::primitives::{Block, RecoveredBlock, SignedTransaction, TransactionSigned}, + }, +}; + +// FIXME as alloy-primitive +use tiny_keccak::{Hasher, Keccak}; + +pub trait ChunkExt { + /// Hash the transaction bytes. + /// + /// Only L2 transactions are considered while computing the digest. + fn tx_bytes_hash_in(&self, rlp_buffer: &mut Vec) -> (usize, B256); + /// Data hash before Euclid V2 + fn legacy_data_hash(&self) -> B256; + /// Rolling message queue hash after Euclid V2 + fn rolling_msg_queue_hash(&self, rolling_hash: B256) -> B256; +} + +impl]>> ChunkExt for T { + #[inline] + fn tx_bytes_hash_in(&self, rlp_buffer: &mut Vec) -> (usize, B256) { + let blocks = self.as_ref(); + blocks + .iter() + .flat_map(|b| b.body().transactions.iter()) + .tx_bytes_hash_in(rlp_buffer.as_mut()) + } + + #[inline] + fn legacy_data_hash(&self) -> B256 { + let blocks = self.as_ref(); + + let mut data_hasher = Keccak::v256(); + for block in blocks.iter() { + block.legacy_hash_da_header(&mut data_hasher); + } + for block in blocks.iter() { + block.legacy_hash_l1_msg(&mut data_hasher); + } + let mut data_hash = B256::ZERO; + data_hasher.finalize(&mut data_hash.0); + data_hash + } + + #[inline] + fn rolling_msg_queue_hash(&self, mut rolling_hash: B256) -> B256 { + let blocks = self.as_ref(); + for block in blocks.iter() { + rolling_hash = block.hash_msg_queue(&rolling_hash); + } + rolling_hash + } +} + +/// Helper trait for hashing transaction bytes. +trait TxBytesHashExt { + /// Hash the transaction bytes. + /// + /// Only L2 transactions are considered while computing the digest. + fn tx_bytes_hash_in(self, rlp_buffer: &mut Vec) -> (usize, B256); +} + +impl<'a, I: IntoIterator> TxBytesHashExt for I +where + I: IntoIterator, +{ + #[inline] + fn tx_bytes_hash_in(self, rlp_buffer: &mut Vec) -> (usize, B256) { + use tiny_keccak::{Hasher, Keccak}; + + let mut tx_bytes_hasher = Keccak::v256(); + let mut len = 0; + + // Ignore L1 msg txs. + for tx in self.into_iter().filter(|&tx| !tx.is_l1_message()) { + tx.encode_2718(rlp_buffer); + len += rlp_buffer.len(); + tx_bytes_hasher.update(rlp_buffer); + rlp_buffer.clear(); + } + + let mut tx_bytes_hash = B256::ZERO; + tx_bytes_hasher.finalize(&mut tx_bytes_hash.0); + (len, tx_bytes_hash) + } +} + +/// Chunk related extension methods for Block +trait BlockChunkExt { + /// Hash the header of the block + fn legacy_hash_da_header(&self, hasher: &mut impl tiny_keccak::Hasher); + /// Hash the l1 messages of the block + fn legacy_hash_l1_msg(&self, hasher: &mut impl Hasher); + /// Hash the l1 messages of the block + fn hash_msg_queue(&self, initial_queue_hash: &B256) -> B256; +} + +impl BlockChunkExt for RecoveredBlock { + #[inline] + fn legacy_hash_da_header(&self, hasher: &mut impl Hasher) { + hasher.update(&self.number.to_be_bytes()); + hasher.update(&self.timestamp.to_be_bytes()); + hasher.update( + &U256::from_limbs([self.base_fee_per_gas.unwrap_or_default(), 0, 0, 0]) + .to_be_bytes::<{ U256::BYTES }>(), + ); + hasher.update(&self.gas_limit.to_be_bytes()); + // FIXME: l1 tx could be skipped, the actual tx count needs to be calculated + hasher.update(&(self.body().transactions.len() as u16).to_be_bytes()); + } + + #[inline] + fn legacy_hash_l1_msg(&self, hasher: &mut impl Hasher) { + for tx in self + .body() + .transactions + .iter() + .filter(|tx| tx.is_l1_message()) + { + hasher.update(tx.tx_hash().as_slice()) + } + } + + #[inline] + fn hash_msg_queue(&self, initial_queue_hash: &B256) -> B256 { + let mut rolling_hash = *initial_queue_hash; + for tx in self + .body() + .transactions + .iter() + .filter(|tx| tx.is_l1_message()) + { + let mut hasher = Keccak::v256(); + hasher.update(rolling_hash.as_slice()); + hasher.update(tx.tx_hash().as_slice()); + + hasher.finalize(rolling_hash.as_mut_slice()); + + // clear last 32 bits, i.e. 4 bytes. + // https://github.com/scroll-tech/da-codec/blob/26dc8d575244560611548fada6a3a2745c60fe83/encoding/da.go#L817-L825 + // see also https://github.com/scroll-tech/da-codec/pull/42 + rolling_hash.0[28] = 0; + rolling_hash.0[29] = 0; + rolling_hash.0[30] = 0; + rolling_hash.0[31] = 0; + } + + rolling_hash + } +} From 2b9bec0e6001018dbfb239879218d20798ae26f8 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Wed, 20 Aug 2025 01:45:45 +0000 Subject: [PATCH 18/84] build --- Makefile | 5 ++++- scripts/build-and-run.sh | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 2538ea01..8f81f3d1 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,9 @@ export RUST_BACKTRACE RUST_LOG ?= off,scroll_zkvm_integration=debug,scroll_zkvm_verifier=debug,scroll_zkvm_prover=debug,openvm_circuit=debug export RUST_LOG +OPENVM_RUST_TOOLCHAIN ?= nightly-2025-08-08 +export OPENVM_RUST_TOOLCHAIN + TESTDATA_PATH := crates/integration/testdata/phase2 CHUNK_PROOF := 1-4 @@ -33,7 +36,7 @@ build-guest: sh build-guest.sh build-guest-local: - bash build-guest-actions-entrypoint.sh + cargo run --release -p scroll-zkvm-build-guest clean-build-guest: clean-guest build-guest diff --git a/scripts/build-and-run.sh b/scripts/build-and-run.sh index 73b1fe9a..a6e95b80 100644 --- a/scripts/build-and-run.sh +++ b/scripts/build-and-run.sh @@ -1,3 +1,3 @@ set -euxo pipefail -make build-guest 2>&1 | tee build.log +make build-guest-local 2>&1 | tee build.log make test-e2e-bundle 2>&1 | tee e2e.log From 4f32af3ad8e4af0bcfcd4bd233712ddc0ed92313 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Wed, 20 Aug 2025 01:53:01 +0000 Subject: [PATCH 19/84] build --- Cargo.lock | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 88c033f4..9fc2e4e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1873,14 +1873,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "encoder-standard" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/da-codec.git?rev=2cfec8c#2cfec8c99547b68dc64e2b020fa2b83cfb9c0e99" -dependencies = [ - "zstd", -] - [[package]] name = "encoder-standard" version = "0.1.0" @@ -6665,7 +6657,7 @@ dependencies = [ "alloy-evm", "alloy-primitives", "auto_impl", - "encoder-standard 0.1.0 (git+https://github.com/scroll-tech/da-codec)", + "encoder-standard", "revm 27.1.0", "revm-scroll", "scroll-alloy-consensus", @@ -8018,11 +8010,11 @@ checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1" [[package]] name = "vm-zstd" version = "0.1.1" -source = "git+https://github.com/scroll-tech/rust-zstd-decompressor.git?branch=master#d47c5fb58a1ae8412c721b428a624766cbefa97e" +source = "git+https://github.com/scroll-tech/rust-zstd-decompressor.git?branch=master#b0273278316245fef733df54cc29ee3baa3d7382" dependencies = [ "anyhow", "bitstream-io", - "encoder-standard 0.1.0 (git+https://github.com/scroll-tech/da-codec.git?rev=2cfec8c)", + "encoder-standard", "itertools 0.11.0", "serde", "strum 0.25.0", From e8faa967dc7353a737e59335104f34a2b0e56f5b Mon Sep 17 00:00:00 2001 From: Akase Haruka Date: Wed, 20 Aug 2025 14:08:46 +0800 Subject: [PATCH 20/84] fix: remove tiny-keccak (#168) --- Cargo.lock | 1 - crates/types/chunk/Cargo.toml | 1 - crates/types/chunk/src/types.rs | 91 ++++++++++++++++++--------------- 3 files changed, 50 insertions(+), 43 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9fc2e4e2..3945520e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6936,7 +6936,6 @@ dependencies = [ "sbv-trie", "scroll-zkvm-types-base", "serde", - "tiny-keccak", ] [[package]] diff --git a/crates/types/chunk/Cargo.toml b/crates/types/chunk/Cargo.toml index 2bf201c2..a84b1b18 100644 --- a/crates/types/chunk/Cargo.toml +++ b/crates/types/chunk/Cargo.toml @@ -19,7 +19,6 @@ sbv-primitives = { workspace = true, features = ["hardforks", "scroll-hardforks" sbv-kv = { workspace = true } serde.workspace = true itertools.workspace = true -tiny-keccak.workspace = true openvm = { workspace = true, features = ["std"] } openvm-rv32im-guest = { workspace = true } diff --git a/crates/types/chunk/src/types.rs b/crates/types/chunk/src/types.rs index 6e3afe7e..975cf1da 100644 --- a/crates/types/chunk/src/types.rs +++ b/crates/types/chunk/src/types.rs @@ -1,5 +1,7 @@ use std::ops::Deref; +use alloy_primitives::keccak256; +use sbv_helpers::manually_drop_on_zkvm; use sbv_primitives::{ B256, U256, types::{ @@ -8,8 +10,11 @@ use sbv_primitives::{ }, }; -// FIXME as alloy-primitive -use tiny_keccak::{Hasher, Keccak}; +const LEGACY_DA_HEADER_LEN: usize = size_of::() // block number + + size_of::() // timestamp + + U256::BYTES // base fee per gas + + size_of::() // gas limit + + size_of::(); // l1 tx count pub trait ChunkExt { /// Hash the transaction bytes. @@ -29,23 +34,35 @@ impl]>> ChunkExt for T { blocks .iter() .flat_map(|b| b.body().transactions.iter()) - .tx_bytes_hash_in(rlp_buffer.as_mut()) + .tx_bytes_hash_in(rlp_buffer) } #[inline] fn legacy_data_hash(&self) -> B256 { let blocks = self.as_ref(); - let mut data_hasher = Keccak::v256(); + let num_l1_txs: usize = blocks + .iter() + .map(|b| { + b.body() + .transactions + .iter() + .filter(|tx| tx.is_l1_message()) + .count() + }) + .sum(); + + let mut buffer = manually_drop_on_zkvm!(Vec::with_capacity( + blocks.len() * LEGACY_DA_HEADER_LEN + num_l1_txs * size_of::(), + )); + for block in blocks.iter() { - block.legacy_hash_da_header(&mut data_hasher); + block.encode_legacy_da_header(&mut buffer); } for block in blocks.iter() { - block.legacy_hash_l1_msg(&mut data_hasher); + block.encode_legacy_l1_msg(&mut buffer); } - let mut data_hash = B256::ZERO; - data_hasher.finalize(&mut data_hash.0); - data_hash + keccak256(&*buffer) } #[inline] @@ -66,82 +83,74 @@ trait TxBytesHashExt { fn tx_bytes_hash_in(self, rlp_buffer: &mut Vec) -> (usize, B256); } -impl<'a, I: IntoIterator> TxBytesHashExt for I -where - I: IntoIterator, +impl<'a, I: Iterator> TxBytesHashExt for I { #[inline] fn tx_bytes_hash_in(self, rlp_buffer: &mut Vec) -> (usize, B256) { - use tiny_keccak::{Hasher, Keccak}; - - let mut tx_bytes_hasher = Keccak::v256(); - let mut len = 0; - + rlp_buffer.clear(); // Ignore L1 msg txs. - for tx in self.into_iter().filter(|&tx| !tx.is_l1_message()) { + for tx in self.filter(|&tx| !tx.is_l1_message()) { tx.encode_2718(rlp_buffer); - len += rlp_buffer.len(); - tx_bytes_hasher.update(rlp_buffer); - rlp_buffer.clear(); } - - let mut tx_bytes_hash = B256::ZERO; - tx_bytes_hasher.finalize(&mut tx_bytes_hash.0); - (len, tx_bytes_hash) + let hash = keccak256(&rlp_buffer); + rlp_buffer.clear(); + (rlp_buffer.len(), hash) } } /// Chunk related extension methods for Block trait BlockChunkExt { /// Hash the header of the block - fn legacy_hash_da_header(&self, hasher: &mut impl tiny_keccak::Hasher); + fn encode_legacy_da_header(&self, buffer: &mut Vec); /// Hash the l1 messages of the block - fn legacy_hash_l1_msg(&self, hasher: &mut impl Hasher); + fn encode_legacy_l1_msg(&self, buffer: &mut Vec); /// Hash the l1 messages of the block fn hash_msg_queue(&self, initial_queue_hash: &B256) -> B256; } impl BlockChunkExt for RecoveredBlock { #[inline] - fn legacy_hash_da_header(&self, hasher: &mut impl Hasher) { - hasher.update(&self.number.to_be_bytes()); - hasher.update(&self.timestamp.to_be_bytes()); - hasher.update( + fn encode_legacy_da_header(&self, buffer: &mut Vec) { + buffer.extend_from_slice(&self.number.to_be_bytes()); + buffer.extend_from_slice(&self.timestamp.to_be_bytes()); + buffer.extend_from_slice( &U256::from_limbs([self.base_fee_per_gas.unwrap_or_default(), 0, 0, 0]) .to_be_bytes::<{ U256::BYTES }>(), ); - hasher.update(&self.gas_limit.to_be_bytes()); + buffer.extend_from_slice(&self.gas_limit.to_be_bytes()); // FIXME: l1 tx could be skipped, the actual tx count needs to be calculated - hasher.update(&(self.body().transactions.len() as u16).to_be_bytes()); + buffer.extend_from_slice(&(self.body().transactions.len() as u16).to_be_bytes()); } #[inline] - fn legacy_hash_l1_msg(&self, hasher: &mut impl Hasher) { + fn encode_legacy_l1_msg(&self, buffer: &mut Vec) { for tx in self .body() .transactions .iter() - .filter(|tx| tx.is_l1_message()) + .filter_map(|tx| tx.as_l1_message()) { - hasher.update(tx.tx_hash().as_slice()) + buffer.extend_from_slice(tx.hash_ref().as_ref()); } } #[inline] fn hash_msg_queue(&self, initial_queue_hash: &B256) -> B256 { let mut rolling_hash = *initial_queue_hash; + + let mut buffer = [0u8; { size_of::() * 2 }]; + buffer[..32].copy_from_slice(rolling_hash.as_ref()); + for tx in self .body() .transactions .iter() .filter(|tx| tx.is_l1_message()) { - let mut hasher = Keccak::v256(); - hasher.update(rolling_hash.as_slice()); - hasher.update(tx.tx_hash().as_slice()); - - hasher.finalize(rolling_hash.as_mut_slice()); + buffer[..size_of::()].copy_from_slice(rolling_hash.as_ref()); + buffer[size_of::()..].copy_from_slice(tx.tx_hash().as_ref()); + rolling_hash = keccak256(&buffer); // clear last 32 bits, i.e. 4 bytes. // https://github.com/scroll-tech/da-codec/blob/26dc8d575244560611548fada6a3a2745c60fe83/encoding/da.go#L817-L825 // see also https://github.com/scroll-tech/da-codec/pull/42 From 6af67738ffd8365364cdf577c1f05e7d71ce07a5 Mon Sep 17 00:00:00 2001 From: lightsing Date: Wed, 20 Aug 2025 14:38:24 +0800 Subject: [PATCH 21/84] fix merge --- Cargo.lock | 132 +++++++++++------- .../chunk-circuit/chunk_exe_commit.rs | 2 +- crates/types/base/Cargo.toml | 3 - crates/types/base/src/public_inputs/chunk.rs | 2 - crates/types/chunk/Cargo.toml | 7 +- crates/types/chunk/src/execute.rs | 14 +- crates/types/chunk/src/lib.rs | 2 +- crates/types/chunk/src/types.rs | 117 ++++++++++++++-- .../chunk => chunk/src/types}/validium.rs | 0 crates/types/chunk/src/witness.rs | 65 ++------- 10 files changed, 203 insertions(+), 141 deletions(-) rename crates/types/{base/src/public_inputs/chunk => chunk/src/types}/validium.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 95e4dca1..648fc553 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -370,7 +370,7 @@ dependencies = [ "alloy-rlp", "alloy-serde 1.0.24", "alloy-sol-types", - "itertools 0.13.0", + "itertools 0.14.0", "serde", "serde_json", "serde_with", @@ -971,6 +971,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" @@ -3426,7 +3446,7 @@ dependencies = [ [[package]] name = "openvm-algebra-circuit" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "derive-new 0.6.0", "derive_more 1.0.0", @@ -3493,7 +3513,7 @@ dependencies = [ [[package]] name = "openvm-algebra-transpiler" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "openvm-algebra-guest", "openvm-instructions", @@ -3507,7 +3527,7 @@ dependencies = [ [[package]] name = "openvm-bigint-circuit" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "derive-new 0.6.0", "derive_more 1.0.0", @@ -3538,7 +3558,7 @@ dependencies = [ [[package]] name = "openvm-bigint-transpiler" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "openvm-bigint-guest", "openvm-instructions", @@ -3553,11 +3573,11 @@ dependencies = [ [[package]] name = "openvm-build" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "cargo_metadata 0.18.1", "eyre", - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", "serde", "serde_json", ] @@ -3565,7 +3585,7 @@ dependencies = [ [[package]] name = "openvm-circuit" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "backtrace", "cfg-if", @@ -3596,7 +3616,7 @@ dependencies = [ [[package]] name = "openvm-circuit-derive" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "itertools 0.14.0", "quote", @@ -3606,7 +3626,7 @@ dependencies = [ [[package]] name = "openvm-circuit-primitives" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "derive-new 0.6.0", "itertools 0.14.0", @@ -3621,7 +3641,7 @@ dependencies = [ [[package]] name = "openvm-circuit-primitives-derive" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "itertools 0.14.0", "quote", @@ -3631,7 +3651,7 @@ dependencies = [ [[package]] name = "openvm-continuations" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "derivative", "openvm-circuit", @@ -3656,7 +3676,7 @@ dependencies = [ [[package]] name = "openvm-ecc-circuit" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "derive-new 0.6.0", "derive_more 1.0.0", @@ -3713,7 +3733,7 @@ dependencies = [ [[package]] name = "openvm-ecc-transpiler" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "openvm-ecc-guest", "openvm-instructions", @@ -3727,7 +3747,7 @@ dependencies = [ [[package]] name = "openvm-instructions" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "backtrace", "derive-new 0.6.0", @@ -3744,7 +3764,7 @@ dependencies = [ [[package]] name = "openvm-instructions-derive" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "quote", "syn 2.0.101", @@ -3753,7 +3773,7 @@ dependencies = [ [[package]] name = "openvm-keccak256-circuit" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "derive-new 0.6.0", "derive_more 1.0.0", @@ -3787,7 +3807,7 @@ dependencies = [ [[package]] name = "openvm-keccak256-transpiler" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -3809,7 +3829,7 @@ dependencies = [ [[package]] name = "openvm-mod-circuit-builder" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", @@ -3828,7 +3848,7 @@ dependencies = [ [[package]] name = "openvm-native-circuit" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "derive-new 0.6.0", "derive_more 1.0.0", @@ -3855,7 +3875,7 @@ dependencies = [ [[package]] name = "openvm-native-compiler" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "backtrace", "itertools 0.14.0", @@ -3879,7 +3899,7 @@ dependencies = [ [[package]] name = "openvm-native-compiler-derive" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "quote", "syn 2.0.101", @@ -3888,7 +3908,7 @@ dependencies = [ [[package]] name = "openvm-native-recursion" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "cfg-if", "itertools 0.14.0", @@ -3916,7 +3936,7 @@ dependencies = [ [[package]] name = "openvm-native-transpiler" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "openvm-instructions", "openvm-transpiler", @@ -3951,7 +3971,7 @@ dependencies = [ [[package]] name = "openvm-pairing-circuit" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "derive-new 0.6.0", "derive_more 1.0.0", @@ -4003,7 +4023,7 @@ dependencies = [ [[package]] name = "openvm-pairing-transpiler" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -4017,7 +4037,7 @@ dependencies = [ [[package]] name = "openvm-platform" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "openvm-custom-insn", "openvm-rv32im-guest", @@ -4036,7 +4056,7 @@ dependencies = [ [[package]] name = "openvm-poseidon2-air" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "derivative", "lazy_static", @@ -4053,7 +4073,7 @@ dependencies = [ [[package]] name = "openvm-rv32-adapters" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "derive-new 0.6.0", "itertools 0.14.0", @@ -4073,7 +4093,7 @@ dependencies = [ [[package]] name = "openvm-rv32im-circuit" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "derive-new 0.6.0", "derive_more 1.0.0", @@ -4106,7 +4126,7 @@ dependencies = [ [[package]] name = "openvm-rv32im-transpiler" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -4122,7 +4142,7 @@ dependencies = [ [[package]] name = "openvm-sdk" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "async-trait", "bitcode", @@ -4185,7 +4205,7 @@ dependencies = [ [[package]] name = "openvm-sha256-air" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "openvm-circuit-primitives", "openvm-stark-backend", @@ -4196,7 +4216,7 @@ dependencies = [ [[package]] name = "openvm-sha256-circuit" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "derive-new 0.6.0", "derive_more 1.0.0", @@ -4227,7 +4247,7 @@ dependencies = [ [[package]] name = "openvm-sha256-transpiler" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -4303,12 +4323,12 @@ dependencies = [ [[package]] name = "openvm-transpiler" version = "1.3.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0#5368d4756993fc1e51092499a816867cf4808de0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "elf", "eyre", "openvm-instructions", - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=5368d4756993fc1e51092499a816867cf4808de0)", + "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", "openvm-stark-backend", "rrs-lib", "thiserror 1.0.69", @@ -6555,6 +6575,7 @@ name = "scroll-zkvm-batch-circuit" version = "0.5.0" dependencies = [ "alloy-primitives", + "bincode 2.0.1", "bitcode", "c-kzg", "halo2curves-axiom 0.7.0", @@ -6613,6 +6634,7 @@ name = "scroll-zkvm-bundle-circuit" version = "0.5.0" dependencies = [ "alloy-primitives", + "bincode 2.0.1", "openvm", "openvm-algebra-guest", "openvm-keccak256-guest", @@ -6626,6 +6648,7 @@ dependencies = [ name = "scroll-zkvm-chunk-circuit" version = "0.5.0" dependencies = [ + "bincode 2.0.1", "k256 0.13.4 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", "openvm", "openvm-algebra-complex-macros", @@ -6688,7 +6711,7 @@ version = "0.5.0" dependencies = [ "alloy-primitives", "base64", - "bincode", + "bincode 1.3.3", "c-kzg", "eyre", "git-version", @@ -6725,7 +6748,7 @@ name = "scroll-zkvm-types" version = "0.5.0" dependencies = [ "base64", - "bincode", + "bincode 1.3.3", "c-kzg", "openvm-continuations", "openvm-native-recursion", @@ -6747,15 +6770,11 @@ version = "0.5.0" dependencies = [ "alloy-primitives", "alloy-serde 1.0.24", - "alloy-sol-types", - "ecies", "itertools 0.14.0", "rkyv", - "sbv-primitives", "serde", "sha2 0.10.9", "sha3", - "thiserror 2.0.12", "tiny-keccak", ] @@ -6764,6 +6783,7 @@ name = "scroll-zkvm-types-batch" version = "0.5.0" dependencies = [ "alloy-primitives", + "bincode 2.0.1", "c-kzg", "halo2curves-axiom 0.7.0", "itertools 0.14.0", @@ -6784,6 +6804,7 @@ name = "scroll-zkvm-types-bundle" version = "0.5.0" dependencies = [ "alloy-primitives", + "bincode 2.0.1", "itertools 0.14.0", "rkyv", "scroll-zkvm-types-base", @@ -6796,6 +6817,9 @@ name = "scroll-zkvm-types-chunk" version = "0.5.0" dependencies = [ "alloy-primitives", + "alloy-sol-types", + "bincode 2.0.1", + "ecies", "itertools 0.14.0", "openvm", "openvm-custom-insn", @@ -6809,7 +6833,7 @@ dependencies = [ "sbv-trie", "scroll-zkvm-types-base", "serde", - "tiny-keccak", + "thiserror 2.0.12", ] [[package]] @@ -6832,7 +6856,7 @@ name = "scroll-zkvm-verifier" version = "0.5.0" dependencies = [ "base64", - "bincode", + "bincode 1.3.3", "eyre", "itertools 0.14.0", "once_cell", @@ -7199,7 +7223,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a338d065044702bf751e87cf353daac63e2fc4c53a3e323cbcd98c603ee6e66c" dependencies = [ "ark-std 0.3.0", - "bincode", + "bincode 1.3.3", "ethereum-types", "getset", "halo2-base", @@ -7222,7 +7246,7 @@ version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03046db52868c1b60e8acffa0777ef6dc11ec1bbbb10b9eb612a871f69c8d3f6" dependencies = [ - "bincode", + "bincode 1.3.3", "serde", "sp1-primitives", ] @@ -7233,7 +7257,7 @@ version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6939d6b2f63e54e5fbd208a0293027608f22511741b62fe32b6f67f6c144e0c0" dependencies = [ - "bincode", + "bincode 1.3.3", "blake3", "cfg-if", "hex", @@ -7833,6 +7857,12 @@ dependencies = [ "syn 1.0.109", ] +[[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.4" @@ -7878,6 +7908,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 = "vm-zstd" version = "0.1.1" diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index af7e9bef..5e33a697 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1071419318, 13542696, 228098146, 1154682103, 1049712254, 1415629403, 1604860768, 985830407]; +pub const COMMIT: [u32; 8] = [136930415, 1095265284, 976847809, 1413917046, 896767242, 368179360, 662516329, 337950770]; diff --git a/crates/types/base/Cargo.toml b/crates/types/base/Cargo.toml index ee3c0a80..93692cbf 100644 --- a/crates/types/base/Cargo.toml +++ b/crates/types/base/Cargo.toml @@ -10,8 +10,6 @@ version.workspace = true [dependencies] alloy-primitives = { workspace = true } alloy-serde.workspace = true -alloy-sol-types.workspace = true -ecies.workspace = true rkyv.workspace = true #sbv-primitives = { workspace = true, features = ["scroll-consensus-types", "scroll-reth-types", "scroll-reth-primitives-types", "reth-primitives-types"] } serde.workspace = true @@ -19,7 +17,6 @@ itertools.workspace = true sha3 = "0.10.8" sha2 = "0.10.8" tiny-keccak.workspace = true -thiserror.workspace = true [features] default = [] diff --git a/crates/types/base/src/public_inputs/chunk.rs b/crates/types/base/src/public_inputs/chunk.rs index a95186b7..ef2671fe 100644 --- a/crates/types/base/src/public_inputs/chunk.rs +++ b/crates/types/base/src/public_inputs/chunk.rs @@ -4,8 +4,6 @@ use crate::{ }; use alloy_primitives::{B256, U256}; -pub mod validium; - /// Number of bytes used to serialise [`BlockContextV2`]. pub const SIZE_BLOCK_CTX: usize = 52; diff --git a/crates/types/chunk/Cargo.toml b/crates/types/chunk/Cargo.toml index a84b1b18..5e37c183 100644 --- a/crates/types/chunk/Cargo.toml +++ b/crates/types/chunk/Cargo.toml @@ -8,9 +8,12 @@ repository.workspace = true version.workspace = true [dependencies] -revm-precompile = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v74", default-features=false, features = ["kzg-rs", "libsecp256k1"] } alloy-primitives = { workspace = true, features = ["native-keccak"] } +alloy-sol-types.workspace = true bincode = { workspace = true } +ecies.workspace = true +itertools.workspace = true +revm-precompile = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v74", default-features=false, features = ["kzg-rs", "libsecp256k1"] } rkyv.workspace = true sbv-trie = { workspace = true } sbv-helpers.workspace = true @@ -18,7 +21,7 @@ sbv-core = { workspace = true } sbv-primitives = { workspace = true, features = ["hardforks", "scroll-hardforks", "scroll-revm-types"] } sbv-kv = { workspace = true } serde.workspace = true -itertools.workspace = true +thiserror.workspace = true openvm = { workspace = true, features = ["std"] } openvm-rv32im-guest = { workspace = true } diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index ccbdcd2d..a7f10107 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -1,4 +1,4 @@ -use crate::{ChunkWitness, types::ChunkExt}; +use crate::{ChunkWitness, types::{ChunkExt, ChunkWitnessExt}}; use sbv_core::verifier::{self, VerifyResult}; use sbv_helpers::manually_drop_on_zkvm; use sbv_primitives::{ @@ -49,18 +49,6 @@ pub fn execute(witness: &ChunkWitness) -> Result { let mut rlp_buffer = manually_drop_on_zkvm!(Vec::with_capacity(2048)); let (tx_data_length, tx_data_digest) = blocks.tx_bytes_hash_in(rlp_buffer.as_mut()); - let data_hash = if witness.fork_name < ArchivedForkName::EuclidV2 { - blocks.legacy_data_hash() - } else { - B256::ZERO - }; - - let post_msg_queue_hash = if witness.fork_name >= ArchivedForkName::EuclidV2 { - blocks.rolling_msg_queue_hash(witness.prev_msg_queue_hash.into()) - } else { - B256::ZERO - }; - let chunk_info = ChunkInfo { chain_id: chain.id(), prev_state_root: pre_state_root, diff --git a/crates/types/chunk/src/lib.rs b/crates/types/chunk/src/lib.rs index 3c3aaf69..b40c09a1 100644 --- a/crates/types/chunk/src/lib.rs +++ b/crates/types/chunk/src/lib.rs @@ -1,7 +1,7 @@ mod types; mod witness; -pub use witness::{ArchivedChunkWitness, ChunkWitness, ChunkWitnessExt}; +pub use witness::{ArchivedChunkWitness, ChunkWitness}; mod execute; pub use execute::execute; diff --git a/crates/types/chunk/src/types.rs b/crates/types/chunk/src/types.rs index 975cf1da..337e879f 100644 --- a/crates/types/chunk/src/types.rs +++ b/crates/types/chunk/src/types.rs @@ -1,6 +1,8 @@ +use std::iter; use std::ops::Deref; use alloy_primitives::keccak256; +use itertools::Itertools; use sbv_helpers::manually_drop_on_zkvm; use sbv_primitives::{ B256, U256, @@ -9,6 +11,12 @@ use sbv_primitives::{ reth::primitives::{Block, RecoveredBlock, SignedTransaction, TransactionSigned}, }, }; +use sbv_primitives::types::consensus::TxL1Message; +use types_base::fork_name::ForkName; +use crate::ChunkWitness; +use crate::types::validium::SecretKey; + +pub mod validium; const LEGACY_DA_HEADER_LEN: usize = size_of::() // block number + size_of::() // timestamp @@ -24,7 +32,10 @@ pub trait ChunkExt { /// Data hash before Euclid V2 fn legacy_data_hash(&self) -> B256; /// Rolling message queue hash after Euclid V2 - fn rolling_msg_queue_hash(&self, rolling_hash: B256) -> B256; + fn rolling_msg_queue_hash<'a, II, I>(&self, rolling_hash: B256, validium_txs: II) -> B256 + where + II: IntoIterator>, + I: IntoIterator; } impl]>> ChunkExt for T { @@ -66,10 +77,14 @@ impl]>> ChunkExt for T { } #[inline] - fn rolling_msg_queue_hash(&self, mut rolling_hash: B256) -> B256 { + fn rolling_msg_queue_hash<'a, II, I>(&self, mut rolling_hash: B256, validium_txs: II) -> B256 + where + II: IntoIterator>, + I: IntoIterator, + { let blocks = self.as_ref(); - for block in blocks.iter() { - rolling_hash = block.hash_msg_queue(&rolling_hash); + for (block, validium_txs) in blocks.iter().zip_eq(validium_txs) { + rolling_hash = block.hash_msg_queue(&rolling_hash, validium_txs); } rolling_hash } @@ -100,15 +115,30 @@ impl<'a, I: Iterator> TxBytesHashExt for I /// Chunk related extension methods for Block trait BlockChunkExt { + /// Get an iterator over L1 message transactions in the block. + fn l1_txs_iter(&self) -> impl Iterator; + /// Hash the header of the block fn encode_legacy_da_header(&self, buffer: &mut Vec); /// Hash the l1 messages of the block fn encode_legacy_l1_msg(&self, buffer: &mut Vec); /// Hash the l1 messages of the block - fn hash_msg_queue(&self, initial_queue_hash: &B256) -> B256; + fn hash_msg_queue(&self, initial_queue_hash: &B256, validium_txs: Option<(I, &SecretKey)>) -> B256 + where + I: IntoIterator; } impl BlockChunkExt for RecoveredBlock { + #[inline] + fn l1_txs_iter(&self) -> impl Iterator { + self + .body() + .transactions + .iter() + .filter_map(|tx| tx.as_l1_message()) + .map(|tx| tx.inner()) + } + #[inline] fn encode_legacy_da_header(&self, buffer: &mut Vec) { buffer.extend_from_slice(&self.number.to_be_bytes()); @@ -135,20 +165,18 @@ impl BlockChunkExt for RecoveredBlock { } #[inline] - fn hash_msg_queue(&self, initial_queue_hash: &B256) -> B256 { + fn hash_msg_queue(&self, initial_queue_hash: &B256, validium_txs: Option<(I, &SecretKey)>) -> B256 + where + I: IntoIterator, + { let mut rolling_hash = *initial_queue_hash; let mut buffer = [0u8; { size_of::() * 2 }]; buffer[..32].copy_from_slice(rolling_hash.as_ref()); - for tx in self - .body() - .transactions - .iter() - .filter(|tx| tx.is_l1_message()) - { + let mut hash_tx = |tx_hash: B256| { buffer[..size_of::()].copy_from_slice(rolling_hash.as_ref()); - buffer[size_of::()..].copy_from_slice(tx.tx_hash().as_ref()); + buffer[size_of::()..].copy_from_slice(tx_hash.as_ref()); rolling_hash = keccak256(&buffer); // clear last 32 bits, i.e. 4 bytes. @@ -158,8 +186,69 @@ impl BlockChunkExt for RecoveredBlock { rolling_hash.0[29] = 0; rolling_hash.0[30] = 0; rolling_hash.0[31] = 0; - } + }; + + if let Some((txs, secret_key)) = validium_txs { + for (validium_tx, tx_in_block) in txs.into_iter().zip_eq(self.l1_txs_iter()) { + match validium::decrypt(&validium_tx, secret_key) { + Ok(decrypted) => { + assert_eq!(decrypted, *tx_in_block); + } + Err(e) => { + eprintln!("{}", e); + } + } + + hash_tx(validium_tx.tx_hash()); + } + } else { + for tx in self.l1_txs_iter() { + hash_tx(tx.tx_hash()); + } + }; rolling_hash } } + +pub trait ChunkWitnessExt { + fn legacy_data_hash(&self, blocks: &[RecoveredBlock]) -> Option; + + fn rolling_msg_queue_hash(&self, blocks: &[RecoveredBlock]) -> Option; +} + +impl ChunkWitnessExt for ChunkWitness { + #[inline] + fn legacy_data_hash(&self, blocks: &[RecoveredBlock]) -> Option { + (self.fork_name < ForkName::EuclidV2).then(|| blocks.legacy_data_hash()) + } + + #[inline] + fn rolling_msg_queue_hash(&self, blocks: &[RecoveredBlock]) -> Option { + if self.fork_name < ForkName::EuclidV2 { + return None; + } + + let prev_msg_queue_hash: B256 = self.prev_msg_queue_hash.into(); + + let rolling_msg_queue_hash = match self.validium.as_ref() { + None => blocks.rolling_msg_queue_hash( + prev_msg_queue_hash, + iter::repeat_n(None::<(Vec, &SecretKey)>, blocks.len()), + ), + Some(validium) => { + let secret_key = + SecretKey::try_from_bytes(validium.secret_key.as_ref()).expect("invalid secret key"); + blocks.rolling_msg_queue_hash( + prev_msg_queue_hash, + validium + .validium_txs + .iter() + .map(|txs| Some((txs.iter().map(|tx| tx.into()), &secret_key))), + ) + } + }; + + Some(rolling_msg_queue_hash) + } +} diff --git a/crates/types/base/src/public_inputs/chunk/validium.rs b/crates/types/chunk/src/types/validium.rs similarity index 100% rename from crates/types/base/src/public_inputs/chunk/validium.rs rename to crates/types/chunk/src/types/validium.rs diff --git a/crates/types/chunk/src/witness.rs b/crates/types/chunk/src/witness.rs index bf9438e7..6cae3bdc 100644 --- a/crates/types/chunk/src/witness.rs +++ b/crates/types/chunk/src/witness.rs @@ -1,14 +1,9 @@ use alloy_primitives::B256; use rkyv::util::AlignedVec; use sbv_core::verifier::StateCommitMode; -use sbv_primitives::types::consensus::TxL1Message; -use sbv_primitives::types::reth::primitives::{Block, RecoveredBlock}; use sbv_primitives::{U256, types::BlockWitness}; use std::collections::HashSet; -use std::iter; -use types_base::fork_name::ArchivedForkName; -use types_base::public_inputs::chunk::ChunkExt; -use types_base::public_inputs::chunk::validium::{QueueTransaction, SecretKey}; +use crate::types::validium::{QueueTransaction, SecretKey}; use types_base::{fork_name::ForkName, public_inputs::chunk::ChunkInfo}; /// The witness type accepted by the chunk-circuit. @@ -219,15 +214,13 @@ impl ChunkWitness { guest_version: Option, ) -> Result { let guest_version = guest_version.unwrap_or(self.fork_name); - // FIXME: Validium compatibility - rkyv::to_bytes::(self) - // if guest_version >= ForkName::Feynman { - // // Use the new rkyv serialization for Feynman and later forks - // rkyv::to_bytes::(self) - // } else { - // // Use the old rkyv serialization for earlier forks - // rkyv::to_bytes::(&self.clone().into_euclid()) - // } + if guest_version >= ForkName::Feynman { + // Use the new rkyv serialization for Feynman and later forks + rkyv::to_bytes::(self) + } else { + // Use the old rkyv serialization for earlier forks + rkyv::to_bytes::(&self.clone().into_euclid()) + } } pub fn stats(&self) -> ChunkDetails { @@ -254,45 +247,3 @@ impl TryFrom<&ChunkWitness> for ChunkInfo { crate::execute(value) } } - -pub trait ChunkWitnessExt { - fn legacy_data_hash(&self, blocks: &[RecoveredBlock]) -> Option; - - fn rolling_msg_queue_hash(&self, blocks: &[RecoveredBlock]) -> Option; -} - -impl ChunkWitnessExt for ArchivedChunkWitness { - #[inline] - fn legacy_data_hash(&self, blocks: &[RecoveredBlock]) -> Option { - (self.fork_name < ArchivedForkName::EuclidV2).then(|| blocks.legacy_data_hash()) - } - - #[inline] - fn rolling_msg_queue_hash(&self, blocks: &[RecoveredBlock]) -> Option { - if self.fork_name < ArchivedForkName::EuclidV2 { - return None; - } - - let prev_msg_queue_hash: B256 = self.prev_msg_queue_hash.into(); - - let rolling_msg_queue_hash = match self.validium.as_ref() { - None => blocks.rolling_msg_queue_hash( - prev_msg_queue_hash, - iter::repeat_n(None::<(Vec, &SecretKey)>, blocks.len()), - ), - Some(validium) => { - let secret_key = - SecretKey::try_from_bytes(validium.secret_key.as_ref()).expect("invalid secret key"); - blocks.rolling_msg_queue_hash( - prev_msg_queue_hash, - validium - .validium_txs - .iter() - .map(|txs| Some((txs.iter().map(|tx| tx.into()), &secret_key))), - ) - } - }; - - Some(rolling_msg_queue_hash) - } -} From 1cc04a0040fa0e5da4b1651c56319c7f144d0d9c Mon Sep 17 00:00:00 2001 From: lightsing Date: Wed, 20 Aug 2025 14:50:01 +0800 Subject: [PATCH 22/84] fix build --- Cargo.lock | 462 ++++++++++++------ Cargo.toml | 32 +- .../chunk-circuit/chunk_exe_commit.rs | 2 +- crates/integration/tests/chunk_circuit.rs | 3 +- crates/types/chunk/src/lib.rs | 1 + 5 files changed, 329 insertions(+), 171 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 648fc553..eab2900b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -222,9 +222,9 @@ dependencies = [ [[package]] name = "alloy-evm" -version = "0.16.2" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4042e855163839443cba91147fb7737c4aba02df4767cb322b0e8cea5a77642c" +checksum = "2211ccd0f05e2fea4f767242957f5e8cfb08b127ea2e6a3c0d9e5b10e6bf67d9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -2885,7 +2885,7 @@ dependencies = [ [[package]] name = "k256" version = "0.13.4" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "ecdsa", "elliptic-curve", @@ -2893,11 +2893,11 @@ dependencies = [ "hex-literal", "num-bigint 0.4.6", "once_cell", - "openvm", - "openvm-algebra-guest", - "openvm-algebra-moduli-macros", - "openvm-ecc-guest", - "openvm-ecc-sw-macros", + "openvm 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-algebra-moduli-macros 1.4.0-rc.4", + "openvm-ecc-guest 1.4.0-rc.4", + "openvm-ecc-sw-macros 1.4.0-rc.4", "serde", ] @@ -3431,15 +3431,28 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openvm" version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +dependencies = [ + "bytemuck", + "num-bigint 0.4.6", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-platform 1.3.0", + "openvm-rv32im-guest 1.3.0", + "serde", +] + +[[package]] +name = "openvm" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "bytemuck", "getrandom 0.2.16", "getrandom 0.3.3", "num-bigint 0.4.6", - "openvm-custom-insn", - "openvm-platform 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-rv32im-guest", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-platform 1.4.0-rc.4", + "openvm-rv32im-guest 1.4.0-rc.4", "serde", ] @@ -3475,9 +3488,19 @@ dependencies = [ [[package]] name = "openvm-algebra-complex-macros" version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +dependencies = [ + "openvm-macros-common 1.3.0", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "openvm-algebra-complex-macros" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "openvm-macros-common", + "openvm-macros-common 1.4.0-rc.4", "quote", "syn 2.0.101", ] @@ -3485,15 +3508,31 @@ dependencies = [ [[package]] name = "openvm-algebra-guest" version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +dependencies = [ + "halo2curves-axiom 0.7.0", + "num-bigint 0.4.6", + "once_cell", + "openvm-algebra-complex-macros 1.3.0", + "openvm-algebra-moduli-macros 1.3.0", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-rv32im-guest 1.3.0", + "serde-big-array", + "strum_macros 0.26.4", +] + +[[package]] +name = "openvm-algebra-guest" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "halo2curves-axiom 0.7.0", "num-bigint 0.4.6", "once_cell", - "openvm-algebra-complex-macros", - "openvm-algebra-moduli-macros", - "openvm-custom-insn", - "openvm-rv32im-guest", + "openvm-algebra-complex-macros 1.4.0-rc.4", + "openvm-algebra-moduli-macros 1.4.0-rc.4", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-rv32im-guest 1.4.0-rc.4", "serde-big-array", "strum_macros 0.26.4", ] @@ -3501,11 +3540,23 @@ dependencies = [ [[package]] name = "openvm-algebra-moduli-macros" version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "num-bigint 0.4.6", "num-prime", - "openvm-macros-common", + "openvm-macros-common 1.3.0", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "openvm-algebra-moduli-macros" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" +dependencies = [ + "num-bigint 0.4.6", + "num-prime", + "openvm-macros-common 1.4.0-rc.4", "quote", "syn 2.0.101", ] @@ -3515,7 +3566,7 @@ name = "openvm-algebra-transpiler" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-algebra-guest", + "openvm-algebra-guest 1.3.0", "openvm-instructions", "openvm-instructions-derive", "openvm-stark-backend", @@ -3549,9 +3600,18 @@ dependencies = [ [[package]] name = "openvm-bigint-guest" version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-platform 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-platform 1.3.0", + "strum_macros 0.26.4", +] + +[[package]] +name = "openvm-bigint-guest" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" +dependencies = [ + "openvm-platform 1.4.0-rc.4", "strum_macros 0.26.4", ] @@ -3560,7 +3620,7 @@ name = "openvm-bigint-transpiler" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-bigint-guest", + "openvm-bigint-guest 1.3.0", "openvm-instructions", "openvm-instructions-derive", "openvm-rv32im-transpiler", @@ -3577,7 +3637,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "cargo_metadata 0.18.1", "eyre", - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-platform 1.3.0", "serde", "serde_json", ] @@ -3666,7 +3726,17 @@ dependencies = [ [[package]] name = "openvm-custom-insn" version = "0.1.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "openvm-custom-insn" +version = "0.1.0" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "proc-macro2", "quote", @@ -3704,18 +3774,37 @@ dependencies = [ [[package]] name = "openvm-ecc-guest" version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +dependencies = [ + "ecdsa", + "elliptic-curve", + "group 0.13.0", + "halo2curves-axiom 0.7.0", + "once_cell", + "openvm 1.3.0", + "openvm-algebra-guest 1.3.0", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-ecc-sw-macros 1.3.0", + "openvm-rv32im-guest 1.3.0", + "serde", + "strum_macros 0.26.4", +] + +[[package]] +name = "openvm-ecc-guest" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "ecdsa", "elliptic-curve", "group 0.13.0", "halo2curves-axiom 0.7.0", "once_cell", - "openvm", - "openvm-algebra-guest", - "openvm-custom-insn", - "openvm-ecc-sw-macros", - "openvm-rv32im-guest", + "openvm 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-ecc-sw-macros 1.4.0-rc.4", + "openvm-rv32im-guest 1.4.0-rc.4", "serde", "strum_macros 0.26.4", ] @@ -3723,9 +3812,19 @@ dependencies = [ [[package]] name = "openvm-ecc-sw-macros" version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +dependencies = [ + "openvm-macros-common 1.3.0", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "openvm-ecc-sw-macros" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "openvm-macros-common", + "openvm-macros-common 1.4.0-rc.4", "quote", "syn 2.0.101", ] @@ -3735,7 +3834,7 @@ name = "openvm-ecc-transpiler" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-ecc-guest", + "openvm-ecc-guest 1.3.0", "openvm-instructions", "openvm-instructions-derive", "openvm-stark-backend", @@ -3799,9 +3898,17 @@ dependencies = [ [[package]] name = "openvm-keccak256-guest" version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +dependencies = [ + "openvm-platform 1.3.0", +] + +[[package]] +name = "openvm-keccak256-guest" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "openvm-platform 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-platform 1.4.0-rc.4", ] [[package]] @@ -3811,7 +3918,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-keccak256-guest", + "openvm-keccak256-guest 1.3.0", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -3821,7 +3928,15 @@ dependencies = [ [[package]] name = "openvm-macros-common" version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" +dependencies = [ + "syn 2.0.101", +] + +[[package]] +name = "openvm-macros-common" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "syn 2.0.101", ] @@ -3945,8 +4060,8 @@ dependencies = [ [[package]] name = "openvm-pairing" -version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "group 0.13.0", "halo2curves-axiom 0.7.0", @@ -3954,16 +4069,16 @@ dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", - "openvm", - "openvm-algebra-complex-macros", - "openvm-algebra-guest", - "openvm-algebra-moduli-macros", - "openvm-custom-insn", - "openvm-ecc-guest", - "openvm-ecc-sw-macros", - "openvm-pairing-guest", - "openvm-platform 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm-rv32im-guest", + "openvm 1.4.0-rc.4", + "openvm-algebra-complex-macros 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-algebra-moduli-macros 1.4.0-rc.4", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-ecc-guest 1.4.0-rc.4", + "openvm-ecc-sw-macros 1.4.0-rc.4", + "openvm-pairing-guest 1.4.0-rc.4", + "openvm-platform 1.4.0-rc.4", + "openvm-rv32im-guest 1.4.0-rc.4", "rand 0.8.5", "serde", ] @@ -3986,10 +4101,10 @@ dependencies = [ "openvm-circuit-primitives", "openvm-circuit-primitives-derive", "openvm-ecc-circuit", - "openvm-ecc-guest", + "openvm-ecc-guest 1.3.0", "openvm-instructions", "openvm-mod-circuit-builder", - "openvm-pairing-guest", + "openvm-pairing-guest 1.3.0", "openvm-pairing-transpiler", "openvm-rv32-adapters", "openvm-rv32im-circuit", @@ -4002,7 +4117,7 @@ dependencies = [ [[package]] name = "openvm-pairing-guest" version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "halo2curves-axiom 0.7.0", "hex-literal", @@ -4010,11 +4125,32 @@ dependencies = [ "lazy_static", "num-bigint 0.4.6", "num-traits", - "openvm", - "openvm-algebra-guest", - "openvm-algebra-moduli-macros", - "openvm-custom-insn", - "openvm-ecc-guest", + "openvm 1.3.0", + "openvm-algebra-guest 1.3.0", + "openvm-algebra-moduli-macros 1.3.0", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-ecc-guest 1.3.0", + "rand 0.8.5", + "serde", + "strum_macros 0.26.4", +] + +[[package]] +name = "openvm-pairing-guest" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" +dependencies = [ + "halo2curves-axiom 0.7.0", + "hex-literal", + "itertools 0.14.0", + "lazy_static", + "num-bigint 0.4.6", + "num-traits", + "openvm 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-algebra-moduli-macros 1.4.0-rc.4", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-ecc-guest 1.4.0-rc.4", "rand 0.8.5", "serde", "strum_macros 0.26.4", @@ -4027,7 +4163,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-pairing-guest", + "openvm-pairing-guest 1.3.0", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4039,18 +4175,19 @@ name = "openvm-platform" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-custom-insn", - "openvm-rv32im-guest", + "libm", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-rv32im-guest 1.3.0", ] [[package]] name = "openvm-platform" -version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "libm", - "openvm-custom-insn", - "openvm-rv32im-guest", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-rv32im-guest 1.4.0-rc.4", ] [[package]] @@ -4116,9 +4253,19 @@ dependencies = [ [[package]] name = "openvm-rv32im-guest" version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-custom-insn", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "p3-field 0.1.0", + "strum_macros 0.26.4", +] + +[[package]] +name = "openvm-rv32im-guest" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" +dependencies = [ + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", "p3-field 0.1.0", "strum_macros 0.26.4", ] @@ -4130,7 +4277,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-rv32im-guest", + "openvm-rv32im-guest 1.3.0", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4156,7 +4303,7 @@ dependencies = [ "itertools 0.14.0", "metrics", "num-bigint 0.4.6", - "openvm", + "openvm 1.3.0", "openvm-algebra-circuit", "openvm-algebra-transpiler", "openvm-bigint-circuit", @@ -4195,10 +4342,10 @@ dependencies = [ [[package]] name = "openvm-sha2" -version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "openvm-sha256-guest", + "openvm-sha256-guest 1.4.0-rc.4", "sha2 0.10.9", ] @@ -4239,9 +4386,17 @@ dependencies = [ [[package]] name = "openvm-sha256-guest" version = "1.3.0" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "openvm-platform 1.3.0 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-platform 1.3.0", +] + +[[package]] +name = "openvm-sha256-guest" +version = "1.4.0-rc.4" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" +dependencies = [ + "openvm-platform 1.4.0-rc.4", ] [[package]] @@ -4251,7 +4406,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-sha256-guest", + "openvm-sha256-guest 1.3.0", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4328,7 +4483,7 @@ dependencies = [ "elf", "eyre", "openvm-instructions", - "openvm-platform 1.3.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", + "openvm-platform 1.3.0", "openvm-stark-backend", "rrs-lib", "thiserror 1.0.69", @@ -4373,18 +4528,18 @@ dependencies = [ [[package]] name = "p256" version = "0.13.2" -source = "git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97#f834efa186784cfdb0401c8596e1264cc9030f97" +source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "ecdsa", "elliptic-curve", "ff 0.13.1", "hex-literal", "num-bigint 0.4.6", - "openvm", - "openvm-algebra-guest", - "openvm-algebra-moduli-macros", - "openvm-ecc-guest", - "openvm-ecc-sw-macros", + "openvm 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-algebra-moduli-macros 1.4.0-rc.4", + "openvm-ecc-guest 1.4.0-rc.4", + "openvm-ecc-sw-macros 1.4.0-rc.4", "serde", ] @@ -5412,7 +5567,7 @@ dependencies = [ [[package]] name = "reth-chainspec" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-chains", "alloy-consensus", @@ -5432,7 +5587,7 @@ dependencies = [ [[package]] name = "reth-codecs" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -5450,7 +5605,7 @@ dependencies = [ [[package]] name = "reth-codecs-derive" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "convert_case 0.7.1", "proc-macro2", @@ -5461,7 +5616,7 @@ dependencies = [ [[package]] name = "reth-db-models" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-eips 1.0.24", "alloy-primitives", @@ -5471,7 +5626,7 @@ dependencies = [ [[package]] name = "reth-ethereum-forks" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-eip2124", "alloy-hardforks", @@ -5483,7 +5638,7 @@ dependencies = [ [[package]] name = "reth-ethereum-primitives" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -5498,7 +5653,7 @@ dependencies = [ [[package]] name = "reth-evm" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -5520,25 +5675,27 @@ dependencies = [ [[package]] name = "reth-evm-ethereum" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", + "alloy-rpc-types-engine", "reth-chainspec", "reth-ethereum-forks", "reth-ethereum-primitives", "reth-evm", "reth-execution-types", "reth-primitives-traits", + "reth-storage-errors", "revm 27.1.0", ] [[package]] name = "reth-execution-errors" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-evm", "alloy-primitives", @@ -5551,7 +5708,7 @@ dependencies = [ [[package]] name = "reth-execution-types" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -5567,7 +5724,7 @@ dependencies = [ [[package]] name = "reth-network-peers" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -5579,7 +5736,7 @@ dependencies = [ [[package]] name = "reth-primitives" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "once_cell", @@ -5592,7 +5749,7 @@ dependencies = [ [[package]] name = "reth-primitives-traits" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -5620,7 +5777,7 @@ dependencies = [ [[package]] name = "reth-prune-types" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-primitives", "derive_more 2.0.1", @@ -5630,7 +5787,7 @@ dependencies = [ [[package]] name = "reth-scroll-chainspec" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-chains", "alloy-consensus", @@ -5655,12 +5812,13 @@ dependencies = [ [[package]] name = "reth-scroll-evm" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", + "alloy-rpc-types-engine", "derive_more 2.0.1", "reth-chainspec", "reth-evm", @@ -5684,7 +5842,7 @@ dependencies = [ [[package]] name = "reth-scroll-forks" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-chains", "alloy-primitives", @@ -5698,7 +5856,7 @@ dependencies = [ [[package]] name = "reth-scroll-primitives" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -5715,7 +5873,7 @@ dependencies = [ [[package]] name = "reth-stages-types" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-primitives", "reth-trie-common", @@ -5724,7 +5882,7 @@ dependencies = [ [[package]] name = "reth-static-file-types" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-primitives", "derive_more 2.0.1", @@ -5735,7 +5893,7 @@ dependencies = [ [[package]] name = "reth-storage-api" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -5757,7 +5915,7 @@ dependencies = [ [[package]] name = "reth-storage-errors" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-eips 1.0.24", "alloy-primitives", @@ -5773,7 +5931,7 @@ dependencies = [ [[package]] name = "reth-trie" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -5795,7 +5953,7 @@ dependencies = [ [[package]] name = "reth-trie-common" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -5811,7 +5969,7 @@ dependencies = [ [[package]] name = "reth-trie-sparse" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -5827,7 +5985,7 @@ dependencies = [ [[package]] name = "reth-zstd-compressors" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "zstd", ] @@ -6434,7 +6592,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "sbv-core" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ "cfg-if", "itertools 0.14.0", @@ -6451,7 +6609,7 @@ dependencies = [ [[package]] name = "sbv-helpers" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ "tracing", ] @@ -6459,7 +6617,7 @@ dependencies = [ [[package]] name = "sbv-kv" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ "auto_impl", "hashbrown 0.15.4", @@ -6469,9 +6627,9 @@ dependencies = [ [[package]] name = "sbv-precompile" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ - "openvm-ecc-guest", + "openvm-ecc-guest 1.4.0-rc.4", "openvm-pairing", "openvm-sha2", "sbv-primitives", @@ -6480,7 +6638,7 @@ dependencies = [ [[package]] name = "sbv-primitives" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -6514,7 +6672,7 @@ dependencies = [ [[package]] name = "sbv-trie" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#81d73fbdf6d6256fd27af5894b56b65da6b62f23" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ "alloy-rlp", "alloy-trie", @@ -6529,7 +6687,7 @@ dependencies = [ [[package]] name = "scroll-alloy-consensus" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -6545,7 +6703,7 @@ dependencies = [ [[package]] name = "scroll-alloy-evm" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -6563,7 +6721,7 @@ dependencies = [ [[package]] name = "scroll-alloy-hardforks" version = "1.6.0" -source = "git+https://github.com/scroll-tech/reth?rev=74dd0bd368325b1286e4fe99c20e6ef0fdbaee51#74dd0bd368325b1286e4fe99c20e6ef0fdbaee51" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-hardforks", "auto_impl", @@ -6580,16 +6738,16 @@ dependencies = [ "c-kzg", "halo2curves-axiom 0.7.0", "itertools 0.14.0", - "openvm", - "openvm-algebra-complex-macros", - "openvm-algebra-guest", - "openvm-ecc-guest", - "openvm-keccak256-guest", + "openvm 1.4.0-rc.4", + "openvm-algebra-complex-macros 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-ecc-guest 1.4.0-rc.4", + "openvm-keccak256-guest 1.4.0-rc.4", "openvm-pairing", - "openvm-pairing-guest", - "openvm-rv32im-guest", + "openvm-pairing-guest 1.4.0-rc.4", + "openvm-rv32im-guest 1.4.0-rc.4", "openvm-sha2", - "openvm-sha256-guest", + "openvm-sha256-guest 1.4.0-rc.4", "rkyv", "scroll-zkvm-types-batch", "scroll-zkvm-types-circuit", @@ -6635,10 +6793,10 @@ version = "0.5.0" dependencies = [ "alloy-primitives", "bincode 2.0.1", - "openvm", - "openvm-algebra-guest", - "openvm-keccak256-guest", - "openvm-rv32im-guest", + "openvm 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-keccak256-guest 1.4.0-rc.4", + "openvm-rv32im-guest 1.4.0-rc.4", "rkyv", "scroll-zkvm-types-bundle", "scroll-zkvm-types-circuit", @@ -6649,17 +6807,17 @@ name = "scroll-zkvm-chunk-circuit" version = "0.5.0" dependencies = [ "bincode 2.0.1", - "k256 0.13.4 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", - "openvm", - "openvm-algebra-complex-macros", - "openvm-algebra-guest", - "openvm-bigint-guest", - "openvm-ecc-guest", - "openvm-keccak256-guest", + "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm 1.4.0-rc.4", + "openvm-algebra-complex-macros 1.4.0-rc.4", + "openvm-algebra-guest 1.4.0-rc.4", + "openvm-bigint-guest 1.4.0-rc.4", + "openvm-ecc-guest 1.4.0-rc.4", + "openvm-keccak256-guest 1.4.0-rc.4", "openvm-pairing", - "openvm-pairing-guest", - "openvm-rv32im-guest", - "p256 0.13.2 (git+https://github.com/lightsing/openvm.git?rev=f834efa186784cfdb0401c8596e1264cc9030f97)", + "openvm-pairing-guest 1.4.0-rc.4", + "openvm-rv32im-guest 1.4.0-rc.4", + "p256 0.13.2 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", "rkyv", "sbv-precompile", "scroll-zkvm-types-chunk", @@ -6787,12 +6945,12 @@ dependencies = [ "c-kzg", "halo2curves-axiom 0.7.0", "itertools 0.14.0", - "openvm", - "openvm-ecc-guest", + "openvm 1.4.0-rc.4", + "openvm-ecc-guest 1.4.0-rc.4", "openvm-pairing", - "openvm-pairing-guest", + "openvm-pairing-guest 1.4.0-rc.4", "openvm-sha2", - "openvm-sha256-guest", + "openvm-sha256-guest 1.4.0-rc.4", "rkyv", "scroll-zkvm-types-base", "serde", @@ -6821,9 +6979,9 @@ dependencies = [ "bincode 2.0.1", "ecies", "itertools 0.14.0", - "openvm", - "openvm-custom-insn", - "openvm-rv32im-guest", + "openvm 1.4.0-rc.4", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-rv32im-guest 1.4.0-rc.4", "revm-precompile 21.0.0", "rkyv", "sbv-core", @@ -6843,9 +7001,9 @@ dependencies = [ "alloy-primitives", "getrandom 0.2.16", "itertools 0.14.0", - "openvm", - "openvm-custom-insn", - "openvm-rv32im-guest", + "openvm 1.4.0-rc.4", + "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "openvm-rv32im-guest 1.4.0-rc.4", "rkyv", "scroll-zkvm-types-base", "serde", diff --git a/Cargo.toml b/Cargo.toml index b7739fef..934f16a0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -132,22 +132,22 @@ revm-state = { git = "https://github.com/scroll-tech/revm" } alloy-primitives = { git = "https://github.com/scroll-tech/alloy-core", branch = "feat/rkyv" } -# FIXME: when openvm fixes https://github.com/openvm-org/openvm/pull/1937 -[patch.'https://github.com/openvm-org/openvm.git'] -openvm = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-algebra-complex-macros = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-custom-insn = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-sha2 = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-sha256-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-p256 = { git = "https://github.com/lightsing/openvm.git", package = "p256", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-k256 = { git = "https://github.com/lightsing/openvm.git", package = "k256", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-pairing = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-keccak256-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-algebra-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-ecc-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-bigint-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-pairing-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } -openvm-rv32im-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +## FIXME: when openvm fixes https://github.com/openvm-org/openvm/pull/1937 +#[patch.'https://github.com/openvm-org/openvm.git'] +#openvm = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-algebra-complex-macros = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-custom-insn = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-sha2 = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-sha256-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-p256 = { git = "https://github.com/lightsing/openvm.git", package = "p256", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-k256 = { git = "https://github.com/lightsing/openvm.git", package = "k256", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-pairing = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-keccak256-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-algebra-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-ecc-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-bigint-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-pairing-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } +#openvm-rv32im-guest = { git = "https://github.com/lightsing/openvm.git", rev = "f834efa186784cfdb0401c8596e1264cc9030f97" } [profile.maxperf] inherits = "release" diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index 5e33a697..9418071e 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [136930415, 1095265284, 976847809, 1413917046, 896767242, 368179360, 662516329, 337950770]; +pub const COMMIT: [u32; 8] = [1619673597, 664709083, 1461101928, 709903157, 79575717, 1460778095, 639513797, 1851621880]; diff --git a/crates/integration/tests/chunk_circuit.rs b/crates/integration/tests/chunk_circuit.rs index bab1387b..a0b293ba 100644 --- a/crates/integration/tests/chunk_circuit.rs +++ b/crates/integration/tests/chunk_circuit.rs @@ -14,8 +14,7 @@ use scroll_zkvm_integration::testers::chunk::read_block_witness; use scroll_zkvm_integration::testers::PATH_TESTDATA; use scroll_zkvm_prover::{Prover, utils::vm::ExecutionResult}; use scroll_zkvm_prover::utils::read_json; -use scroll_zkvm_types::chunk::ChunkWitness; -use scroll_zkvm_types::public_inputs::chunk::validium::{QueueTransaction, SecretKey}; +use scroll_zkvm_types::chunk::{ChunkWitness, QueueTransaction, SecretKey}; use scroll_zkvm_types::public_inputs::ForkName; fn exec_chunk(prover: &Prover, wit: &ChunkWitness) -> eyre::Result<(ExecutionResult, u64)> { diff --git a/crates/types/chunk/src/lib.rs b/crates/types/chunk/src/lib.rs index b40c09a1..e2b1ae2c 100644 --- a/crates/types/chunk/src/lib.rs +++ b/crates/types/chunk/src/lib.rs @@ -2,6 +2,7 @@ mod types; mod witness; pub use witness::{ArchivedChunkWitness, ChunkWitness}; +pub use types::validium::{QueueTransaction, SecretKey}; mod execute; pub use execute::execute; From 9205fd3c5e5958b49ae885eef0ac8f7fa917ef89 Mon Sep 17 00:00:00 2001 From: lightsing Date: Wed, 20 Aug 2025 15:07:40 +0800 Subject: [PATCH 23/84] remove generic as no need for rkyv --- crates/types/chunk/src/lib.rs | 2 +- crates/types/chunk/src/types.rs | 70 ++++++++---------------- crates/types/chunk/src/types/validium.rs | 21 +------ crates/types/chunk/src/witness.rs | 11 +--- 4 files changed, 28 insertions(+), 76 deletions(-) diff --git a/crates/types/chunk/src/lib.rs b/crates/types/chunk/src/lib.rs index e2b1ae2c..a4882f96 100644 --- a/crates/types/chunk/src/lib.rs +++ b/crates/types/chunk/src/lib.rs @@ -1,7 +1,7 @@ mod types; mod witness; -pub use witness::{ArchivedChunkWitness, ChunkWitness}; +pub use witness::{ChunkWitness}; pub use types::validium::{QueueTransaction, SecretKey}; mod execute; diff --git a/crates/types/chunk/src/types.rs b/crates/types/chunk/src/types.rs index 337e879f..cf8f73f9 100644 --- a/crates/types/chunk/src/types.rs +++ b/crates/types/chunk/src/types.rs @@ -1,4 +1,3 @@ -use std::iter; use std::ops::Deref; use alloy_primitives::keccak256; @@ -8,13 +7,14 @@ use sbv_primitives::{ B256, U256, types::{ eips::Encodable2718, - reth::primitives::{Block, RecoveredBlock, SignedTransaction, TransactionSigned}, + reth::primitives::{Block, RecoveredBlock, TransactionSigned}, }, }; use sbv_primitives::types::consensus::TxL1Message; use types_base::fork_name::ForkName; -use crate::ChunkWitness; +use crate::{ChunkWitness, QueueTransaction}; use crate::types::validium::SecretKey; +use crate::witness::ValidiumInputs; pub mod validium; @@ -32,10 +32,7 @@ pub trait ChunkExt { /// Data hash before Euclid V2 fn legacy_data_hash(&self) -> B256; /// Rolling message queue hash after Euclid V2 - fn rolling_msg_queue_hash<'a, II, I>(&self, rolling_hash: B256, validium_txs: II) -> B256 - where - II: IntoIterator>, - I: IntoIterator; + fn rolling_msg_queue_hash(&self, rolling_hash: B256, validium_inputs: Option<&ValidiumInputs>) -> B256; } impl]>> ChunkExt for T { @@ -77,14 +74,19 @@ impl]>> ChunkExt for T { } #[inline] - fn rolling_msg_queue_hash<'a, II, I>(&self, mut rolling_hash: B256, validium_txs: II) -> B256 - where - II: IntoIterator>, - I: IntoIterator, - { + fn rolling_msg_queue_hash(&self, mut rolling_hash: B256, validium_inputs: Option<&ValidiumInputs>) -> B256 { let blocks = self.as_ref(); - for (block, validium_txs) in blocks.iter().zip_eq(validium_txs) { - rolling_hash = block.hash_msg_queue(&rolling_hash, validium_txs); + + if let Some(ValidiumInputs { validium_txs, secret_key }) = validium_inputs { + let secret_key = SecretKey::try_from_bytes(secret_key).expect("valid secret key"); + + for (block, validium_txs) in blocks.iter().zip(validium_txs.iter()) { + rolling_hash = block.hash_msg_queue(&rolling_hash, Some((validium_txs.as_slice(), &secret_key))); + } + } else { + for block in blocks.iter() { + rolling_hash = block.hash_msg_queue(&rolling_hash, None); + } } rolling_hash } @@ -123,9 +125,7 @@ trait BlockChunkExt { /// Hash the l1 messages of the block fn encode_legacy_l1_msg(&self, buffer: &mut Vec); /// Hash the l1 messages of the block - fn hash_msg_queue(&self, initial_queue_hash: &B256, validium_txs: Option<(I, &SecretKey)>) -> B256 - where - I: IntoIterator; + fn hash_msg_queue(&self, initial_queue_hash: &B256, validium_txs: Option<(&[QueueTransaction], &SecretKey)>) -> B256; } impl BlockChunkExt for RecoveredBlock { @@ -165,9 +165,7 @@ impl BlockChunkExt for RecoveredBlock { } #[inline] - fn hash_msg_queue(&self, initial_queue_hash: &B256, validium_txs: Option<(I, &SecretKey)>) -> B256 - where - I: IntoIterator, + fn hash_msg_queue(&self, initial_queue_hash: &B256, validium_txs: Option<(&[QueueTransaction], &SecretKey)>) -> B256 { let mut rolling_hash = *initial_queue_hash; @@ -189,7 +187,8 @@ impl BlockChunkExt for RecoveredBlock { }; if let Some((txs, secret_key)) = validium_txs { - for (validium_tx, tx_in_block) in txs.into_iter().zip_eq(self.l1_txs_iter()) { + for (validium_tx, tx_in_block) in txs.iter().zip_eq(self.l1_txs_iter()) { + let validium_tx = TxL1Message::from(validium_tx); match validium::decrypt(&validium_tx, secret_key) { Ok(decrypted) => { assert_eq!(decrypted, *tx_in_block); @@ -225,30 +224,9 @@ impl ChunkWitnessExt for ChunkWitness { #[inline] fn rolling_msg_queue_hash(&self, blocks: &[RecoveredBlock]) -> Option { - if self.fork_name < ForkName::EuclidV2 { - return None; - } - - let prev_msg_queue_hash: B256 = self.prev_msg_queue_hash.into(); - - let rolling_msg_queue_hash = match self.validium.as_ref() { - None => blocks.rolling_msg_queue_hash( - prev_msg_queue_hash, - iter::repeat_n(None::<(Vec, &SecretKey)>, blocks.len()), - ), - Some(validium) => { - let secret_key = - SecretKey::try_from_bytes(validium.secret_key.as_ref()).expect("invalid secret key"); - blocks.rolling_msg_queue_hash( - prev_msg_queue_hash, - validium - .validium_txs - .iter() - .map(|txs| Some((txs.iter().map(|tx| tx.into()), &secret_key))), - ) - } - }; - - Some(rolling_msg_queue_hash) + (self.fork_name < ForkName::EuclidV2).then(|| blocks.rolling_msg_queue_hash( + self.prev_msg_queue_hash, + self.validium.as_ref(), + )) } } diff --git a/crates/types/chunk/src/types/validium.rs b/crates/types/chunk/src/types/validium.rs index 8dbae854..b830ae1d 100644 --- a/crates/types/chunk/src/types/validium.rs +++ b/crates/types/chunk/src/types/validium.rs @@ -1,6 +1,6 @@ #![allow(non_snake_case)] -use alloy_primitives::{Address, Bytes, U256}; +use alloy_primitives::{Address, Bytes}; use alloy_sol_types::{sol, SolCall}; use sbv_primitives::types::consensus::TxL1Message; @@ -11,11 +11,7 @@ sol! { Debug, serde::Deserialize, serde::Serialize, - rkyv::Archive, - rkyv::Deserialize, - rkyv::Serialize, )] - #[rkyv(derive(Debug))] event QueueTransaction( address indexed sender, address indexed target, @@ -79,21 +75,6 @@ impl From<&QueueTransaction> for TxL1Message { } } - -impl From<&ArchivedQueueTransaction> for TxL1Message { - fn from(tx: &ArchivedQueueTransaction) -> Self { - let gas_limit: U256 = tx.gasLimit.into(); - TxL1Message { - queue_index: tx.queueIndex.to_native(), - gas_limit: gas_limit.to(), - to: tx.target.into(), - value: tx.value.into(), - sender: tx.sender.into(), - input: Bytes::copy_from_slice(tx.data.as_ref()), - } - } -} - pub fn decrypt(tx: &TxL1Message, secret_key: &SecretKey) -> Result { Ok(TxL1Message { queue_index: tx.queue_index, diff --git a/crates/types/chunk/src/witness.rs b/crates/types/chunk/src/witness.rs index 6cae3bdc..934e0ede 100644 --- a/crates/types/chunk/src/witness.rs +++ b/crates/types/chunk/src/witness.rs @@ -56,11 +56,7 @@ pub struct ChunkWitnessFeynman { Debug, serde::Deserialize, serde::Serialize, - rkyv::Archive, - rkyv::Deserialize, - rkyv::Serialize, )] -#[rkyv(derive(Debug))] pub struct ChunkWitness { /// The block witness for each block in the chunk. pub blocks: Vec, @@ -82,11 +78,7 @@ pub struct ChunkWitness { Debug, serde::Deserialize, serde::Serialize, - rkyv::Archive, - rkyv::Deserialize, - rkyv::Serialize, )] -#[rkyv(derive(Debug))] pub struct ValidiumInputs { /// The validium transactions for each block in the chunk. pub validium_txs: Vec>, @@ -214,9 +206,10 @@ impl ChunkWitness { guest_version: Option, ) -> Result { let guest_version = guest_version.unwrap_or(self.fork_name); + // FIXME if guest_version >= ForkName::Feynman { // Use the new rkyv serialization for Feynman and later forks - rkyv::to_bytes::(self) + rkyv::to_bytes::(&self.clone().into_feynman()) } else { // Use the old rkyv serialization for earlier forks rkyv::to_bytes::(&self.clone().into_euclid()) From d17451d8b47c4971d0e88dd2e73704029fcf5126 Mon Sep 17 00:00:00 2001 From: lightsing Date: Wed, 20 Aug 2025 15:10:54 +0800 Subject: [PATCH 24/84] fmt --- crates/integration/tests/chunk_circuit.rs | 13 +++--- crates/types/chunk/src/execute.rs | 5 +- crates/types/chunk/src/lib.rs | 2 +- crates/types/chunk/src/types.rs | 57 +++++++++++++++-------- crates/types/chunk/src/types/validium.rs | 6 +-- crates/types/chunk/src/witness.rs | 16 ++----- 6 files changed, 55 insertions(+), 44 deletions(-) diff --git a/crates/integration/tests/chunk_circuit.rs b/crates/integration/tests/chunk_circuit.rs index a0b293ba..6721c848 100644 --- a/crates/integration/tests/chunk_circuit.rs +++ b/crates/integration/tests/chunk_circuit.rs @@ -1,7 +1,7 @@ -use std::env; -use std::path::Path; use alloy_primitives::B256; use eyre::Ok; +use scroll_zkvm_integration::testers::PATH_TESTDATA; +use scroll_zkvm_integration::testers::chunk::read_block_witness; use scroll_zkvm_integration::{ ProverTester, prove_verify, tester_execute, testers::chunk::{ @@ -10,12 +10,12 @@ use scroll_zkvm_integration::{ }, utils::metadata_from_chunk_witnesses, }; -use scroll_zkvm_integration::testers::chunk::read_block_witness; -use scroll_zkvm_integration::testers::PATH_TESTDATA; -use scroll_zkvm_prover::{Prover, utils::vm::ExecutionResult}; use scroll_zkvm_prover::utils::read_json; +use scroll_zkvm_prover::{Prover, utils::vm::ExecutionResult}; use scroll_zkvm_types::chunk::{ChunkWitness, QueueTransaction, SecretKey}; use scroll_zkvm_types::public_inputs::ForkName; +use std::env; +use std::path::Path; fn exec_chunk(prover: &Prover, wit: &ChunkWitness) -> eyre::Result<(ExecutionResult, u64)> { let blk = wit.blocks[0].header.number; @@ -85,7 +85,8 @@ fn test_validium_execute() -> eyre::Result<()> { for blk in [1019, 1256, 1276] { let block_witness = read_block_witness(base_dir.join(format!("{blk}.json")))?; - let validium_txs: Vec = read_json(base_dir.join(format!("{blk}_validium_txs.json")))?; + let validium_txs: Vec = + read_json(base_dir.join(format!("{blk}_validium_txs.json")))?; let witness = ChunkWitness::new_validium( &[block_witness], diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index a7f10107..6afe0f62 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -1,4 +1,7 @@ -use crate::{ChunkWitness, types::{ChunkExt, ChunkWitnessExt}}; +use crate::{ + ChunkWitness, + types::{ChunkExt, ChunkWitnessExt}, +}; use sbv_core::verifier::{self, VerifyResult}; use sbv_helpers::manually_drop_on_zkvm; use sbv_primitives::{ diff --git a/crates/types/chunk/src/lib.rs b/crates/types/chunk/src/lib.rs index a4882f96..59908ec8 100644 --- a/crates/types/chunk/src/lib.rs +++ b/crates/types/chunk/src/lib.rs @@ -1,8 +1,8 @@ mod types; mod witness; -pub use witness::{ChunkWitness}; pub use types::validium::{QueueTransaction, SecretKey}; +pub use witness::ChunkWitness; mod execute; pub use execute::execute; diff --git a/crates/types/chunk/src/types.rs b/crates/types/chunk/src/types.rs index cf8f73f9..737ce3cf 100644 --- a/crates/types/chunk/src/types.rs +++ b/crates/types/chunk/src/types.rs @@ -1,8 +1,12 @@ use std::ops::Deref; +use crate::types::validium::SecretKey; +use crate::witness::ValidiumInputs; +use crate::{ChunkWitness, QueueTransaction}; use alloy_primitives::keccak256; use itertools::Itertools; use sbv_helpers::manually_drop_on_zkvm; +use sbv_primitives::types::consensus::TxL1Message; use sbv_primitives::{ B256, U256, types::{ @@ -10,11 +14,7 @@ use sbv_primitives::{ reth::primitives::{Block, RecoveredBlock, TransactionSigned}, }, }; -use sbv_primitives::types::consensus::TxL1Message; use types_base::fork_name::ForkName; -use crate::{ChunkWitness, QueueTransaction}; -use crate::types::validium::SecretKey; -use crate::witness::ValidiumInputs; pub mod validium; @@ -32,7 +32,11 @@ pub trait ChunkExt { /// Data hash before Euclid V2 fn legacy_data_hash(&self) -> B256; /// Rolling message queue hash after Euclid V2 - fn rolling_msg_queue_hash(&self, rolling_hash: B256, validium_inputs: Option<&ValidiumInputs>) -> B256; + fn rolling_msg_queue_hash( + &self, + rolling_hash: B256, + validium_inputs: Option<&ValidiumInputs>, + ) -> B256; } impl]>> ChunkExt for T { @@ -74,14 +78,23 @@ impl]>> ChunkExt for T { } #[inline] - fn rolling_msg_queue_hash(&self, mut rolling_hash: B256, validium_inputs: Option<&ValidiumInputs>) -> B256 { + fn rolling_msg_queue_hash( + &self, + mut rolling_hash: B256, + validium_inputs: Option<&ValidiumInputs>, + ) -> B256 { let blocks = self.as_ref(); - if let Some(ValidiumInputs { validium_txs, secret_key }) = validium_inputs { + if let Some(ValidiumInputs { + validium_txs, + secret_key, + }) = validium_inputs + { let secret_key = SecretKey::try_from_bytes(secret_key).expect("valid secret key"); for (block, validium_txs) in blocks.iter().zip(validium_txs.iter()) { - rolling_hash = block.hash_msg_queue(&rolling_hash, Some((validium_txs.as_slice(), &secret_key))); + rolling_hash = block + .hash_msg_queue(&rolling_hash, Some((validium_txs.as_slice(), &secret_key))); } } else { for block in blocks.iter() { @@ -100,8 +113,7 @@ trait TxBytesHashExt { fn tx_bytes_hash_in(self, rlp_buffer: &mut Vec) -> (usize, B256); } -impl<'a, I: Iterator> TxBytesHashExt for I -{ +impl<'a, I: Iterator> TxBytesHashExt for I { #[inline] fn tx_bytes_hash_in(self, rlp_buffer: &mut Vec) -> (usize, B256) { rlp_buffer.clear(); @@ -125,14 +137,17 @@ trait BlockChunkExt { /// Hash the l1 messages of the block fn encode_legacy_l1_msg(&self, buffer: &mut Vec); /// Hash the l1 messages of the block - fn hash_msg_queue(&self, initial_queue_hash: &B256, validium_txs: Option<(&[QueueTransaction], &SecretKey)>) -> B256; + fn hash_msg_queue( + &self, + initial_queue_hash: &B256, + validium_txs: Option<(&[QueueTransaction], &SecretKey)>, + ) -> B256; } impl BlockChunkExt for RecoveredBlock { #[inline] fn l1_txs_iter(&self) -> impl Iterator { - self - .body() + self.body() .transactions .iter() .filter_map(|tx| tx.as_l1_message()) @@ -165,8 +180,11 @@ impl BlockChunkExt for RecoveredBlock { } #[inline] - fn hash_msg_queue(&self, initial_queue_hash: &B256, validium_txs: Option<(&[QueueTransaction], &SecretKey)>) -> B256 - { + fn hash_msg_queue( + &self, + initial_queue_hash: &B256, + validium_txs: Option<(&[QueueTransaction], &SecretKey)>, + ) -> B256 { let mut rolling_hash = *initial_queue_hash; let mut buffer = [0u8; { size_of::() * 2 }]; @@ -187,7 +205,7 @@ impl BlockChunkExt for RecoveredBlock { }; if let Some((txs, secret_key)) = validium_txs { - for (validium_tx, tx_in_block) in txs.iter().zip_eq(self.l1_txs_iter()) { + for (validium_tx, tx_in_block) in txs.iter().zip_eq(self.l1_txs_iter()) { let validium_tx = TxL1Message::from(validium_tx); match validium::decrypt(&validium_tx, secret_key) { Ok(decrypted) => { @@ -224,9 +242,8 @@ impl ChunkWitnessExt for ChunkWitness { #[inline] fn rolling_msg_queue_hash(&self, blocks: &[RecoveredBlock]) -> Option { - (self.fork_name < ForkName::EuclidV2).then(|| blocks.rolling_msg_queue_hash( - self.prev_msg_queue_hash, - self.validium.as_ref(), - )) + (self.fork_name < ForkName::EuclidV2).then(|| { + blocks.rolling_msg_queue_hash(self.prev_msg_queue_hash, self.validium.as_ref()) + }) } } diff --git a/crates/types/chunk/src/types/validium.rs b/crates/types/chunk/src/types/validium.rs index b830ae1d..de5ecddc 100644 --- a/crates/types/chunk/src/types/validium.rs +++ b/crates/types/chunk/src/types/validium.rs @@ -1,7 +1,7 @@ #![allow(non_snake_case)] use alloy_primitives::{Address, Bytes}; -use alloy_sol_types::{sol, SolCall}; +use alloy_sol_types::{SolCall, sol}; use sbv_primitives::types::consensus::TxL1Message; pub use ecies::SecretKey; @@ -100,7 +100,7 @@ fn decrypt_data(data: &Bytes, secret_key: &SecretKey) -> Result Result { +fn decrypt_message(message: &Bytes, secret_key: &SecretKey) -> Result { if message.starts_with(&finalizeDepositERC20EncryptedCall::SELECTOR) { let finalizeDepositERC20EncryptedCall { token, @@ -121,7 +121,7 @@ fn decrypt_message(message: &Bytes, secret_key: &SecretKey) -> Result, @@ -73,12 +68,7 @@ pub struct ChunkWitness { } /// The validium inputs for the chunk witness. -#[derive( - Clone, - Debug, - serde::Deserialize, - serde::Serialize, -)] +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] pub struct ValidiumInputs { /// The validium transactions for each block in the chunk. pub validium_txs: Vec>, From 4ef6183264fb4638271a48f5323c67a18a2e7698 Mon Sep 17 00:00:00 2001 From: lightsing Date: Wed, 20 Aug 2025 16:45:45 +0800 Subject: [PATCH 25/84] make ecies openvm irrelevant --- Cargo.lock | 884 +++++++++++++--------- Cargo.toml | 3 +- crates/circuits/chunk-circuit/Cargo.toml | 4 +- crates/circuits/chunk-circuit/src/main.rs | 7 + crates/types/chunk/src/types.rs | 2 +- 5 files changed, 528 insertions(+), 372 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index eab2900b..7516f571 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,9 +24,9 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aead" @@ -92,27 +92,27 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-chains" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4195a29a4b87137b2bb02105e746102873bc03561805cf45c0e510c961f160e6" +checksum = "a379c0d821498c996ceb9e7519fc2dab8286c35a203c1fb95f80ecd66e07cf2f" dependencies = [ "alloy-primitives", "alloy-rlp", "num_enum", "serde", - "strum 0.27.1", + "strum 0.27.2", ] [[package]] name = "alloy-consensus" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda689f7287f15bd3582daba6be8d1545bad3740fd1fb778f629a1fe866bb43b" +checksum = "35f021a55afd68ff2364ccfddaa364fc9a38a72200cdc74fcfb8dc3231d38f2c" dependencies = [ - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.24", + "alloy-serde 1.0.25", "alloy-trie", "alloy-tx-macros", "auto_impl", @@ -125,20 +125,20 @@ dependencies = [ "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] name = "alloy-consensus-any" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5659581e41e8fe350ecc3593cb5c9dcffddfd550896390f2b78a07af67b0fa" +checksum = "5a0ecca7a71b1f88e63d19e2d9397ce56949d3dd3484fd73c73d0077dc5c93d4" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.24", + "alloy-serde 1.0.25", "serde", ] @@ -152,7 +152,7 @@ dependencies = [ "alloy-rlp", "crc", "serde", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -177,7 +177,7 @@ dependencies = [ "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -202,16 +202,16 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f35887da30b5fc50267109a3c61cd63e6ca1f45967983641053a40ee83468c1" +checksum = "7473a19f02b25f8e1e8c69d35f02c07245694d11bd91bfe00e9190ac106b3838" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.24", + "alloy-serde 1.0.25", "auto_impl", "c-kzg", "derive_more 2.0.1", @@ -227,7 +227,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2211ccd0f05e2fea4f767242957f5e8cfb08b127ea2e6a3c0d9e5b10e6bf67d9" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-hardforks", "alloy-primitives", "alloy-rpc-types-eth", @@ -237,18 +237,18 @@ dependencies = [ "op-alloy-consensus", "op-revm", "revm 27.1.0", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] name = "alloy-genesis" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d4009efea6f403b3a80531f9c6f70fc242399498ff71196a1688cc1c901f44" +checksum = "17b2c29f25098bfa4cd3d9ec7806e1506716931e188c7c0843284123831c2cf1" dependencies = [ - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", - "alloy-serde 1.0.24", + "alloy-serde 1.0.25", "alloy-trie", "serde", "serde_with", @@ -256,9 +256,9 @@ dependencies = [ [[package]] name = "alloy-hardforks" -version = "0.2.7" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977d2492ce210e34baf7b36afaacea272c96fbe6774c47e23f97d14033c0e94f" +checksum = "3165210652f71dfc094b051602bafd691f506c54050a174b1cba18fb5ef706a3" dependencies = [ "alloy-chains", "alloy-eip2124", @@ -282,14 +282,14 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d7980333dd9391719756ac28bc2afa9baa705fc70ffd11dc86ab078dd64477" +checksum = "1d540d962ddbc3e95153bafe56ccefeb16dfbffa52c5f7bdd66cd29ec8f52259" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", - "alloy-serde 1.0.24", + "alloy-serde 1.0.25", "serde", ] @@ -304,14 +304,14 @@ dependencies = [ "const-hex", "derive_more 2.0.1", "foldhash", - "hashbrown 0.15.4", - "indexmap 2.9.0", + "hashbrown 0.15.5", + "indexmap 2.10.0", "itoa", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "keccak-asm", "paste", "proptest", - "rand 0.9.1", + "rand 0.9.2", "rkyv", "ruint", "rustc-hash 2.1.1", @@ -339,42 +339,42 @@ checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "alloy-rpc-types-engine" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24c171377c0684e3860385f6d93fbfcc8ecc74f6cce8304c822bf1a50bacce0" +checksum = "9a1a77a23d609bca2e4a60f992dde5f987475cb064da355fa4dbd7cda2e1bb48" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", "alloy-rlp", "derive_more 2.0.1", - "strum 0.27.1", + "strum 0.27.2", ] [[package]] name = "alloy-rpc-types-eth" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b777b98526bbe5b7892ca22a7fd5f18ed624ff664a79f40d0f9f2bf94ba79a84" +checksum = "781d4d5020bea8f020e164f5593101c2e2f790d66d04a0727839d03bc4411ed7" dependencies = [ "alloy-consensus", "alloy-consensus-any", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-network-primitives", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.24", + "alloy-serde 1.0.25", "alloy-sol-types", "itertools 0.14.0", "serde", "serde_json", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -390,9 +390,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8d2c52adebf3e6494976c8542fbdf12f10123b26e11ad56f77274c16a2a039" +checksum = "30be84f45d4f687b00efaba1e6290cbf53ccc8f6b8fbb54e4c2f9d2a0474ce95" dependencies = [ "alloy-primitives", "serde", @@ -410,7 +410,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -422,11 +422,11 @@ dependencies = [ "alloy-sol-macro-input", "const-hex", "heck 0.5.0", - "indexmap 2.9.0", + "indexmap 2.10.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "syn-solidity", "tiny-keccak", ] @@ -443,7 +443,7 @@ dependencies = [ "macro-string", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "syn-solidity", ] @@ -471,9 +471,9 @@ dependencies = [ [[package]] name = "alloy-trie" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bada1fc392a33665de0dc50d401a3701b62583c655e3522a323490a5da016962" +checksum = "e3412d52bb97c6c6cc27ccc28d4e6e8cf605469101193b50b0bd5813b1f990b5" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -487,15 +487,15 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6acb36318dfa50817154064fea7932adf2eec3f51c86680e2b37d7e8906c66bb" +checksum = "72e29436068f836727d4e7c819ae6bf6f9c9e19a32e96fc23e814709a277f23a" dependencies = [ "alloy-primitives", - "darling", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -524,9 +524,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -554,29 +554,29 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "ark-bls12-381" @@ -615,7 +615,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "itertools 0.13.0", "num-bigint 0.4.6", "num-integer", @@ -708,7 +708,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -746,7 +746,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -761,7 +761,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -835,7 +835,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -886,13 +886,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -913,14 +913,14 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "az" @@ -941,7 +941,7 @@ dependencies = [ "object", "rustc-demangle", "serde", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -1008,9 +1008,9 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitcode" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf300f4aa6e66f3bdff11f1236a88c622fe47ea814524792240b4d554d9858ee" +checksum = "648bd963d2e5d465377acecfb4b827f9f553b6bc97a8f61715779e9ed9e52b74" dependencies = [ "arrayvec", "bitcode_derive", @@ -1021,13 +1021,13 @@ dependencies = [ [[package]] name = "bitcode_derive" -version = "0.6.5" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42b6b4cb608b8282dc3b53d0f4c9ab404655d562674c682db7e6c0458cc83c23" +checksum = "ffebfc2d28a12b262c303cb3860ee77b91bd83b1f20f0bd2a9693008e2f55a9e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1048,9 +1048,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" dependencies = [ "serde", ] @@ -1152,9 +1152,9 @@ dependencies = [ [[package]] name = "bon" -version = "3.6.3" +version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced38439e7a86a4761f7f7d5ded5ff009135939ecb464a24452eaa4c1696af7d" +checksum = "537c317ddf588aab15c695bf92cf55dec159b93221c074180ca3e0e5a94da415" dependencies = [ "bon-macros", "rustversion", @@ -1162,24 +1162,24 @@ dependencies = [ [[package]] name = "bon-macros" -version = "3.6.3" +version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce61d2d3844c6b8d31b2353d9f66cf5e632b3e9549583fe3cac2f4f6136725e" +checksum = "ca5abbf2d4a4c6896197c9de13d6d7cb7eff438c63dacde1dde980569cb00248" dependencies = [ - "darling", + "darling 0.21.2", "ident_case", "prettyplease", "proc-macro2", "quote", "rustversion", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "bumpalo" -version = "3.18.1" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "byte-slice-cast" @@ -1207,14 +1207,14 @@ checksum = "efb7846e0cb180355c2dec69e721edafa36919850f1a9f52ffba4ebc0393cb71" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "bytemuck" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" [[package]] name = "byteorder" @@ -1248,9 +1248,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0" dependencies = [ "serde", ] @@ -1314,7 +1314,7 @@ dependencies = [ "semver 1.0.26", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -1329,14 +1329,14 @@ dependencies = [ "semver 1.0.26", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] name = "cc" -version = "1.2.26" +version = "1.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956a5e21988b87f372569b66183b78babf23ebc2e744b733e4350a752c4dafac" +checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f" dependencies = [ "jobserver", "libc", @@ -1345,9 +1345,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "chrono" @@ -1376,9 +1376,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.39" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" +checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" dependencies = [ "clap_builder", "clap_derive", @@ -1386,9 +1386,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.39" +version = "4.5.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" +checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" dependencies = [ "anstream", "anstyle", @@ -1398,21 +1398,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.32" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "colorchoice" @@ -1427,14 +1427,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] name = "const-hex" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" +checksum = "dccd746bf9b1038c0507b7cec21eb2b11222db96a2902c96e8c185d6d20fb9c4" dependencies = [ "cfg-if", "cpufeatures", @@ -1584,9 +1584,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" @@ -1635,8 +1635,18 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08440b3dd222c3d0433e63e097463969485f112baff337dfdaca043a0d760570" +dependencies = [ + "darling_core 0.21.2", + "darling_macro 0.21.2", ] [[package]] @@ -1650,7 +1660,21 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.101", + "syn 2.0.106", +] + +[[package]] +name = "darling_core" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25b7912bc28a04ab1b7715a68ea03aaa15662b43a1a4b2c480531fd19f8bf7e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.106", ] [[package]] @@ -1659,9 +1683,20 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core", + "darling_core 0.20.11", "quote", - "syn 2.0.101", + "syn 2.0.106", +] + +[[package]] +name = "darling_macro" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce154b9bea7fb0c8e8326e62d00354000c36e79770ff21b8c84e3aa267d9d531" +dependencies = [ + "darling_core 0.21.2", + "quote", + "syn 2.0.106", ] [[package]] @@ -1703,7 +1738,7 @@ checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1714,18 +1749,18 @@ checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "derive-where" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510c292c8cf384b1a340b816a9a6cf2599eb8f566a44949024af88418000c50b" +checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1738,7 +1773,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1767,7 +1802,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "unicode-xid", ] @@ -1780,7 +1815,7 @@ dependencies = [ "convert_case 0.7.1", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "unicode-xid", ] @@ -1813,7 +1848,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1836,9 +1871,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" @@ -1858,14 +1893,14 @@ dependencies = [ [[package]] name = "ecies" version = "0.1.0" +source = "git+https://github.com/scroll-tech/ecies-rs#8ca7236a2db7d62183a8cc516aeb601690ccc177" dependencies = [ "aes-gcm", "digest 0.10.7", "hkdf", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", - "openvm-sha2", "sha2 0.10.9", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -1877,7 +1912,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1915,18 +1950,10 @@ dependencies = [ "zeroize", ] -[[package]] -name = "encoder" -version = "0.1.0" -source = "git+https://github.com/scroll-tech/da-codec.git?rev=ad2db39#ad2db39b5e1ef4532f98ad0de0cc4c4f5f059308" -dependencies = [ - "zstd", -] - [[package]] name = "encoder-standard" version = "0.1.0" -source = "git+https://github.com/scroll-tech/da-codec#2cfec8c99547b68dc64e2b020fa2b83cfb9c0e99" +source = "git+https://github.com/scroll-tech/da-codec.git#2cfec8c99547b68dc64e2b020fa2b83cfb9c0e99" dependencies = [ "zstd", ] @@ -1954,7 +1981,7 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1966,7 +1993,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1977,7 +2004,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -1998,12 +2025,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.60.2", ] [[package]] @@ -2194,7 +2221,7 @@ checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", ] [[package]] @@ -2211,14 +2238,14 @@ dependencies = [ [[package]] name = "getset" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3586f256131df87204eb733da72e3d3eb4f343c639f4b7be279ac7c48baeafe" +checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -2253,20 +2280,20 @@ checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "glam" -version = "0.30.3" +version = "0.30.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b46b9ca4690308844c644e7c634d68792467260e051c8543e0c7871662b3ba7" +checksum = "f2d1aab06663bdce00d6ca5e5ed586ec8d18033a771906c993a1e3755b368d85" [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "gmp-mpfr-sys" @@ -2275,7 +2302,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66d61197a68f6323b9afa616cf83d55d69191e1bf364d4eb7d35ae18defe776" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -2312,9 +2339,9 @@ dependencies = [ [[package]] name = "halo2-axiom" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f0ca78d12ac5c893f286d7cdfe3869290305ab8cac376e2592cdc8396da102" +checksum = "0aee3f8178b78275038e5ea0e2577140056d2c4c87fccaf6777dc0a8eebe455a" dependencies = [ "blake2b_simd", "crossbeam", @@ -2502,9 +2529,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", @@ -2527,9 +2554,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -2736,14 +2763,14 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "indenter" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" +checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" [[package]] name = "indexmap" @@ -2758,12 +2785,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "serde", ] @@ -2945,9 +2972,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.172" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libm" @@ -3031,7 +3058,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -3042,7 +3069,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3066,9 +3093,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memuse" @@ -3092,7 +3119,7 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62a6a1f7141f1d9bc7a886b87536bbfc97752e08b369e1e0453a9acfab5f5da4" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa", "lockfree-object-pool", "metrics", @@ -3113,7 +3140,7 @@ dependencies = [ "crossbeam-epoch", "crossbeam-utils", "hashbrown 0.14.5", - "indexmap 2.9.0", + "indexmap 2.10.0", "metrics", "num_cpus", "ordered-float 4.6.0", @@ -3124,9 +3151,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] @@ -3169,7 +3196,7 @@ checksum = "1bb5c1d8184f13f7d0ccbeeca0def2f9a181bce2624302793005f5ca8aa62e5e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3323,23 +3350,24 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" dependencies = [ "num_enum_derive", + "rustversion", ] [[package]] name = "num_enum_derive" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3356,9 +3384,9 @@ dependencies = [ [[package]] name = "nybbles" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "675b3a54e5b12af997abc8b6638b0aee51a28caedab70d4967e0d5db3a3f1d06" +checksum = "63cb50036b1ad148038105af40aaa70ff24d8a14fbc44ae5c914e1348533d12e" dependencies = [ "alloy-rlp", "cfg-if", @@ -3400,14 +3428,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c88d2940558fd69f8f07b3cbd7bb3c02fc7d31159c1a7ba9deede50e7881024" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.24", + "alloy-serde 1.0.25", "derive_more 2.0.1", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -3492,7 +3520,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-macros-common 1.3.0", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3502,7 +3530,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c4 dependencies = [ "openvm-macros-common 1.4.0-rc.4", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3546,7 +3574,7 @@ dependencies = [ "num-prime", "openvm-macros-common 1.3.0", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3558,7 +3586,7 @@ dependencies = [ "num-prime", "openvm-macros-common 1.4.0-rc.4", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3680,7 +3708,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "itertools 0.14.0", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3705,7 +3733,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "itertools 0.14.0", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3730,7 +3758,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c4 dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3740,7 +3768,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3816,7 +3844,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-macros-common 1.3.0", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3826,7 +3854,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c4 dependencies = [ "openvm-macros-common 1.4.0-rc.4", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3866,7 +3894,7 @@ version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3930,7 +3958,7 @@ name = "openvm-macros-common" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -3938,7 +3966,7 @@ name = "openvm-macros-common" version = "1.4.0-rc.4" source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -4017,7 +4045,7 @@ version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -5039,7 +5067,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -5086,12 +5114,12 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" +checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" dependencies = [ "memchr", - "thiserror 2.0.12", + "thiserror 2.0.16", "ucd-trie", ] @@ -5126,7 +5154,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -5224,12 +5252,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.33" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -5280,14 +5308,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -5303,7 +5331,7 @@ dependencies = [ "bitflags", "lazy_static", "num-traits", - "rand 0.9.1", + "rand 0.9.2", "rand_chacha 0.9.0", "rand_xorshift 0.4.0", "regex-syntax 0.8.5", @@ -5338,20 +5366,20 @@ checksum = "ca414edb151b4c8d125c12566ab0d74dc9cdba36fb80eb7b848c15f495fd32d1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "quanta" -version = "0.12.5" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" +checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" dependencies = [ "crossbeam-utils", "libc", "once_cell", "raw-cpuid", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "web-sys", "winapi", ] @@ -5373,9 +5401,9 @@ dependencies = [ [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "radium" @@ -5416,9 +5444,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -5493,9 +5521,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -5503,14 +5531,34 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] +[[package]] +name = "ref-cast" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "regex" version = "1.11.1" @@ -5571,7 +5619,7 @@ source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456 dependencies = [ "alloy-chains", "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-evm", "alloy-genesis", "alloy-primitives", @@ -5590,7 +5638,7 @@ version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-genesis", "alloy-primitives", "alloy-trie", @@ -5610,7 +5658,7 @@ dependencies = [ "convert_case 0.7.1", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -5618,7 +5666,7 @@ name = "reth-db-models" version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", "reth-primitives-traits", ] @@ -5641,7 +5689,7 @@ version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", "alloy-rlp", "reth-codecs", @@ -5656,7 +5704,7 @@ version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-evm", "alloy-primitives", "auto_impl", @@ -5678,7 +5726,7 @@ version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-evm", "alloy-primitives", "alloy-rpc-types-engine", @@ -5702,7 +5750,7 @@ dependencies = [ "alloy-rlp", "nybbles", "reth-storage-errors", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -5711,7 +5759,7 @@ version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-evm", "alloy-primitives", "derive_more 2.0.1", @@ -5729,7 +5777,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.16", "url", ] @@ -5752,7 +5800,7 @@ version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-genesis", "alloy-primitives", "alloy-rlp", @@ -5771,7 +5819,7 @@ dependencies = [ "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -5781,7 +5829,7 @@ source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456 dependencies = [ "alloy-primitives", "derive_more 2.0.1", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -5791,10 +5839,10 @@ source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456 dependencies = [ "alloy-chains", "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-genesis", "alloy-primitives", - "alloy-serde 1.0.24", + "alloy-serde 1.0.25", "auto_impl", "derive_more 2.0.1", "once_cell", @@ -5815,7 +5863,7 @@ version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-evm", "alloy-primitives", "alloy-rpc-types-engine", @@ -5835,7 +5883,7 @@ dependencies = [ "scroll-alloy-consensus", "scroll-alloy-evm", "scroll-alloy-hardforks", - "thiserror 2.0.12", + "thiserror 2.0.16", "tracing", ] @@ -5859,7 +5907,7 @@ version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", "alloy-rlp", "bytes", @@ -5887,7 +5935,7 @@ dependencies = [ "alloy-primitives", "derive_more 2.0.1", "serde", - "strum 0.27.1", + "strum 0.27.2", ] [[package]] @@ -5896,7 +5944,7 @@ version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", "alloy-rpc-types-engine", "auto_impl", @@ -5917,7 +5965,7 @@ name = "reth-storage-errors" version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", "alloy-rlp", "derive_more 2.0.1", @@ -5925,7 +5973,7 @@ dependencies = [ "reth-prune-types", "reth-static-file-types", "revm-database-interface 7.0.2", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -5934,7 +5982,7 @@ version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", "alloy-rlp", "alloy-trie", @@ -6131,7 +6179,7 @@ name = "revm-database" version = "7.0.2" source = "git+https://github.com/scroll-tech/revm#9cd9896c06a5bf6d4212906260d8789579873ba4" dependencies = [ - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "revm-bytecode 6.1.0", "revm-database-interface 7.0.2", "revm-primitives 20.1.0", @@ -6416,14 +6464,14 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e147371c75553e1e2fcdb483944a8540b8438c31426279553b9a8182a9b7b65" +checksum = "19f5c3e5da784cd8c69d32cdc84673f3204536ca56e1fa01be31a74b92c932ac" dependencies = [ "bytecheck", "bytes", - "hashbrown 0.15.4", - "indexmap 2.9.0", + "hashbrown 0.15.5", + "indexmap 2.10.0", "munge", "ptr_meta", "rancor", @@ -6435,13 +6483,13 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246b40ac189af6c675d124b802e8ef6d5246c53e17367ce9501f8f66a81abb7a" +checksum = "4270433626cffc9c4c1d3707dd681f2a2718d3d7b09ad754bec137acecda8d22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -6495,7 +6543,7 @@ dependencies = [ "primitive-types", "proptest", "rand 0.8.5", - "rand 0.9.1", + "rand 0.9.2", "rkyv", "rlp", "ruint-macro", @@ -6512,9 +6560,9 @@ checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -6554,22 +6602,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.60.2", ] [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-fork" @@ -6603,7 +6651,7 @@ dependencies = [ "sbv-primitives", "sbv-trie", "serde", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -6620,7 +6668,7 @@ version = "2.0.0" source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ "auto_impl", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "rustc-hash 2.1.1", ] @@ -6641,10 +6689,10 @@ version = "2.0.0" source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-evm", "alloy-primitives", - "alloy-serde 1.0.24", + "alloy-serde 1.0.25", "auto_impl", "itertools 0.14.0", "reth-chainspec", @@ -6681,7 +6729,31 @@ dependencies = [ "sbv-helpers", "sbv-kv", "sbv-primitives", - "thiserror 2.0.12", + "thiserror 2.0.16", +] + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", ] [[package]] @@ -6690,10 +6762,10 @@ version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-primitives", "alloy-rlp", - "alloy-serde 1.0.24", + "alloy-serde 1.0.25", "derive_more 2.0.1", "reth-codecs", "serde", @@ -6706,7 +6778,7 @@ version = "1.6.0" source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" dependencies = [ "alloy-consensus", - "alloy-eips 1.0.24", + "alloy-eips 1.0.25", "alloy-evm", "alloy-primitives", "auto_impl", @@ -6807,6 +6879,7 @@ name = "scroll-zkvm-chunk-circuit" version = "0.5.0" dependencies = [ "bincode 2.0.1", + "ecies", "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", "openvm 1.4.0-rc.4", "openvm-algebra-complex-macros 1.4.0-rc.4", @@ -6817,6 +6890,7 @@ dependencies = [ "openvm-pairing", "openvm-pairing-guest 1.4.0-rc.4", "openvm-rv32im-guest 1.4.0-rc.4", + "openvm-sha2", "p256 0.13.2 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", "rkyv", "sbv-precompile", @@ -6896,7 +6970,7 @@ dependencies = [ "serde_json", "serde_stacker", "snark-verifier-sdk", - "thiserror 2.0.12", + "thiserror 2.0.16", "toml", "tracing", ] @@ -6927,7 +7001,7 @@ name = "scroll-zkvm-types-base" version = "0.5.0" dependencies = [ "alloy-primitives", - "alloy-serde 1.0.24", + "alloy-serde 1.0.25", "itertools 0.14.0", "rkyv", "serde", @@ -6991,7 +7065,7 @@ dependencies = [ "sbv-trie", "scroll-zkvm-types-base", "serde", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -7067,7 +7141,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c3c81b43dc2d8877c216a3fccf76677ee1ebccd429566d3e67447290d0c42b2" dependencies = [ "bitcoin_hashes", - "rand 0.9.1", + "rand 0.9.2", "secp256k1-sys 0.11.0", ] @@ -7136,9 +7210,9 @@ dependencies = [ [[package]] name = "serde-untagged" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e" +checksum = "34836a629bcbc6f1afdf0907a744870039b1e14c0561cb26094fa683b158eff3" dependencies = [ "erased-serde", "serde", @@ -7181,16 +7255,16 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa", "memchr", "ryu", @@ -7218,15 +7292,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.9.0", + "indexmap 2.10.0", + "schemars 0.9.0", + "schemars 1.0.4", "serde", "serde_derive", "serde_json", @@ -7236,14 +7312,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" dependencies = [ - "darling", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -7400,9 +7476,9 @@ dependencies = [ [[package]] name = "sp1-lib" -version = "5.0.0" +version = "5.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03046db52868c1b60e8acffa0777ef6dc11ec1bbbb10b9eb612a871f69c8d3f6" +checksum = "0e1fe81b6f87134f9170cb642f948ae41e0ee1cd3785e0cb665add5b67106d1a" dependencies = [ "bincode 1.3.3", "serde", @@ -7411,9 +7487,9 @@ dependencies = [ [[package]] name = "sp1-primitives" -version = "5.0.0" +version = "5.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6939d6b2f63e54e5fbd208a0293027608f22511741b62fe32b6f67f6c144e0c0" +checksum = "dddd8d022840c1c500e0d7f82e9b9cf080b7dabd469f06b394010e6a594f692b" dependencies = [ "bincode 1.3.3", "blake3", @@ -7476,7 +7552,7 @@ dependencies = [ "cfg-if", "libc", "psm", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -7514,11 +7590,11 @@ dependencies = [ [[package]] name = "strum" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" dependencies = [ - "strum_macros 0.27.1", + "strum_macros 0.27.2", ] [[package]] @@ -7531,7 +7607,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -7544,20 +7620,19 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "strum_macros" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "rustversion", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -7579,9 +7654,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.101" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -7597,7 +7672,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -7608,7 +7683,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -7619,15 +7694,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys", + "windows-sys 0.60.2", ] [[package]] @@ -7648,7 +7723,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -7659,7 +7734,7 @@ checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "test-case-core", ] @@ -7674,11 +7749,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.16", ] [[package]] @@ -7689,28 +7764,27 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] @@ -7794,9 +7868,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -7834,7 +7908,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "serde", "serde_spanned", "toml_datetime", @@ -7861,13 +7935,13 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1ffbcf9c6f6b99d386e7444eb608ba646ae452a36b39737deb9663b610f662" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -8046,9 +8120,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" dependencies = [ "js-sys", "wasm-bindgen", @@ -8075,11 +8149,11 @@ checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1" [[package]] name = "vm-zstd" version = "0.1.1" -source = "git+https://github.com/scroll-tech/rust-zstd-decompressor.git?branch=master#0aa0c51819334a79bca90525ae87297fbaabd6d8" +source = "git+https://github.com/scroll-tech/rust-zstd-decompressor.git?branch=master#b0273278316245fef733df54cc29ee3baa3d7382" dependencies = [ "anyhow", "bitstream-io", - "encoder", + "encoder-standard", "itertools 0.11.0", "serde", "strum 0.25.0", @@ -8097,9 +8171,9 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" @@ -8132,7 +8206,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "wasm-bindgen-shared", ] @@ -8154,7 +8228,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -8221,7 +8295,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -8232,7 +8306,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -8265,7 +8339,16 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.3", ] [[package]] @@ -8274,14 +8357,31 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "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", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", ] [[package]] @@ -8290,53 +8390,101 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + [[package]] name = "winnow" -version = "0.7.10" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" +checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" dependencies = [ "memchr", ] @@ -8385,28 +8533,28 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -8426,7 +8574,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", "synstructure", ] @@ -8447,7 +8595,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] @@ -8463,9 +8611,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -8480,7 +8628,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.106", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 934f16a0..10cde8d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,8 +76,7 @@ bincode = { version = "2.0", features = ["serde"] } cargo_metadata = "0.20" c-kzg = { version = "2.0" } derivative = "2.2.0" -#ecies = { git = "https://github.com/scroll-tech/ecies-rs" } -ecies = { path = "../ecies-rs" } +ecies = { git = "https://github.com/scroll-tech/ecies-rs" } eyre = "0.6" halo2curves-axiom = { version = "0.5.3" } itertools = "0.14" diff --git a/crates/circuits/chunk-circuit/Cargo.toml b/crates/circuits/chunk-circuit/Cargo.toml index 407292c1..775a4780 100644 --- a/crates/circuits/chunk-circuit/Cargo.toml +++ b/crates/circuits/chunk-circuit/Cargo.toml @@ -7,9 +7,10 @@ version = "0.5.0" [dependencies] bincode = { workspace = true, features = ["serde"] } +ecies = { workspace = true } scroll-zkvm-types-circuit = { workspace = true } scroll-zkvm-types-chunk = { workspace = true } -sbv-precompile = { workspace = true } +sbv-precompile = { workspace = true } rkyv.workspace = true @@ -23,6 +24,7 @@ openvm-bigint-guest = { workspace = true } openvm-ecc-guest = { workspace = true } openvm-keccak256-guest= { workspace = true } openvm-pairing-guest = { workspace = true, features = ["bn254"] } +openvm-sha2 = { workspace = true } openvm-rv32im-guest= { workspace = true } [features] diff --git a/crates/circuits/chunk-circuit/src/main.rs b/crates/circuits/chunk-circuit/src/main.rs index 69143a57..2e831851 100644 --- a/crates/circuits/chunk-circuit/src/main.rs +++ b/crates/circuits/chunk-circuit/src/main.rs @@ -6,6 +6,13 @@ use circuit::ChunkCircuit as C; openvm::entry!(main); fn main() { + ecies::sha256::set_digest_provider(|| { + Box::new(ecies::sha256::ext::ExtSha256Core::new( + openvm_sha2::set_sha256, + )) + }) + .unwrap(); + let witness_bytes = C::read_witness_bytes(); let witness = C::deserialize_witness(&witness_bytes); diff --git a/crates/types/chunk/src/types.rs b/crates/types/chunk/src/types.rs index 737ce3cf..bbce617f 100644 --- a/crates/types/chunk/src/types.rs +++ b/crates/types/chunk/src/types.rs @@ -242,7 +242,7 @@ impl ChunkWitnessExt for ChunkWitness { #[inline] fn rolling_msg_queue_hash(&self, blocks: &[RecoveredBlock]) -> Option { - (self.fork_name < ForkName::EuclidV2).then(|| { + (self.fork_name >= ForkName::EuclidV2).then(|| { blocks.rolling_msg_queue_hash(self.prev_msg_queue_hash, self.validium.as_ref()) }) } From ef9982a9fb5ed595aae5826c0eb0f8dca0a164aa Mon Sep 17 00:00:00 2001 From: lightsing Date: Wed, 20 Aug 2025 16:49:26 +0800 Subject: [PATCH 26/84] add makefile --- Makefile | 3 +++ crates/integration/tests/chunk_circuit.rs | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 8f81f3d1..0348cba1 100644 --- a/Makefile +++ b/Makefile @@ -59,6 +59,9 @@ test-execute-chunk: test-execute-chunk-multi: @cargo test --release -p scroll-zkvm-integration --test chunk_circuit test_execute_multi -- --exact --nocapture +test-execute-validium-chunk: + @cargo test --release -p scroll-zkvm-integration --test chunk_circuit test_execute_validium -- --exact --nocapture + test-cycle: @cargo test --release -p scroll-zkvm-integration --test chunk_circuit test_cycle -- --exact --nocapture diff --git a/crates/integration/tests/chunk_circuit.rs b/crates/integration/tests/chunk_circuit.rs index 6721c848..7fe21a26 100644 --- a/crates/integration/tests/chunk_circuit.rs +++ b/crates/integration/tests/chunk_circuit.rs @@ -74,7 +74,7 @@ fn test_execute() -> eyre::Result<()> { } #[test] -fn test_validium_execute() -> eyre::Result<()> { +fn test_execute_validium() -> eyre::Result<()> { ChunkProverTester::setup()?; let prover = ChunkProverTester::load_prover(false)?; From 5bc5badec72a6e3bae536dc469fb4ab0e9873e5d Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Wed, 20 Aug 2025 23:45:22 +0000 Subject: [PATCH 27/84] fix download-release.sh --- download-release.sh | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/download-release.sh b/download-release.sh index 8644ee91..83330965 100644 --- a/download-release.sh +++ b/download-release.sh @@ -1,4 +1,5 @@ #!/bin/bash +set -xeu # release version SCROLL_ZKVM_VERSION=0.5.2 @@ -7,19 +8,23 @@ if [ -z "${SCROLL_ZKVM_VERSION}" ]; then exit 1 fi -# chunk-circuit exe -wget https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION/chunk/app.vmexe -O crates/circuits/chunk-circuit/openvm/app.vmexe +function download_by_s3() { + aws --profile default s3 cp s3://circuit-release/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION releases/$SCROLL_ZKVM_VERSION --recursive +} -# batch-circuit exe -wget https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION/batch/app.vmexe -O crates/circuits/batch-circuit/openvm/app.vmexe +function download_by_http() { + for f in chunk/app.vmexe \ + chunk/openvm.toml \ + verifier/openVmVk.json \ + verifier/verifier.bin \ + bundle/digest_1.hex \ + bundle/app.vmexe \ + bundle/digest_2.hex \ + bundle/openvm.toml \ + batch/app.vmexe \ + batch/openvm.toml; do + wget https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION/$f -O releases/$SCROLL_ZKVM_VERSION/$f + done +} -# bundle-circuit exe -wget https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION/bundle/app.vmexe -O crates/circuits/bundle-circuit/openvm/app.vmexe - -# bundle-circuit exe, legacy version, may not exist -wget https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION/bundle/app_euclidv1.vmexe -O crates/circuits/bundle-circuit/openvm/app_euclidv1.vmexe || echo "legacy app not exist for $SCROLL_ZKVM_VERSION" - -# assets for verifier-only mode -wget https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION/verifier/root-verifier-vm-config -O crates/verifier/testdata/root-verifier-vm-config -wget https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION/verifier/root-verifier-committed-exe -O crates/verifier/testdata/root-verifier-committed-exe -wget https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/$SCROLL_ZKVM_VERSION/verifier/verifier.bin -O crates/verifier/testdata/verifier.bin +download_by_http $SCROLL_ZKVM_VERSION From 115a396626ca90f96531d7b960a27eb2c7d12412 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 21 Aug 2025 00:33:11 +0000 Subject: [PATCH 28/84] proving 0.5.2 --- .github/workflows/build-guest-release.yml | 2 +- .github/workflows/lint.yml | 4 +- .github/workflows/profile-guest.yml | 2 +- Cargo.lock | 1 + Makefile | 2 +- crates/circuits/chunk-circuit/src/circuit.rs | 2 +- crates/integration/Cargo.toml | 1 + crates/integration/src/lib.rs | 74 +++++++++++++------- crates/integration/src/testers/batch.rs | 10 +-- crates/integration/src/testers/bundle.rs | 9 +-- crates/integration/src/testers/chunk.rs | 9 +-- crates/integration/src/utils/mod.rs | 2 +- crates/prover/src/task/mod.rs | 13 +--- crates/types/batch/src/witness.rs | 10 --- crates/types/bundle/src/witness.rs | 45 ------------ crates/types/chunk/src/witness.rs | 53 -------------- rust-toolchain.toml | 2 +- 17 files changed, 63 insertions(+), 178 deletions(-) diff --git a/.github/workflows/build-guest-release.yml b/.github/workflows/build-guest-release.yml index cc08c3d8..45a2969d 100644 --- a/.github/workflows/build-guest-release.yml +++ b/.github/workflows/build-guest-release.yml @@ -23,7 +23,7 @@ jobs: - name: Install Rust nightly toolchain uses: actions-rs/toolchain@v1 with: - toolchain: 1.86 + toolchain: nightly-2025-08-18 target: x86_64-unknown-linux-gnu components: rust-src override: true diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 9a1d8050..7a0674ea 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -40,7 +40,7 @@ jobs: - uses: dtolnay/rust-toolchain@56f84321dbccf38fb67ce29ab63e4754056677e0 with: - toolchain: "1.86" + toolchain: nightly-2025-08-18 components: rustfmt - name: Cargo fmt @@ -61,7 +61,7 @@ jobs: - uses: dtolnay/rust-toolchain@56f84321dbccf38fb67ce29ab63e4754056677e0 with: - toolchain: "1.86" + toolchain: nightly-2025-08-18 components: clippy - name: Clippy diff --git a/.github/workflows/profile-guest.yml b/.github/workflows/profile-guest.yml index 166ffadc..a477966e 100644 --- a/.github/workflows/profile-guest.yml +++ b/.github/workflows/profile-guest.yml @@ -25,7 +25,7 @@ jobs: - name: Setup rust uses: dtolnay/rust-toolchain@56f84321dbccf38fb67ce29ab63e4754056677e0 with: - toolchain: "1.86" + toolchain: nightly-2025-08-18 - name: Guest profiling to capture total_cycles id: guest-profiling diff --git a/Cargo.lock b/Cargo.lock index 3945520e..bfa9ffc0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6776,6 +6776,7 @@ name = "scroll-zkvm-integration" version = "0.5.0" dependencies = [ "alloy-primitives", + "bincode 2.0.1", "cargo_metadata 0.20.0", "chrono", "eyre", diff --git a/Makefile b/Makefile index 8f81f3d1..1d5b19e7 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ export RUST_BACKTRACE RUST_LOG ?= off,scroll_zkvm_integration=debug,scroll_zkvm_verifier=debug,scroll_zkvm_prover=debug,openvm_circuit=debug export RUST_LOG -OPENVM_RUST_TOOLCHAIN ?= nightly-2025-08-08 +OPENVM_RUST_TOOLCHAIN ?= nightly-2025-08-18 export OPENVM_RUST_TOOLCHAIN TESTDATA_PATH := crates/integration/testdata/phase2 diff --git a/crates/circuits/chunk-circuit/src/circuit.rs b/crates/circuits/chunk-circuit/src/circuit.rs index 53933266..7b706557 100644 --- a/crates/circuits/chunk-circuit/src/circuit.rs +++ b/crates/circuits/chunk-circuit/src/circuit.rs @@ -3,7 +3,7 @@ use scroll_zkvm_types_chunk::{ChunkWitness, execute}; use scroll_zkvm_types_circuit::{ Circuit, io::read_witnesses, - public_inputs::chunk::{ChunkInfo, VersionedChunkInfo}, + public_inputs::chunk::{VersionedChunkInfo}, }; #[allow(unused_imports, clippy::single_component_path_imports)] diff --git a/crates/integration/Cargo.toml b/crates/integration/Cargo.toml index a32dca17..d2b98971 100644 --- a/crates/integration/Cargo.toml +++ b/crates/integration/Cargo.toml @@ -23,6 +23,7 @@ openvm-native-transpiler = { workspace = true, default-features = false } openvm-transpiler = { workspace = true, default-features = false } alloy-primitives.workspace = true +bincode.workspace = true cargo_metadata.workspace = true eyre.workspace = true rayon.workspace = true diff --git a/crates/integration/src/lib.rs b/crates/integration/src/lib.rs index 69126267..ef1dc14f 100644 --- a/crates/integration/src/lib.rs +++ b/crates/integration/src/lib.rs @@ -1,6 +1,8 @@ +#![feature(trait_alias)] use cargo_metadata::MetadataCommand; use once_cell::sync::OnceCell; use openvm_sdk::StdIn; +use rkyv::util::AlignedVec; use scroll_zkvm_prover::{ Prover, utils::{read_json, vm::ExecutionResult, write_json}, @@ -24,12 +26,28 @@ pub mod utils; pub mod commitments; -pub trait PartialProvingTask { - fn identifier(&self) -> String; +/// Directory to store proofs on disc. +const DIR_PROOFS: &str = "proofs"; - fn write_guest_input(&self, stdin: &mut StdIn) -> Result<(), rkyv::rancor::Error>; +/// File descriptor for app openvm config. +const FD_APP_CONFIG: &str = "openvm.toml"; - fn fork_name(&self) -> ForkName; +/// File descriptor for app exe. +const FD_APP_EXE: &str = "app.vmexe"; + +/// Environment variable used to set the test-run's output directory for assets. +const ENV_OUTPUT_DIR: &str = "OUTPUT_DIR"; + +/// Enviroment settings for test: fork +pub fn testing_hardfork() -> ForkName { + ForkName::Feynman +} + +/// Read the 'GUEST_VERSION' from the environment variable. +/// If not existed, return "dev" as default +/// The returned value will be used to locate asset files: $workspace/releases/$guest_version +pub fn guest_version() -> String { + std::env::var("GUEST_VERSION").unwrap_or_else(|_| "dev".to_string()) } pub static WORKSPACE_ROOT: LazyLock<&Path> = LazyLock::new(|| { @@ -51,18 +69,6 @@ static DIR_OUTPUT: LazyLock<&Path> = LazyLock::new(|| { Box::leak(path.into_boxed_path()) }); -/// Directory to store proofs on disc. -const DIR_PROOFS: &str = "proofs"; - -/// File descriptor for app openvm config. -const FD_APP_CONFIG: &str = "openvm.toml"; - -/// File descriptor for app exe. -const FD_APP_EXE: &str = "app.vmexe"; - -/// Environment variable used to set the test-run's output directory for assets. -const ENV_OUTPUT_DIR: &str = "OUTPUT_DIR"; - /// Every test run will write assets to a new directory. /// /// Possibly one of the following: @@ -71,10 +77,32 @@ const ENV_OUTPUT_DIR: &str = "OUTPUT_DIR"; /// - /bundle-tests-{timestamp} static DIR_TESTRUN: OnceCell = OnceCell::new(); +pub trait WTF<'a> = rkyv::Serialize, rkyv::rancor::Error>>; + +pub trait PartialProvingTask: rkyv::Archive + for<'a> WTF<'a> + serde::Serialize { + fn identifier(&self) -> String; + fn fork_name(&self) -> ForkName; + + fn write_guest_input(&self, stdin: &mut StdIn) -> eyre::Result<()> + where + Self: Sized, + { + let bytes: Vec = match guest_version().as_str() { + "0.5.2" => rkyv::to_bytes::(self)?.as_slice().to_vec(), + _ => { + let config = bincode::config::standard(); + bincode::serde::encode_to_vec(&self, config)? + } + }; + stdin.write_bytes(&bytes); + Ok(()) + } +} + /// Circuit that implements functionality required to run e2e tests in specified phase (chunk/batch/bundle). pub trait ProverTester { /// Tester witness type - type Witness: PartialProvingTask; // + rkyv::Archive; + type Witness: PartialProvingTask; /// Tester metadata type type Metadata; //: for<'a> TryFrom<&'a ::Archived>; @@ -121,7 +149,7 @@ pub trait ProverTester { /// Load the app config. fn load() -> eyre::Result<(PathBuf, PathBuf)> { - let assets_version = "dev"; + let assets_version = guest_version(); let release_dir = WORKSPACE_ROOT.join("releases").join(assets_version); let path_app_config = release_dir.join(Self::NAME).join(FD_APP_CONFIG); let path_app_exe = release_dir.join(Self::NAME).join(FD_APP_EXE); @@ -159,7 +187,7 @@ pub trait ProverTester { fn build_guest_input<'a>( witness: &Self::Witness, aggregated_proofs: impl Iterator, - ) -> Result { + ) -> eyre::Result { use openvm_native_recursion::hints::Hintable; let mut stdin = StdIn::default(); @@ -173,11 +201,7 @@ pub trait ProverTester { } Ok(stdin) } -} - -/// Enviroment settings for test: fork -pub fn testing_hardfork() -> ForkName { - ForkName::Feynman + } /// Enviroment settings for test: fork dir @@ -327,7 +351,7 @@ where // Dump verifier-only assets to disk. let path_verifier_code = WORKSPACE_ROOT .join("releases") - .join("dev") + .join(guest_version()) .join("verifier") .join("verifier.bin"); let verifier = scroll_zkvm_verifier::verifier::UniversalVerifier::setup(&path_verifier_code)?; diff --git a/crates/integration/src/testers/batch.rs b/crates/integration/src/testers/batch.rs index 3a49ae8d..e6df73a7 100644 --- a/crates/integration/src/testers/batch.rs +++ b/crates/integration/src/testers/batch.rs @@ -8,9 +8,7 @@ use scroll_zkvm_types::{ }; use crate::{ - PartialProvingTask, ProverTester, prove_verify, - testers::chunk::{ChunkTaskGenerator, preset_chunk_multiple}, - utils::build_batch_witnesses, + prove_verify, testers::chunk::{preset_chunk_multiple, ChunkTaskGenerator}, utils::build_batch_witnesses, PartialProvingTask, ProverTester }; impl PartialProvingTask for BatchWitness { @@ -23,12 +21,6 @@ impl PartialProvingTask for BatchWitness { header_hash.to_string() } - fn write_guest_input(&self, stdin: &mut openvm_sdk::StdIn) -> Result<(), rkyv::rancor::Error> { - let b = self.bincode_serialize(None).unwrap(); - stdin.write_bytes(b.as_slice()); - Ok(()) - } - fn fork_name(&self) -> ForkName { ForkName::from(self.fork_name.as_str()) } diff --git a/crates/integration/src/testers/bundle.rs b/crates/integration/src/testers/bundle.rs index 1f7348d3..98b45077 100644 --- a/crates/integration/src/testers/bundle.rs +++ b/crates/integration/src/testers/bundle.rs @@ -9,8 +9,7 @@ use scroll_zkvm_types::{ use scroll_zkvm_prover::Prover; use crate::{ - PartialProvingTask, ProverTester, prove_verify_single_evm, testers::batch::BatchTaskGenerator, - testing_hardfork, utils::metadata_from_batch_witnesses, + prove_verify_single_evm, testers::batch::BatchTaskGenerator, testing_hardfork, utils::metadata_from_batch_witnesses, PartialProvingTask, ProverTester }; impl PartialProvingTask for BundleWitness { @@ -23,12 +22,6 @@ impl PartialProvingTask for BundleWitness { format!("{first}-{last}") } - fn write_guest_input(&self, stdin: &mut openvm_sdk::StdIn) -> Result<(), rkyv::rancor::Error> { - let b = self.bincode_serialize(None).unwrap(); - stdin.write_bytes(b.as_slice()); - Ok(()) - } - fn fork_name(&self) -> ForkName { ForkName::from(self.fork_name.as_str()) } diff --git a/crates/integration/src/testers/chunk.rs b/crates/integration/src/testers/chunk.rs index 3ad9c26b..04804e0c 100644 --- a/crates/integration/src/testers/chunk.rs +++ b/crates/integration/src/testers/chunk.rs @@ -12,8 +12,7 @@ use scroll_zkvm_types::{ }; use crate::{ - PartialProvingTask, ProverTester, prove_verify, testdata_fork_directory, - testers::PATH_TESTDATA, testing_hardfork, utils::metadata_from_chunk_witnesses, + prove_verify, testdata_fork_directory, testers::PATH_TESTDATA, testing_hardfork, utils::metadata_from_chunk_witnesses, PartialProvingTask, ProverTester }; /// Load a file .json in the directory. @@ -50,12 +49,6 @@ impl PartialProvingTask for ChunkWitness { format!("{first}-{last}") } - fn write_guest_input(&self, stdin: &mut openvm_sdk::StdIn) -> Result<(), rkyv::rancor::Error> { - let b = self.bincode_serialize(None).unwrap(); - stdin.write_bytes(b.as_slice()); - Ok(()) - } - fn fork_name(&self) -> ForkName { ForkName::from(self.fork_name.as_str()) } diff --git a/crates/integration/src/utils/mod.rs b/crates/integration/src/utils/mod.rs index 8c5b8f4d..2dda0c72 100644 --- a/crates/integration/src/utils/mod.rs +++ b/crates/integration/src/utils/mod.rs @@ -1,6 +1,6 @@ use crate::testing_hardfork; use sbv_primitives::{ - B256, U256, + B256, types::{BlockWitness, Transaction, eips::Encodable2718, reth::primitives::TransactionSigned}, }; use scroll_zkvm_types::{ diff --git a/crates/prover/src/task/mod.rs b/crates/prover/src/task/mod.rs index f74754da..7188984b 100644 --- a/crates/prover/src/task/mod.rs +++ b/crates/prover/src/task/mod.rs @@ -42,15 +42,4 @@ impl ProvingTask for UniversalProvingTask { fn fork_name(&self) -> ForkName { ForkName::from(self.fork_name.as_str()) } -} -/// Read the 'GUEST_VERSION' from the environment variable. -/// Mainly used for testing purposes to specify the guest version -pub fn guest_version() -> Option { - std::env::var("GUEST_VERSION").ok().and_then(|v| { - if v.is_empty() { - None - } else { - Some(ForkName::from(v.as_str())) - } - }) -} +} \ No newline at end of file diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index b02545f2..26f82e3d 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -88,16 +88,6 @@ pub struct BatchWitness { pub fork_name: ForkName, } -impl BatchWitness { - pub fn bincode_serialize( - &self, - guest_version: Option, - ) -> Result, bincode::error::EncodeError> { - let config = bincode::config::standard(); - bincode::serde::encode_to_vec(&self, config) - } -} - impl ProofCarryingWitness for BatchWitness { fn get_proofs(&self) -> Vec { self.chunk_proofs.clone() diff --git a/crates/types/bundle/src/witness.rs b/crates/types/bundle/src/witness.rs index 0dd6da08..19b7648c 100644 --- a/crates/types/bundle/src/witness.rs +++ b/crates/types/bundle/src/witness.rs @@ -5,18 +5,6 @@ use types_base::{ public_inputs::{batch::BatchInfo, bundle::BundleInfo}, }; -/// The witness for the bundle circuit. -#[derive(Clone, Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize)] -#[rkyv(derive(Debug))] -pub struct BundleWitnessEuclid { - /// Batch proofs being aggregated in the bundle. - #[rkyv()] - pub batch_proofs: Vec, - /// Public-input values for the corresponding batch proofs. - #[rkyv()] - pub batch_infos: Vec, -} - /// The witness for the bundle circuit. #[derive( Clone, @@ -40,39 +28,6 @@ pub struct BundleWitness { pub fork_name: ForkName, } -impl BundleWitness { - /// Convert the `BundleWitness` into a `BundleWitnessEuclid`. - pub fn into_euclid(self) -> BundleWitnessEuclid { - BundleWitnessEuclid { - batch_proofs: self.batch_proofs, - batch_infos: self.batch_infos, - } - } - - pub fn bincode_serialize( - &self, - guest_version: Option, - ) -> Result, bincode::error::EncodeError> { - let config = bincode::config::standard(); - bincode::serde::encode_to_vec(&self, config) - } - - /// See ChunkWitnessEuclid::rkyv_serialize for details. - pub fn rkyv_serialize( - &self, - guest_version: Option, - ) -> Result { - let guest_version = guest_version.unwrap_or(self.fork_name); - if guest_version >= ForkName::Feynman { - // Use the new rkyv serialization for Feynman and later forks - rkyv::to_bytes::(self) - } else { - // Use the old rkyv serialization for earlier forks - rkyv::to_bytes::(&self.clone().into_euclid()) - } - } -} - impl ProofCarryingWitness for BundleWitness { fn get_proofs(&self) -> Vec { self.batch_proofs.clone() diff --git a/crates/types/chunk/src/witness.rs b/crates/types/chunk/src/witness.rs index 2f44e689..46643dce 100644 --- a/crates/types/chunk/src/witness.rs +++ b/crates/types/chunk/src/witness.rs @@ -5,26 +5,6 @@ use sbv_primitives::{U256, types::BlockWitness}; use std::collections::HashSet; use types_base::{fork_name::ForkName, public_inputs::chunk::ChunkInfo}; -/// The witness type accepted by the chunk-circuit. -#[derive( - Clone, - Debug, - serde::Deserialize, - serde::Serialize, - rkyv::Archive, - rkyv::Deserialize, - rkyv::Serialize, -)] -#[rkyv(derive(Debug))] -pub struct ChunkWitnessEuclid { - /// The block witness for each block in the chunk. - pub blocks: Vec, - /// The on-chain rolling L1 message queue hash before enqueueing any L1 msg tx from the chunk. - pub prev_msg_queue_hash: B256, - /// The code version specify the chain spec - pub fork_name: ForkName, -} - /// The witness type accepted by the chunk-circuit. #[derive( Clone, @@ -98,39 +78,6 @@ impl ChunkWitness { state_commit_mode: StateCommitMode::Auto, } } - /// Convert the `ChunkWitness` into a `ChunkWitnessEuclid`. - pub fn into_euclid(self) -> ChunkWitnessEuclid { - ChunkWitnessEuclid { - blocks: self.blocks, - prev_msg_queue_hash: self.prev_msg_queue_hash, - fork_name: self.fork_name, - } - } - pub fn bincode_serialize( - &self, - guest_version: Option, - ) -> Result, bincode::error::EncodeError> { - let config = bincode::config::standard(); - bincode::serde::encode_to_vec(&self, config) - } - /// `guest_version` is related to the guest program. - /// It is not always same with the evm hardfork. - /// For example, a `Feynman` guest program can execute `EuclidV2` blocks. - /// While in realworld, we keep them same. - /// Only during development, we may use different versions. - pub fn rkyv_serialize( - &self, - guest_version: Option, - ) -> Result { - let guest_version = guest_version.unwrap_or(self.fork_name); - if guest_version >= ForkName::Feynman { - // Use the new rkyv serialization for Feynman and later forks - rkyv::to_bytes::(self) - } else { - // Use the old rkyv serialization for earlier forks - rkyv::to_bytes::(&self.clone().into_euclid()) - } - } pub fn stats(&self) -> ChunkDetails { let num_blocks = self.blocks.len(); diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 851af0bd..b6beaa29 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.88" +channel = "nightly-2025-08-18" targets = ["riscv32im-unknown-none-elf", "x86_64-unknown-linux-gnu"] components = ["llvm-tools", "rustc-dev"] From 3f0259f8c18a87dbd9d500d49ac25452474e31ca Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 21 Aug 2025 01:08:03 +0000 Subject: [PATCH 29/84] fix tx data len --- crates/circuits/chunk-circuit/src/circuit.rs | 4 +--- crates/integration/src/lib.rs | 17 ++++++++++----- crates/integration/src/testers/batch.rs | 4 +++- crates/integration/src/testers/bundle.rs | 3 ++- crates/integration/src/testers/chunk.rs | 3 ++- crates/integration/tests/batch_circuit.rs | 2 +- crates/integration/tests/bundle_circuit.rs | 2 +- crates/prover/src/prover/mod.rs | 10 +++++---- crates/prover/src/task/mod.rs | 2 +- crates/types/base/src/public_inputs/chunk.rs | 22 -------------------- crates/types/batch/src/witness.rs | 2 +- crates/types/chunk/src/types.rs | 6 +++--- 12 files changed, 33 insertions(+), 44 deletions(-) diff --git a/crates/circuits/chunk-circuit/src/circuit.rs b/crates/circuits/chunk-circuit/src/circuit.rs index 7b706557..63f38630 100644 --- a/crates/circuits/chunk-circuit/src/circuit.rs +++ b/crates/circuits/chunk-circuit/src/circuit.rs @@ -1,9 +1,7 @@ use openvm::init; use scroll_zkvm_types_chunk::{ChunkWitness, execute}; use scroll_zkvm_types_circuit::{ - Circuit, - io::read_witnesses, - public_inputs::chunk::{VersionedChunkInfo}, + Circuit, io::read_witnesses, public_inputs::chunk::VersionedChunkInfo, }; #[allow(unused_imports, clippy::single_component_path_imports)] diff --git a/crates/integration/src/lib.rs b/crates/integration/src/lib.rs index ef1dc14f..f2847667 100644 --- a/crates/integration/src/lib.rs +++ b/crates/integration/src/lib.rs @@ -43,7 +43,7 @@ pub fn testing_hardfork() -> ForkName { ForkName::Feynman } -/// Read the 'GUEST_VERSION' from the environment variable. +/// Read the 'GUEST_VERSION' from the environment variable. /// If not existed, return "dev" as default /// The returned value will be used to locate asset files: $workspace/releases/$guest_version pub fn guest_version() -> String { @@ -77,7 +77,13 @@ static DIR_OUTPUT: LazyLock<&Path> = LazyLock::new(|| { /// - /bundle-tests-{timestamp} static DIR_TESTRUN: OnceCell = OnceCell::new(); -pub trait WTF<'a> = rkyv::Serialize, rkyv::rancor::Error>>; +pub trait WTF<'a> = rkyv::Serialize< + rkyv::api::high::HighSerializer< + AlignedVec, + rkyv::ser::allocator::ArenaHandle<'a>, + rkyv::rancor::Error, + >, + >; pub trait PartialProvingTask: rkyv::Archive + for<'a> WTF<'a> + serde::Serialize { fn identifier(&self) -> String; @@ -88,7 +94,9 @@ pub trait PartialProvingTask: rkyv::Archive + for<'a> WTF<'a> + serde::Serialize Self: Sized, { let bytes: Vec = match guest_version().as_str() { - "0.5.2" => rkyv::to_bytes::(self)?.as_slice().to_vec(), + "0.5.2" => rkyv::to_bytes::(self)? + .as_slice() + .to_vec(), _ => { let config = bincode::config::standard(); bincode::serde::encode_to_vec(&self, config)? @@ -201,7 +209,6 @@ pub trait ProverTester { } Ok(stdin) } - } /// Enviroment settings for test: fork dir @@ -333,7 +340,7 @@ pub fn prove_verify( /// End-to-end test for a single proving task to generate an EVM-verifiable SNARK proof. #[instrument(name = "prove_verify_single_evm", skip_all)] pub fn prove_verify_single_evm( - prover: &Prover, + prover: &mut Prover, witness: &T::Witness, proofs: &[ProofEnum], ) -> eyre::Result diff --git a/crates/integration/src/testers/batch.rs b/crates/integration/src/testers/batch.rs index e6df73a7..b96ccf38 100644 --- a/crates/integration/src/testers/batch.rs +++ b/crates/integration/src/testers/batch.rs @@ -8,7 +8,9 @@ use scroll_zkvm_types::{ }; use crate::{ - prove_verify, testers::chunk::{preset_chunk_multiple, ChunkTaskGenerator}, utils::build_batch_witnesses, PartialProvingTask, ProverTester + PartialProvingTask, ProverTester, prove_verify, + testers::chunk::{ChunkTaskGenerator, preset_chunk_multiple}, + utils::build_batch_witnesses, }; impl PartialProvingTask for BatchWitness { diff --git a/crates/integration/src/testers/bundle.rs b/crates/integration/src/testers/bundle.rs index 98b45077..84356af7 100644 --- a/crates/integration/src/testers/bundle.rs +++ b/crates/integration/src/testers/bundle.rs @@ -9,7 +9,8 @@ use scroll_zkvm_types::{ use scroll_zkvm_prover::Prover; use crate::{ - prove_verify_single_evm, testers::batch::BatchTaskGenerator, testing_hardfork, utils::metadata_from_batch_witnesses, PartialProvingTask, ProverTester + PartialProvingTask, ProverTester, prove_verify_single_evm, testers::batch::BatchTaskGenerator, + testing_hardfork, utils::metadata_from_batch_witnesses, }; impl PartialProvingTask for BundleWitness { diff --git a/crates/integration/src/testers/chunk.rs b/crates/integration/src/testers/chunk.rs index 04804e0c..4b1f7efe 100644 --- a/crates/integration/src/testers/chunk.rs +++ b/crates/integration/src/testers/chunk.rs @@ -12,7 +12,8 @@ use scroll_zkvm_types::{ }; use crate::{ - prove_verify, testdata_fork_directory, testers::PATH_TESTDATA, testing_hardfork, utils::metadata_from_chunk_witnesses, PartialProvingTask, ProverTester + PartialProvingTask, ProverTester, prove_verify, testdata_fork_directory, + testers::PATH_TESTDATA, testing_hardfork, utils::metadata_from_chunk_witnesses, }; /// Load a file .json in the directory. diff --git a/crates/integration/tests/batch_circuit.rs b/crates/integration/tests/batch_circuit.rs index 455fc292..5df38ab8 100644 --- a/crates/integration/tests/batch_circuit.rs +++ b/crates/integration/tests/batch_circuit.rs @@ -28,7 +28,7 @@ fn setup_prove_verify_single() -> eyre::Result<()> { BatchProverTester::setup()?; let u_task = load_local_task("batch-task.json")?; - let prover = BatchProverTester::load_prover(false)?; + let mut prover = BatchProverTester::load_prover(false)?; let _ = prover.gen_proof_universal(&u_task, false)?; diff --git a/crates/integration/tests/bundle_circuit.rs b/crates/integration/tests/bundle_circuit.rs index b5330fe2..35ec19a3 100644 --- a/crates/integration/tests/bundle_circuit.rs +++ b/crates/integration/tests/bundle_circuit.rs @@ -73,7 +73,7 @@ fn print_vks() -> eyre::Result<()> { fn setup_prove_verify_local_task() -> eyre::Result<()> { BundleProverTester::setup()?; let u_task = load_local_task("bundle-task.json")?; - let prover = BundleProverTester::load_prover(true)?; + let mut prover = BundleProverTester::load_prover(true)?; let _ = prover.gen_proof_universal(&u_task, true)?; diff --git a/crates/prover/src/prover/mod.rs b/crates/prover/src/prover/mod.rs index 3d1ce340..6fca0ff8 100644 --- a/crates/prover/src/prover/mod.rs +++ b/crates/prover/src/prover/mod.rs @@ -95,11 +95,10 @@ impl Prover { &app_pk.leaf_committed_exe, ); - let evm_prover = with_evm.then(Self::setup_evm_prover).transpose()?; Ok(Self { app_committed_exe, app_pk: Arc::new(app_pk), - evm_prover, + evm_prover: None, commits, config, prover_name: name.unwrap_or("universal").to_string(), @@ -135,7 +134,7 @@ impl Prover { /// otherwise generate and return the proof after writing to disc. #[instrument("Prover::gen_proof_universal", skip_all, fields(task_id))] pub fn gen_proof_universal( - &self, + &mut self, task: &impl ProvingTask, with_snark: bool, ) -> Result { @@ -269,10 +268,13 @@ impl Prover { /// Generate an [evm proof][evm_proof]. /// /// [evm_proof][openvm_native_recursion::halo2::EvmProof] - pub fn gen_proof_snark(&self, stdin: StdIn) -> Result { + pub fn gen_proof_snark(&mut self, stdin: StdIn) -> Result { self.execute_and_check(&stdin)?; let sdk = Sdk::new(); + if self.evm_prover.is_none() { + self.evm_prover = Some(Self::setup_evm_prover()?); + } let evm_prover = self.evm_prover.as_ref().expect("evm prover not inited"); let evm_proof = sdk .generate_evm_proof( diff --git a/crates/prover/src/task/mod.rs b/crates/prover/src/task/mod.rs index 7188984b..2ffe6d4b 100644 --- a/crates/prover/src/task/mod.rs +++ b/crates/prover/src/task/mod.rs @@ -42,4 +42,4 @@ impl ProvingTask for UniversalProvingTask { fn fork_name(&self) -> ForkName { ForkName::from(self.fork_name.as_str()) } -} \ No newline at end of file +} diff --git a/crates/types/base/src/public_inputs/chunk.rs b/crates/types/base/src/public_inputs/chunk.rs index ef2671fe..fbb3f952 100644 --- a/crates/types/base/src/public_inputs/chunk.rs +++ b/crates/types/base/src/public_inputs/chunk.rs @@ -190,28 +190,6 @@ impl ChunkInfo { } } -impl From<&ArchivedChunkInfo> for ChunkInfo { - fn from(archived: &ArchivedChunkInfo) -> Self { - Self { - chain_id: archived.chain_id.into(), - prev_state_root: archived.prev_state_root.into(), - post_state_root: archived.post_state_root.into(), - withdraw_root: archived.withdraw_root.into(), - data_hash: archived.data_hash.into(), - tx_data_digest: archived.tx_data_digest.into(), - prev_msg_queue_hash: archived.prev_msg_queue_hash.into(), - post_msg_queue_hash: archived.post_msg_queue_hash.into(), - tx_data_length: archived.tx_data_length.into(), - initial_block_number: archived.initial_block_number.into(), - block_ctxs: archived - .block_ctxs - .iter() - .map(BlockContextV2::from) - .collect(), - } - } -} - pub type VersionedChunkInfo = (ChunkInfo, ForkName); impl MultiVersionPublicInputs for ChunkInfo { diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index 26f82e3d..8b43b37e 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -1,5 +1,5 @@ use types_base::{ - aggregation::{AggregationInput, ProgramCommitment, ProofCarryingWitness}, + aggregation::{AggregationInput, ProofCarryingWitness}, public_inputs::{ForkName, batch::BatchInfo, chunk::ChunkInfo}, }; diff --git a/crates/types/chunk/src/types.rs b/crates/types/chunk/src/types.rs index 975cf1da..5568a828 100644 --- a/crates/types/chunk/src/types.rs +++ b/crates/types/chunk/src/types.rs @@ -83,8 +83,7 @@ trait TxBytesHashExt { fn tx_bytes_hash_in(self, rlp_buffer: &mut Vec) -> (usize, B256); } -impl<'a, I: Iterator> TxBytesHashExt for I -{ +impl<'a, I: Iterator> TxBytesHashExt for I { #[inline] fn tx_bytes_hash_in(self, rlp_buffer: &mut Vec) -> (usize, B256) { rlp_buffer.clear(); @@ -93,8 +92,9 @@ impl<'a, I: Iterator> TxBytesHashExt for I tx.encode_2718(rlp_buffer); } let hash = keccak256(&rlp_buffer); + let len = rlp_buffer.len(); rlp_buffer.clear(); - (rlp_buffer.len(), hash) + (len, hash) } } From ebdf5165bc9a927cb80b90b0beec243970018cec Mon Sep 17 00:00:00 2001 From: Akase Haruka Date: Thu, 21 Aug 2025 19:09:50 +0800 Subject: [PATCH 30/84] feat: update sbv bincode (#169) --- Cargo.lock | 46 +++++++++++++++--- Cargo.toml | 12 ++--- crates/circuits/batch-circuit/src/circuit.rs | 24 ++++------ crates/circuits/batch-circuit/src/main.rs | 4 +- crates/circuits/bundle-circuit/src/circuit.rs | 24 ++++------ crates/circuits/bundle-circuit/src/main.rs | 4 +- .../chunk-circuit/chunk_exe_commit.rs | 2 +- crates/circuits/chunk-circuit/src/circuit.rs | 11 ++--- crates/integration/src/lib.rs | 16 ++----- crates/integration/src/testers/batch.rs | 4 ++ crates/integration/src/testers/bundle.rs | 4 ++ crates/integration/src/testers/chunk.rs | 10 ++-- crates/integration/src/utils/mod.rs | 23 ++++----- crates/integration/tests/chunk_circuit.rs | 2 +- crates/types/chunk/src/execute.rs | 8 ++-- crates/types/chunk/src/lib.rs | 2 +- crates/types/chunk/src/witness.rs | 47 +++++++++++++++---- crates/types/circuit/src/lib.rs | 22 ++++++++- 18 files changed, 168 insertions(+), 97 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bfa9ffc0..863b487b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -307,6 +307,17 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "alloy-rpc-types-debug" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c6a6c8ae298c2739706ee3cd996c220b0ea406e6841a4e4290c7336edd5f811" +dependencies = [ + "alloy-primitives", + "derive_more 2.0.1", + "serde", +] + [[package]] name = "alloy-rpc-types-engine" version = "1.0.24" @@ -6515,7 +6526,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "sbv-core" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Frefactor#d836d4e9c6cfcaf288daa8f82206f5ef8e5bbc01" dependencies = [ "cfg-if", "itertools 0.14.0", @@ -6532,7 +6543,7 @@ dependencies = [ [[package]] name = "sbv-helpers" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Frefactor#d836d4e9c6cfcaf288daa8f82206f5ef8e5bbc01" dependencies = [ "tracing", ] @@ -6540,7 +6551,7 @@ dependencies = [ [[package]] name = "sbv-kv" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Frefactor#d836d4e9c6cfcaf288daa8f82206f5ef8e5bbc01" dependencies = [ "auto_impl", "hashbrown 0.15.5", @@ -6550,7 +6561,7 @@ dependencies = [ [[package]] name = "sbv-precompile" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Frefactor#d836d4e9c6cfcaf288daa8f82206f5ef8e5bbc01" dependencies = [ "openvm-ecc-guest 1.4.0-rc.4", "openvm-pairing", @@ -6561,12 +6572,14 @@ dependencies = [ [[package]] name = "sbv-primitives" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Frefactor#d836d4e9c6cfcaf288daa8f82206f5ef8e5bbc01" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", "alloy-evm", "alloy-primitives", + "alloy-rpc-types-debug", + "alloy-rpc-types-eth", "alloy-serde 1.0.24", "auto_impl", "itertools 0.14.0", @@ -6588,17 +6601,19 @@ dependencies = [ "sbv-kv", "scroll-alloy-consensus", "scroll-alloy-evm", + "scroll-alloy-rpc-types", "serde", - "tiny-keccak", + "serde_with", ] [[package]] name = "sbv-trie" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#bf77779ebc14fa6d3f18e25c0dd4101422c29da2" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Frefactor#d836d4e9c6cfcaf288daa8f82206f5ef8e5bbc01" dependencies = [ "alloy-rlp", "alloy-trie", + "auto_impl", "reth-trie", "reth-trie-sparse", "sbv-helpers", @@ -6675,6 +6690,23 @@ dependencies = [ "serde", ] +[[package]] +name = "scroll-alloy-rpc-types" +version = "1.6.0" +source = "git+https://github.com/scroll-tech/reth?rev=a6f827a71c5523d1d32e579456dfdab2cb003c66#a6f827a71c5523d1d32e579456dfdab2cb003c66" +dependencies = [ + "alloy-consensus", + "alloy-eips 1.0.24", + "alloy-network-primitives", + "alloy-primitives", + "alloy-rpc-types-eth", + "alloy-serde 1.0.24", + "derive_more 2.0.1", + "scroll-alloy-consensus", + "serde", + "serde_json", +] + [[package]] name = "scroll-zkvm-batch-circuit" version = "0.5.0" diff --git a/Cargo.toml b/Cargo.toml index bfae651d..a5eeb5a0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,12 +58,12 @@ openvm-transpiler = { git = "https://github.com/openvm-org/openvm.git", rev = "c openvm-stark-sdk = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.1.1" } p3-field = { git = "https://github.com/Plonky3/Plonky3.git", rev = "539bbc84085efb609f4f62cb03cf49588388abdb" } -sbv-core = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master", features = ["scroll", "serde", "rkyv"] } -sbv-helpers = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } -sbv-primitives = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master", features = ["scroll", "serde", "rkyv"] } -sbv-kv = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } -sbv-trie = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } -sbv-precompile = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } +sbv-core = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/refactor", features = ["scroll", "rkyv"] } +sbv-helpers = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/refactor" } +sbv-primitives = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/refactor", features = ["scroll", "rkyv"] } +sbv-kv = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/refactor" } +sbv-trie = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/refactor" } +sbv-precompile = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/refactor" } scroll-alloy-evm = { git = "https://github.com/scroll-tech/reth", rev = "74dd0bd368325b1286e4fe99c20e6ef0fdbaee51", default-features = false } diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index 0b9aa041..7880408a 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -1,13 +1,9 @@ use alloy_primitives::B256; use scroll_zkvm_types_batch::BatchWitness; -use scroll_zkvm_types_circuit::{ - AggCircuit, AggregationInput, Circuit, ProgramCommitment, - io::read_witnesses, - public_inputs::{ - batch::{BatchInfo, VersionedBatchInfo}, - chunk::VersionedChunkInfo, - }, -}; +use scroll_zkvm_types_circuit::{AggCircuit, AggregationInput, Circuit, ProgramCommitment, io::read_witnesses, public_inputs::{ + batch::{BatchInfo, VersionedBatchInfo}, + chunk::VersionedChunkInfo, +}, manually_drop_on_zkvm}; use crate::child_commitments; @@ -33,17 +29,17 @@ impl Circuit for BatchCircuit { read_witnesses() } - fn deserialize_witness(witness_bytes: &[u8]) -> &Self::Witness { + fn deserialize_witness(witness_bytes: &[u8]) -> Self::Witness { let config = bincode::config::standard(); let (witness, _): (Self::Witness, _) = bincode::serde::decode_from_slice(witness_bytes, config).unwrap(); - Box::leak(Box::new(witness)) - // rkyv::access::(witness_bytes) - // .expect("BatchCircuit: rkyc deserialisation of witness bytes failed") + witness } - fn validate(witness: &Self::Witness) -> Self::PublicInputs { - (BatchInfo::from(witness), witness.fork_name.clone()) + fn validate(witness: Self::Witness) -> Self::PublicInputs { + let witness = manually_drop_on_zkvm!(witness); + let fork_name = witness.fork_name; + (BatchInfo::from(&witness), fork_name) } } diff --git a/crates/circuits/batch-circuit/src/main.rs b/crates/circuits/batch-circuit/src/main.rs index e8d90a8f..ad3cb9b8 100644 --- a/crates/circuits/batch-circuit/src/main.rs +++ b/crates/circuits/batch-circuit/src/main.rs @@ -15,10 +15,10 @@ fn main() { let witness = C::deserialize_witness(&witness_bytes); // Verify the root proofs being aggregated in the circuit. - let agg_proofs = C::verify_proofs(witness); + let agg_proofs = C::verify_proofs(&witness); // Get the public-input values of the proofs being aggregated from witness. - let agg_pis = C::aggregated_public_inputs(witness); + let agg_pis = C::aggregated_public_inputs(&witness); // Derive the digests of the public-input values of proofs being aggregated. let agg_pi_hashes = C::aggregated_pi_hashes(&agg_proofs); diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index b3437f61..b68ad494 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -1,13 +1,9 @@ use alloy_primitives::B256; use scroll_zkvm_types_bundle::BundleWitness; -use scroll_zkvm_types_circuit::{ - AggCircuit, AggregationInput, Circuit, ProgramCommitment, - io::read_witnesses, - public_inputs::{ - batch::VersionedBatchInfo, - bundle::{BundleInfo, VersionedBundleInfo}, - }, -}; +use scroll_zkvm_types_circuit::{AggCircuit, AggregationInput, Circuit, ProgramCommitment, io::read_witnesses, public_inputs::{ + batch::VersionedBatchInfo, + bundle::{BundleInfo, VersionedBundleInfo}, +}, manually_drop_on_zkvm}; use crate::child_commitments; @@ -26,17 +22,17 @@ impl Circuit for BundleCircuit { read_witnesses() } - fn deserialize_witness(witness_bytes: &[u8]) -> &Self::Witness { + fn deserialize_witness(witness_bytes: &[u8]) -> Self::Witness { let config = bincode::config::standard(); let (witness, _): (Self::Witness, _) = bincode::serde::decode_from_slice(witness_bytes, config).unwrap(); - Box::leak(Box::new(witness)) - // rkyv::access::(witness_bytes) - // .expect("BundleCircuit: rkyv deserialization of witness bytes failed") + witness } - fn validate(witness: &Self::Witness) -> Self::PublicInputs { - (BundleInfo::from(witness), witness.fork_name.clone()) + fn validate(witness: Self::Witness) -> Self::PublicInputs { + let witness = manually_drop_on_zkvm!(witness); + let fork_name = witness.fork_name; + (BundleInfo::from(&witness), fork_name) } } diff --git a/crates/circuits/bundle-circuit/src/main.rs b/crates/circuits/bundle-circuit/src/main.rs index e6765462..7efe4566 100644 --- a/crates/circuits/bundle-circuit/src/main.rs +++ b/crates/circuits/bundle-circuit/src/main.rs @@ -18,10 +18,10 @@ fn main() { let witness = C::deserialize_witness(&witness_bytes); // Verify the root proofs being aggregated in the circuit. - let agg_proofs = C::verify_proofs(witness); + let agg_proofs = C::verify_proofs(&witness); // Get the public-input values of the proofs being aggregated from witness. - let agg_pis = C::aggregated_public_inputs(witness); + let agg_pis = C::aggregated_public_inputs(&witness); // Derive the digests of the public-input values of the proofs being aggregated. let agg_pi_hashes = C::aggregated_pi_hashes(&agg_proofs); diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index af7e9bef..2c9cbf31 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1071419318, 13542696, 228098146, 1154682103, 1049712254, 1415629403, 1604860768, 985830407]; +pub const COMMIT: [u32; 8] = [22562954, 482987742, 964163105, 163124564, 785704068, 1262367352, 1022134348, 339887702]; diff --git a/crates/circuits/chunk-circuit/src/circuit.rs b/crates/circuits/chunk-circuit/src/circuit.rs index 63f38630..d1416651 100644 --- a/crates/circuits/chunk-circuit/src/circuit.rs +++ b/crates/circuits/chunk-circuit/src/circuit.rs @@ -27,17 +27,16 @@ impl Circuit for ChunkCircuit { read_witnesses() } - fn deserialize_witness(witness_bytes: &[u8]) -> &Self::Witness { + fn deserialize_witness(witness_bytes: &[u8]) -> Self::Witness { let config = bincode::config::standard(); let (witness, _): (Self::Witness, _) = bincode::serde::decode_from_slice(witness_bytes, config).unwrap(); - Box::leak(Box::new(witness)) - // rkyv::access::(witness_bytes) - // .expect("ChunkCircuit: rkyv deserialisation of witness bytes failed") + witness } - fn validate(witness: &Self::Witness) -> Self::PublicInputs { + fn validate(witness: Self::Witness) -> Self::PublicInputs { + let fork_name = witness.fork_name.clone(); let chunk_info = execute(witness).expect("failed to execute chunk"); - (chunk_info, (witness.fork_name.clone())) + (chunk_info, fork_name) } } diff --git a/crates/integration/src/lib.rs b/crates/integration/src/lib.rs index f2847667..a6de52e9 100644 --- a/crates/integration/src/lib.rs +++ b/crates/integration/src/lib.rs @@ -77,26 +77,18 @@ static DIR_OUTPUT: LazyLock<&Path> = LazyLock::new(|| { /// - /bundle-tests-{timestamp} static DIR_TESTRUN: OnceCell = OnceCell::new(); -pub trait WTF<'a> = rkyv::Serialize< - rkyv::api::high::HighSerializer< - AlignedVec, - rkyv::ser::allocator::ArenaHandle<'a>, - rkyv::rancor::Error, - >, - >; - -pub trait PartialProvingTask: rkyv::Archive + for<'a> WTF<'a> + serde::Serialize { +pub trait PartialProvingTask: serde::Serialize { fn identifier(&self) -> String; fn fork_name(&self) -> ForkName; + fn legacy_rkyv_archive(&self) -> eyre::Result>; + fn write_guest_input(&self, stdin: &mut StdIn) -> eyre::Result<()> where Self: Sized, { let bytes: Vec = match guest_version().as_str() { - "0.5.2" => rkyv::to_bytes::(self)? - .as_slice() - .to_vec(), + "0.5.2" => self.legacy_rkyv_archive()?, _ => { let config = bincode::config::standard(); bincode::serde::encode_to_vec(&self, config)? diff --git a/crates/integration/src/testers/batch.rs b/crates/integration/src/testers/batch.rs index b96ccf38..f1f84af1 100644 --- a/crates/integration/src/testers/batch.rs +++ b/crates/integration/src/testers/batch.rs @@ -23,6 +23,10 @@ impl PartialProvingTask for BatchWitness { header_hash.to_string() } + fn legacy_rkyv_archive(&self) -> eyre::Result> { + Ok(rkyv::to_bytes::(self)?.to_vec()) + } + fn fork_name(&self) -> ForkName { ForkName::from(self.fork_name.as_str()) } diff --git a/crates/integration/src/testers/bundle.rs b/crates/integration/src/testers/bundle.rs index 84356af7..ff34645d 100644 --- a/crates/integration/src/testers/bundle.rs +++ b/crates/integration/src/testers/bundle.rs @@ -23,6 +23,10 @@ impl PartialProvingTask for BundleWitness { format!("{first}-{last}") } + fn legacy_rkyv_archive(&self) -> eyre::Result> { + Ok(rkyv::to_bytes::(self)?.to_vec()) + } + fn fork_name(&self) -> ForkName { ForkName::from(self.fork_name.as_str()) } diff --git a/crates/integration/src/testers/chunk.rs b/crates/integration/src/testers/chunk.rs index 4b1f7efe..1116ef2e 100644 --- a/crates/integration/src/testers/chunk.rs +++ b/crates/integration/src/testers/chunk.rs @@ -6,7 +6,7 @@ use std::{ use sbv_primitives::{B256, types::BlockWitness}; use scroll_zkvm_prover::Prover; use scroll_zkvm_types::{ - chunk::{ChunkInfo, ChunkWitness}, + chunk::{ChunkInfo, ChunkWitness, LegacyChunkWitness}, proof::ProofEnum, public_inputs::ForkName, }; @@ -36,7 +36,7 @@ where return Err(eyre::eyre!("File not found: {:?}", path_witness.as_ref())); } let witness = File::open(path_witness)?; - Ok(serde_json::from_reader::<_, BlockWitness>(witness)?) + Ok(serde_json::from_reader::<_, sbv_primitives::legacy_types::BlockWitness>(witness)?.into_current()) } pub struct ChunkProverTester; @@ -50,6 +50,10 @@ impl PartialProvingTask for ChunkWitness { format!("{first}-{last}") } + fn legacy_rkyv_archive(&self) -> eyre::Result> { + Ok(rkyv::to_bytes::(&LegacyChunkWitness::from(self.clone()))?.to_vec()) + } + fn fork_name(&self) -> ForkName { ForkName::from(self.fork_name.as_str()) } @@ -171,7 +175,7 @@ pub fn create_canonical_tasks( witness: Default::default(), }; let chunk_wit = canonical_generator.get_or_build_witness()?; - let info = metadata_from_chunk_witnesses(&chunk_wit)?; + let info = metadata_from_chunk_witnesses(chunk_wit)?; prev_message_hash = Some(info.post_msg_queue_hash); ret.push(canonical_generator); diff --git a/crates/integration/src/utils/mod.rs b/crates/integration/src/utils/mod.rs index 2dda0c72..cd13f731 100644 --- a/crates/integration/src/utils/mod.rs +++ b/crates/integration/src/utils/mod.rs @@ -1,8 +1,9 @@ use crate::testing_hardfork; use sbv_primitives::{ B256, - types::{BlockWitness, Transaction, eips::Encodable2718, reth::primitives::TransactionSigned}, + types::{BlockWitness, eips::Encodable2718}, }; +use sbv_primitives::types::consensus::ScrollTransaction; use scroll_zkvm_types::{ batch::{ BatchHeader, BatchHeaderV6, BatchHeaderV7, BatchInfo, BatchWitness, PointEvalWitness, @@ -16,31 +17,24 @@ use scroll_zkvm_types::{ }; use vm_zstd::zstd_encode; -fn is_l1_tx(tx: &Transaction) -> bool { - // 0x7e is l1 tx - tx.transaction_type == 0x7e -} #[allow(dead_code)] fn final_l1_index(blk: &BlockWitness) -> u64 { // Get number of l1 txs. L1 txs can be skipped, so just counting is not enough // (The comment copied from scroll-prover, but why the max l1 queue index is always // the last one for a chunk, or, is the last l1 never being skipped?) - blk.transaction + blk.transactions .iter() - .filter(|tx| is_l1_tx(tx)) - .map(|tx| tx.queue_index.expect("l1 msg should has queue index")) + .filter_map(|tx| tx.queue_index()) .max() .unwrap_or_default() } fn blks_tx_bytes<'a>(blks: impl Iterator) -> Vec { - blks.flat_map(|blk| &blk.transaction) - .filter(|tx| !is_l1_tx(tx)) + blks.flat_map(|blk| &blk.transactions) + .filter(|tx| !tx.is_l1_message()) .fold(Vec::new(), |mut tx_bytes, tx| { - TransactionSigned::try_from(tx) - .unwrap() - .encode_2718(&mut tx_bytes); + tx.encode_2718(&mut tx_bytes); tx_bytes }) } @@ -104,7 +98,7 @@ impl From<&BatchHeaderV7> for LastHeader { } } -pub fn metadata_from_chunk_witnesses(witness: &ChunkWitness) -> eyre::Result { +pub fn metadata_from_chunk_witnesses(witness: ChunkWitness) -> eyre::Result { witness .try_into() .map_err(|e| eyre::eyre!("get chunk metadata fail {e}")) @@ -125,6 +119,7 @@ pub fn build_batch_witnesses( ) -> eyre::Result { let chunk_infos = chunks .iter() + .cloned() .map(metadata_from_chunk_witnesses) .collect::>>()?; diff --git a/crates/integration/tests/chunk_circuit.rs b/crates/integration/tests/chunk_circuit.rs index 4740497c..c7dadb55 100644 --- a/crates/integration/tests/chunk_circuit.rs +++ b/crates/integration/tests/chunk_circuit.rs @@ -86,7 +86,7 @@ fn test_autofill_trie_nodes() -> eyre::Result<()> { ); let mut test_wit = wit.clone(); test_wit.blocks[0].states.remove(index); - let result = metadata_from_chunk_witnesses(&test_wit); + let result = metadata_from_chunk_witnesses(test_wit); match result { Err(err_str) => { diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index f80008a5..7d758af5 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -2,7 +2,7 @@ use crate::{ChunkWitness, types::ChunkExt}; use sbv_core::verifier::{self, VerifyResult}; use sbv_helpers::manually_drop_on_zkvm; use sbv_primitives::{ - B256, BlockWitness, U256, + B256, U256, chainspec::{Chain, build_chain_spec_force_hardfork}, hardforks::Hardfork, types::{ @@ -17,8 +17,8 @@ use types_base::{ /// `compression_ratios` can be `None` in host mode. /// But in guest mode, it must be provided. -pub fn execute(witness: &ChunkWitness) -> Result { - let chain = Chain::from_id(witness.blocks[0].chain_id()); +pub fn execute(witness: ChunkWitness) -> Result { + let chain = Chain::from_id(witness.blocks[0].chain_id); let chain_spec = build_chain_spec_force_hardfork( chain, match witness.fork_name { @@ -38,7 +38,7 @@ pub fn execute(witness: &ChunkWitness) -> Result { withdraw_root, .. } = verifier::run( - witness.blocks.as_slice(), + witness.blocks, chain_spec.clone(), state_commit_mode, Some(witness.compression_ratios.clone()), diff --git a/crates/types/chunk/src/lib.rs b/crates/types/chunk/src/lib.rs index b40c09a1..a20bfc8f 100644 --- a/crates/types/chunk/src/lib.rs +++ b/crates/types/chunk/src/lib.rs @@ -1,7 +1,7 @@ mod types; mod witness; -pub use witness::{ArchivedChunkWitness, ChunkWitness}; +pub use witness::{ChunkWitness, LegacyChunkWitness}; mod execute; pub use execute::execute; diff --git a/crates/types/chunk/src/witness.rs b/crates/types/chunk/src/witness.rs index 46643dce..e90f2092 100644 --- a/crates/types/chunk/src/witness.rs +++ b/crates/types/chunk/src/witness.rs @@ -1,10 +1,29 @@ use alloy_primitives::B256; -use rkyv::util::AlignedVec; use sbv_core::verifier::StateCommitMode; use sbv_primitives::{U256, types::BlockWitness}; use std::collections::HashSet; use types_base::{fork_name::ForkName, public_inputs::chunk::ChunkInfo}; +/// The witness type accepted by the chunk-circuit. +#[derive( + Clone, + Debug, + serde::Deserialize, + serde::Serialize, +)] +pub struct ChunkWitness { + /// The block witness for each block in the chunk. + pub blocks: Vec, + /// The on-chain rolling L1 message queue hash before enqueueing any L1 msg tx from the chunk. + pub prev_msg_queue_hash: B256, + /// The code version specify the chain spec + pub fork_name: ForkName, + /// The compression ratios for each block in the chunk. + pub compression_ratios: Vec>, + /// The mode of state commitment for the chunk. + pub state_commit_mode: StateCommitMode, +} + /// The witness type accepted by the chunk-circuit. #[derive( Clone, @@ -16,9 +35,9 @@ use types_base::{fork_name::ForkName, public_inputs::chunk::ChunkInfo}; rkyv::Serialize, )] #[rkyv(derive(Debug))] -pub struct ChunkWitness { +pub struct LegacyChunkWitness { /// The block witness for each block in the chunk. - pub blocks: Vec, + pub blocks: Vec, /// The on-chain rolling L1 message queue hash before enqueueing any L1 msg tx from the chunk. pub prev_msg_queue_hash: B256, /// The code version specify the chain spec @@ -48,8 +67,8 @@ impl ChunkWitness { .map(|block| BlockWitness { chain_id: block.chain_id, header: block.header.clone(), - pre_state_root: block.pre_state_root, - transaction: block.transaction.clone(), + prev_state_root: block.prev_state_root, + transactions: block.transactions.clone(), withdrawals: block.withdrawals.clone(), states: block .states @@ -84,7 +103,7 @@ impl ChunkWitness { let num_txs = self .blocks .iter() - .map(|b| b.transaction.len()) + .map(|b| b.transactions.len()) .sum::(); let total_gas_used = self.blocks.iter().map(|b| b.header.gas_used).sum::(); @@ -96,10 +115,22 @@ impl ChunkWitness { } } -impl TryFrom<&ChunkWitness> for ChunkInfo { +impl TryFrom for ChunkInfo { type Error = String; - fn try_from(value: &ChunkWitness) -> Result { + fn try_from(value: ChunkWitness) -> Result { crate::execute(value) } } + +impl From for LegacyChunkWitness { + fn from(value: ChunkWitness) -> Self { + LegacyChunkWitness { + blocks: value.blocks.into_iter().map(|block| block.into_legacy()).collect(), + prev_msg_queue_hash: value.prev_msg_queue_hash, + fork_name: value.fork_name, + compression_ratios: value.compression_ratios, + state_commit_mode: value.state_commit_mode, + } + } +} diff --git a/crates/types/circuit/src/lib.rs b/crates/types/circuit/src/lib.rs index 4b305340..e0abad9f 100644 --- a/crates/types/circuit/src/lib.rs +++ b/crates/types/circuit/src/lib.rs @@ -28,10 +28,10 @@ pub trait Circuit { fn read_witness_bytes() -> Vec; /// Deserialize raw bytes into the circuit's witness type. - fn deserialize_witness(witness_bytes: &[u8]) -> &Self::Witness; + fn deserialize_witness(witness_bytes: &[u8]) -> Self::Witness; /// Validate the witness to produce the circuit's public inputs. - fn validate(witness: &Self::Witness) -> Self::PublicInputs; + fn validate(witness: Self::Witness) -> Self::PublicInputs; /// Reveal the public inputs. fn reveal_pi(pi: &Self::PublicInputs) { @@ -125,3 +125,21 @@ fn verify_proof(commitment: &ProgramCommitment, public_inputs: &[u32]) { std::arch::asm!(include_str!("../../../build-guest/root_verifier.asm"),) } } + +/// This macro is used to manually drop an expression on zkvm (non x86/aarch64 targets). +#[macro_export] +#[cfg(not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")))] +macro_rules! manually_drop_on_zkvm { + ($e:expr) => { + std::mem::ManuallyDrop::new($e) + }; +} + +/// This macro is used to manually drop an expression on zkvm (non x86/aarch64 targets). +#[macro_export] +#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))] +macro_rules! manually_drop_on_zkvm { + ($e:expr) => { + $e + }; +} From 50b40ef77e5c7dad081421dd03f8198e5e04fada Mon Sep 17 00:00:00 2001 From: lightsing Date: Thu, 21 Aug 2025 19:16:35 +0800 Subject: [PATCH 31/84] update ref --- Cargo.lock | 12 ++++++------ Cargo.toml | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 863b487b..a97b0817 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6526,7 +6526,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "sbv-core" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Frefactor#d836d4e9c6cfcaf288daa8f82206f5ef8e5bbc01" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#482b62d1350445ae86f19d7e5d79a598c7a49135" dependencies = [ "cfg-if", "itertools 0.14.0", @@ -6543,7 +6543,7 @@ dependencies = [ [[package]] name = "sbv-helpers" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Frefactor#d836d4e9c6cfcaf288daa8f82206f5ef8e5bbc01" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#482b62d1350445ae86f19d7e5d79a598c7a49135" dependencies = [ "tracing", ] @@ -6551,7 +6551,7 @@ dependencies = [ [[package]] name = "sbv-kv" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Frefactor#d836d4e9c6cfcaf288daa8f82206f5ef8e5bbc01" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#482b62d1350445ae86f19d7e5d79a598c7a49135" dependencies = [ "auto_impl", "hashbrown 0.15.5", @@ -6561,7 +6561,7 @@ dependencies = [ [[package]] name = "sbv-precompile" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Frefactor#d836d4e9c6cfcaf288daa8f82206f5ef8e5bbc01" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#482b62d1350445ae86f19d7e5d79a598c7a49135" dependencies = [ "openvm-ecc-guest 1.4.0-rc.4", "openvm-pairing", @@ -6572,7 +6572,7 @@ dependencies = [ [[package]] name = "sbv-primitives" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Frefactor#d836d4e9c6cfcaf288daa8f82206f5ef8e5bbc01" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#482b62d1350445ae86f19d7e5d79a598c7a49135" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -6609,7 +6609,7 @@ dependencies = [ [[package]] name = "sbv-trie" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=chore%2Frefactor#d836d4e9c6cfcaf288daa8f82206f5ef8e5bbc01" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#482b62d1350445ae86f19d7e5d79a598c7a49135" dependencies = [ "alloy-rlp", "alloy-trie", diff --git a/Cargo.toml b/Cargo.toml index a5eeb5a0..0c86b309 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,12 +58,12 @@ openvm-transpiler = { git = "https://github.com/openvm-org/openvm.git", rev = "c openvm-stark-sdk = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.1.1" } p3-field = { git = "https://github.com/Plonky3/Plonky3.git", rev = "539bbc84085efb609f4f62cb03cf49588388abdb" } -sbv-core = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/refactor", features = ["scroll", "rkyv"] } -sbv-helpers = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/refactor" } -sbv-primitives = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/refactor", features = ["scroll", "rkyv"] } -sbv-kv = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/refactor" } -sbv-trie = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/refactor" } -sbv-precompile = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/refactor" } +sbv-core = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master", features = ["scroll", "rkyv"] } +sbv-helpers = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } +sbv-primitives = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master", features = ["scroll", "rkyv"] } +sbv-kv = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } +sbv-trie = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } +sbv-precompile = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } scroll-alloy-evm = { git = "https://github.com/scroll-tech/reth", rev = "74dd0bd368325b1286e4fe99c20e6ef0fdbaee51", default-features = false } From c6a58857f4184e5ff0117c8611e638c562b75908 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 21 Aug 2025 11:30:18 +0000 Subject: [PATCH 32/84] revert chunk_exe_commit.rs --- crates/circuits/chunk-circuit/chunk_exe_commit.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index 2c9cbf31..af7e9bef 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [22562954, 482987742, 964163105, 163124564, 785704068, 1262367352, 1022134348, 339887702]; +pub const COMMIT: [u32; 8] = [1071419318, 13542696, 228098146, 1154682103, 1049712254, 1415629403, 1604860768, 985830407]; From 5fd10772e55f783dfd71f16543a8788a99ffbe0b Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 21 Aug 2025 11:49:38 +0000 Subject: [PATCH 33/84] rewrite vk in testing --- Cargo.lock | 1 + crates/circuits/batch-circuit/src/circuit.rs | 13 +++++++--- crates/circuits/bundle-circuit/src/circuit.rs | 13 +++++++--- crates/integration/Cargo.toml | 1 + .../src/commitments/batch_exe_commit.rs | 1 - .../src/commitments/batch_leaf_commit.rs | 1 - .../src/commitments/bundle_exe_commit.rs | 1 - .../src/commitments/bundle_leaf_commit.rs | 1 - .../src/commitments/chunk_exe_commit.rs | 1 - .../src/commitments/chunk_leaf_commit.rs | 1 - crates/integration/src/commitments/mod.rs | 6 ----- crates/integration/src/lib.rs | 25 ++++++++++++++++--- crates/integration/src/testers/batch.rs | 8 ++---- crates/integration/src/testers/bundle.rs | 13 ++++------ crates/integration/src/testers/chunk.rs | 10 ++++++-- crates/integration/src/utils/mod.rs | 3 +-- crates/types/chunk/src/witness.rs | 13 +++++----- 17 files changed, 63 insertions(+), 49 deletions(-) delete mode 120000 crates/integration/src/commitments/batch_exe_commit.rs delete mode 120000 crates/integration/src/commitments/batch_leaf_commit.rs delete mode 120000 crates/integration/src/commitments/bundle_exe_commit.rs delete mode 120000 crates/integration/src/commitments/bundle_leaf_commit.rs delete mode 120000 crates/integration/src/commitments/chunk_exe_commit.rs delete mode 120000 crates/integration/src/commitments/chunk_leaf_commit.rs delete mode 100644 crates/integration/src/commitments/mod.rs diff --git a/Cargo.lock b/Cargo.lock index a97b0817..70c5eab5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6808,6 +6808,7 @@ name = "scroll-zkvm-integration" version = "0.5.0" dependencies = [ "alloy-primitives", + "base64", "bincode 2.0.1", "cargo_metadata 0.20.0", "chrono", diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index 7880408a..0acfae72 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -1,9 +1,14 @@ use alloy_primitives::B256; use scroll_zkvm_types_batch::BatchWitness; -use scroll_zkvm_types_circuit::{AggCircuit, AggregationInput, Circuit, ProgramCommitment, io::read_witnesses, public_inputs::{ - batch::{BatchInfo, VersionedBatchInfo}, - chunk::VersionedChunkInfo, -}, manually_drop_on_zkvm}; +use scroll_zkvm_types_circuit::{ + AggCircuit, AggregationInput, Circuit, ProgramCommitment, + io::read_witnesses, + manually_drop_on_zkvm, + public_inputs::{ + batch::{BatchInfo, VersionedBatchInfo}, + chunk::VersionedChunkInfo, + }, +}; use crate::child_commitments; diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index b68ad494..b8c4276a 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -1,9 +1,14 @@ use alloy_primitives::B256; use scroll_zkvm_types_bundle::BundleWitness; -use scroll_zkvm_types_circuit::{AggCircuit, AggregationInput, Circuit, ProgramCommitment, io::read_witnesses, public_inputs::{ - batch::VersionedBatchInfo, - bundle::{BundleInfo, VersionedBundleInfo}, -}, manually_drop_on_zkvm}; +use scroll_zkvm_types_circuit::{ + AggCircuit, AggregationInput, Circuit, ProgramCommitment, + io::read_witnesses, + manually_drop_on_zkvm, + public_inputs::{ + batch::VersionedBatchInfo, + bundle::{BundleInfo, VersionedBundleInfo}, + }, +}; use crate::child_commitments; diff --git a/crates/integration/Cargo.toml b/crates/integration/Cargo.toml index d2b98971..3af56d7d 100644 --- a/crates/integration/Cargo.toml +++ b/crates/integration/Cargo.toml @@ -23,6 +23,7 @@ openvm-native-transpiler = { workspace = true, default-features = false } openvm-transpiler = { workspace = true, default-features = false } alloy-primitives.workspace = true +base64.workspace = true bincode.workspace = true cargo_metadata.workspace = true eyre.workspace = true diff --git a/crates/integration/src/commitments/batch_exe_commit.rs b/crates/integration/src/commitments/batch_exe_commit.rs deleted file mode 120000 index 98368040..00000000 --- a/crates/integration/src/commitments/batch_exe_commit.rs +++ /dev/null @@ -1 +0,0 @@ -../../../circuits/batch-circuit/batch_exe_commit.rs \ No newline at end of file diff --git a/crates/integration/src/commitments/batch_leaf_commit.rs b/crates/integration/src/commitments/batch_leaf_commit.rs deleted file mode 120000 index 7aad1480..00000000 --- a/crates/integration/src/commitments/batch_leaf_commit.rs +++ /dev/null @@ -1 +0,0 @@ -../../../circuits/batch-circuit/batch_leaf_commit.rs \ No newline at end of file diff --git a/crates/integration/src/commitments/bundle_exe_commit.rs b/crates/integration/src/commitments/bundle_exe_commit.rs deleted file mode 120000 index 910fadfe..00000000 --- a/crates/integration/src/commitments/bundle_exe_commit.rs +++ /dev/null @@ -1 +0,0 @@ -../../../circuits/bundle-circuit/bundle_exe_commit.rs \ No newline at end of file diff --git a/crates/integration/src/commitments/bundle_leaf_commit.rs b/crates/integration/src/commitments/bundle_leaf_commit.rs deleted file mode 120000 index a9c91779..00000000 --- a/crates/integration/src/commitments/bundle_leaf_commit.rs +++ /dev/null @@ -1 +0,0 @@ -../../../circuits/bundle-circuit/bundle_leaf_commit.rs \ No newline at end of file diff --git a/crates/integration/src/commitments/chunk_exe_commit.rs b/crates/integration/src/commitments/chunk_exe_commit.rs deleted file mode 120000 index d136d109..00000000 --- a/crates/integration/src/commitments/chunk_exe_commit.rs +++ /dev/null @@ -1 +0,0 @@ -../../../circuits/chunk-circuit/chunk_exe_commit.rs \ No newline at end of file diff --git a/crates/integration/src/commitments/chunk_leaf_commit.rs b/crates/integration/src/commitments/chunk_leaf_commit.rs deleted file mode 120000 index 25f2e5fc..00000000 --- a/crates/integration/src/commitments/chunk_leaf_commit.rs +++ /dev/null @@ -1 +0,0 @@ -../../../circuits/chunk-circuit/chunk_leaf_commit.rs \ No newline at end of file diff --git a/crates/integration/src/commitments/mod.rs b/crates/integration/src/commitments/mod.rs deleted file mode 100644 index aee59035..00000000 --- a/crates/integration/src/commitments/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod batch_exe_commit; -pub mod batch_leaf_commit; -pub mod bundle_exe_commit; -pub mod bundle_leaf_commit; -pub mod chunk_exe_commit; -pub mod chunk_leaf_commit; diff --git a/crates/integration/src/lib.rs b/crates/integration/src/lib.rs index a6de52e9..78cd6169 100644 --- a/crates/integration/src/lib.rs +++ b/crates/integration/src/lib.rs @@ -1,8 +1,6 @@ -#![feature(trait_alias)] use cargo_metadata::MetadataCommand; use once_cell::sync::OnceCell; use openvm_sdk::StdIn; -use rkyv::util::AlignedVec; use scroll_zkvm_prover::{ Prover, utils::{read_json, vm::ExecutionResult, write_json}, @@ -10,6 +8,7 @@ use scroll_zkvm_prover::{ use scroll_zkvm_types::{ proof::{EvmProof, ProofEnum, StarkProof}, public_inputs::ForkName, + types_agg::ProgramCommitment, }; use scroll_zkvm_verifier::verifier::UniversalVerifier; use std::{ @@ -24,8 +23,6 @@ pub mod testers; pub mod utils; -pub mod commitments; - /// Directory to store proofs on disc. const DIR_PROOFS: &str = "proofs"; @@ -392,6 +389,26 @@ where Ok(proof) } +pub fn load_program_commitments(program: &str) -> eyre::Result { + use base64::{Engine, prelude::BASE64_STANDARD}; + let file_path = WORKSPACE_ROOT + .join("releases") + .join(guest_version()) + .join("verifier") + .join("openVmVk.json"); + let json_value: serde_json::Value = { + let file = std::fs::File::open(&file_path)?; + serde_json::from_reader(file)? + }; + let commitment_string = json_value[&format!("{}_vk", program)] + .as_str() + .ok_or_else(|| eyre::eyre!("Missing or invalid program commitment for {}", program))?; + let commitment_bytes = hex::decode(commitment_string) + .or_else(|_| BASE64_STANDARD.decode(commitment_string)) + .map_err(|_| eyre::eyre!("Failed to decode program commitment for {}", program))?; + Ok(ProgramCommitment::deserialize(&commitment_bytes)) +} + #[test] fn test_project_root() { println!("Project root directory: {}", WORKSPACE_ROOT.display()); diff --git a/crates/integration/src/testers/batch.rs b/crates/integration/src/testers/batch.rs index f1f84af1..7758e701 100644 --- a/crates/integration/src/testers/batch.rs +++ b/crates/integration/src/testers/batch.rs @@ -4,11 +4,10 @@ use scroll_zkvm_types::{ chunk::ChunkInfo, proof::ProofEnum, public_inputs::ForkName, - types_agg::ProgramCommitment, }; use crate::{ - PartialProvingTask, ProverTester, prove_verify, + PartialProvingTask, ProverTester, load_program_commitments, prove_verify, testers::chunk::{ChunkTaskGenerator, preset_chunk_multiple}, utils::build_batch_witnesses, }; @@ -102,10 +101,7 @@ impl BatchTaskGenerator { .map(|g| g.get_or_build_witness()) .collect::>>()?; - let commitment = ProgramCommitment { - exe: crate::commitments::chunk_exe_commit::COMMIT, - vm: crate::commitments::chunk_leaf_commit::COMMIT, - }; + let commitment = load_program_commitments("chunk")?; let ret_wit = build_batch_witnesses( &chunks, &commitment.serialize(), diff --git a/crates/integration/src/testers/bundle.rs b/crates/integration/src/testers/bundle.rs index ff34645d..409300c1 100644 --- a/crates/integration/src/testers/bundle.rs +++ b/crates/integration/src/testers/bundle.rs @@ -9,8 +9,8 @@ use scroll_zkvm_types::{ use scroll_zkvm_prover::Prover; use crate::{ - PartialProvingTask, ProverTester, prove_verify_single_evm, testers::batch::BatchTaskGenerator, - testing_hardfork, utils::metadata_from_batch_witnesses, + PartialProvingTask, ProverTester, load_program_commitments, prove_verify_single_evm, + testers::batch::BatchTaskGenerator, testing_hardfork, utils::metadata_from_batch_witnesses, }; impl PartialProvingTask for BundleWitness { @@ -101,15 +101,12 @@ impl BundleTaskGenerator { fn calculate_witness(&mut self) -> eyre::Result { use scroll_zkvm_types::{ - public_inputs::MultiVersionPublicInputs, - types_agg::{AggregationInput, ProgramCommitment}, + public_inputs::MultiVersionPublicInputs, types_agg::AggregationInput, }; let fork_name = testing_hardfork(); - let commitment = ProgramCommitment { - exe: crate::commitments::batch_exe_commit::COMMIT, - vm: crate::commitments::batch_leaf_commit::COMMIT, - }; + + let commitment = load_program_commitments("batch")?; let mut batch_proofs = Vec::new(); let mut batch_infos: Vec = Vec::new(); diff --git a/crates/integration/src/testers/chunk.rs b/crates/integration/src/testers/chunk.rs index 1116ef2e..425db04c 100644 --- a/crates/integration/src/testers/chunk.rs +++ b/crates/integration/src/testers/chunk.rs @@ -36,7 +36,10 @@ where return Err(eyre::eyre!("File not found: {:?}", path_witness.as_ref())); } let witness = File::open(path_witness)?; - Ok(serde_json::from_reader::<_, sbv_primitives::legacy_types::BlockWitness>(witness)?.into_current()) + Ok( + serde_json::from_reader::<_, sbv_primitives::legacy_types::BlockWitness>(witness)? + .into_current(), + ) } pub struct ChunkProverTester; @@ -51,7 +54,10 @@ impl PartialProvingTask for ChunkWitness { } fn legacy_rkyv_archive(&self) -> eyre::Result> { - Ok(rkyv::to_bytes::(&LegacyChunkWitness::from(self.clone()))?.to_vec()) + Ok( + rkyv::to_bytes::(&LegacyChunkWitness::from(self.clone()))? + .to_vec(), + ) } fn fork_name(&self) -> ForkName { diff --git a/crates/integration/src/utils/mod.rs b/crates/integration/src/utils/mod.rs index cd13f731..3fb83d7b 100644 --- a/crates/integration/src/utils/mod.rs +++ b/crates/integration/src/utils/mod.rs @@ -1,9 +1,9 @@ use crate::testing_hardfork; +use sbv_primitives::types::consensus::ScrollTransaction; use sbv_primitives::{ B256, types::{BlockWitness, eips::Encodable2718}, }; -use sbv_primitives::types::consensus::ScrollTransaction; use scroll_zkvm_types::{ batch::{ BatchHeader, BatchHeaderV6, BatchHeaderV7, BatchInfo, BatchWitness, PointEvalWitness, @@ -17,7 +17,6 @@ use scroll_zkvm_types::{ }; use vm_zstd::zstd_encode; - #[allow(dead_code)] fn final_l1_index(blk: &BlockWitness) -> u64 { // Get number of l1 txs. L1 txs can be skipped, so just counting is not enough diff --git a/crates/types/chunk/src/witness.rs b/crates/types/chunk/src/witness.rs index e90f2092..6f4bf4ef 100644 --- a/crates/types/chunk/src/witness.rs +++ b/crates/types/chunk/src/witness.rs @@ -5,12 +5,7 @@ use std::collections::HashSet; use types_base::{fork_name::ForkName, public_inputs::chunk::ChunkInfo}; /// The witness type accepted by the chunk-circuit. -#[derive( - Clone, - Debug, - serde::Deserialize, - serde::Serialize, -)] +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] pub struct ChunkWitness { /// The block witness for each block in the chunk. pub blocks: Vec, @@ -126,7 +121,11 @@ impl TryFrom for ChunkInfo { impl From for LegacyChunkWitness { fn from(value: ChunkWitness) -> Self { LegacyChunkWitness { - blocks: value.blocks.into_iter().map(|block| block.into_legacy()).collect(), + blocks: value + .blocks + .into_iter() + .map(|block| block.into_legacy()) + .collect(), prev_msg_queue_hash: value.prev_msg_queue_hash, fork_name: value.fork_name, compression_ratios: value.compression_ratios, From 94ee758735a88bdce8ad968637b7702fc6b49aea Mon Sep 17 00:00:00 2001 From: lightsing Date: Fri, 22 Aug 2025 10:37:13 +0800 Subject: [PATCH 34/84] sync --- Cargo.lock | 142 +++++++++++++++++- .../chunk-circuit/chunk_exe_commit.rs | 2 +- crates/types/chunk/src/execute.rs | 20 ++- crates/types/chunk/src/lib.rs | 2 +- crates/types/chunk/src/types.rs | 27 +--- crates/types/chunk/src/witness.rs | 2 - 6 files changed, 160 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 70c5eab5..a8bd0994 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -28,6 +28,41 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "aead" +version = "0.6.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c01559752fbde7734af628961723aa734aa46351cbf5c9ce41133ad2ae1a09b9" +dependencies = [ + "crypto-common 0.2.0-rc.3", + "inout", +] + +[[package]] +name = "aes" +version = "0.9.0-rc.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd4838e4ad37bb032dea137f441d5f71c16c26c068af512e64c5bc13a88cdfc7" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.11.0-rc.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2be322be4a73a3a55ad74b9833238e76bfd6034ce69a05c1b41c879f6a3bdca6" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + [[package]] name = "ahash" version = "0.8.12" @@ -1340,6 +1375,16 @@ dependencies = [ "windows-link", ] +[[package]] +name = "cipher" +version = "0.5.0-rc.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd4ef774202f1749465fc7cf88d70fc30620e8cacd5429268f4bff7d003bd976" +dependencies = [ + "crypto-common 0.2.0-rc.3", + "inout", +] + [[package]] name = "clap" version = "4.5.45" @@ -1576,6 +1621,25 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a23fa214dea9efd4dacee5a5614646b30216ae0f05d4bb51bafb50e9da1c5be" +dependencies = [ + "hybrid-array", + "rand_core 0.9.3", +] + +[[package]] +name = "ctr" +version = "0.10.0-rc.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f239edce204df0e4503cccef3492552773d1ca4e002659a59ca715f099b45ca1" +dependencies = [ + "cipher", +] + [[package]] name = "darling" version = "0.20.11" @@ -1783,7 +1847,7 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", "const-oid", - "crypto-common", + "crypto-common 0.1.6", "subtle", ] @@ -1837,6 +1901,19 @@ dependencies = [ "spki", ] +[[package]] +name = "ecies" +version = "0.1.0" +source = "git+https://github.com/scroll-tech/ecies-rs#e32a93f736aac2158bf5982b8e4786b82be8b854" +dependencies = [ + "aes-gcm", + "digest 0.10.7", + "hkdf", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "sha2 0.10.9", + "thiserror 2.0.15", +] + [[package]] name = "educe" version = "0.6.0" @@ -2182,6 +2259,15 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "ghash" +version = "0.6.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df2ef47489983b86b012ce4955b61fcfb1a99a761a1a8c79c3129e722da6795" +dependencies = [ + "polyval", +] + [[package]] name = "gimli" version = "0.31.1" @@ -2507,6 +2593,15 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + [[package]] name = "hmac" version = "0.12.1" @@ -2516,6 +2611,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "hybrid-array" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d15931895091dea5c47afa5b3c9a01ba634b311919fd4d41388fa0e3d76af" +dependencies = [ + "typenum", +] + [[package]] name = "iana-time-zone" version = "0.1.63" @@ -2701,6 +2805,15 @@ dependencies = [ "serde", ] +[[package]] +name = "inout" +version = "0.2.0-rc.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c774c86bce20ea04abe1c37cf0051c5690079a3a28ef5fdac2a5a0412b3d7d74" +dependencies = [ + "hybrid-array", +] + [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -2804,6 +2917,7 @@ dependencies = [ "once_cell", "serdect", "sha2 0.10.9", + "signature", ] [[package]] @@ -5091,6 +5205,17 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "polyval" +version = "0.7.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff52e661730d7c6f95a72137e812e337eb5ff371d38d8588798e0df8404e610c" +dependencies = [ + "cfg-if", + "cpufeatures", + "universal-hash", +] + [[package]] name = "portable-atomic" version = "1.11.1" @@ -6786,6 +6911,7 @@ name = "scroll-zkvm-chunk-circuit" version = "0.5.0" dependencies = [ "bincode 2.0.1", + "ecies", "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", "openvm 1.4.0-rc.4", "openvm-algebra-complex-macros 1.4.0-rc.4", @@ -6796,6 +6922,7 @@ dependencies = [ "openvm-pairing", "openvm-pairing-guest 1.4.0-rc.4", "openvm-rv32im-guest 1.4.0-rc.4", + "openvm-sha2", "p256 0.13.2 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", "rkyv", "sbv-precompile", @@ -6956,7 +7083,9 @@ name = "scroll-zkvm-types-chunk" version = "0.5.0" dependencies = [ "alloy-primitives", + "alloy-sol-types", "bincode 2.0.1", + "ecies", "itertools 0.14.0", "openvm 1.4.0-rc.4", "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", @@ -6970,6 +7099,7 @@ dependencies = [ "sbv-trie", "scroll-zkvm-types-base", "serde", + "thiserror 2.0.15", ] [[package]] @@ -7973,6 +8103,16 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "universal-hash" +version = "0.6.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17866ce72039aaa929b785c51d08d0395e02cb5eaffd3efdf634b9b1f80b8157" +dependencies = [ + "crypto-common 0.2.0-rc.3", + "subtle", +] + [[package]] name = "unroll" version = "0.1.5" diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index 9418071e..7ecfa0e8 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1619673597, 664709083, 1461101928, 709903157, 79575717, 1460778095, 639513797, 1851621880]; +pub const COMMIT: [u32; 8] = [728168860, 1544705799, 1518435751, 535724372, 1494891784, 2002346445, 683921928, 1716988785]; diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index 41943558..158d1f36 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -1,7 +1,4 @@ -use crate::{ - ChunkWitness, - types::{ChunkExt, ChunkWitnessExt}, -}; +use crate::{ChunkWitness, types::ChunkExt}; use sbv_core::verifier::{self, VerifyResult}; use sbv_helpers::manually_drop_on_zkvm; use sbv_primitives::{ @@ -52,17 +49,28 @@ pub fn execute(witness: ChunkWitness) -> Result { let mut rlp_buffer = manually_drop_on_zkvm!(Vec::with_capacity(2048)); let (tx_data_length, tx_data_digest) = blocks.tx_bytes_hash_in(rlp_buffer.as_mut()); + let data_hash = if witness.fork_name < ForkName::EuclidV2 { + blocks.legacy_data_hash() + } else { + B256::default() + }; + let post_msg_queue_hash = if witness.fork_name >= ForkName::EuclidV2 { + blocks.rolling_msg_queue_hash(witness.prev_msg_queue_hash, witness.validium.as_ref()) + } else { + B256::default() + }; + let chunk_info = ChunkInfo { chain_id: chain.id(), prev_state_root: pre_state_root, post_state_root, - data_hash: witness.legacy_data_hash(&*blocks).unwrap_or_default(), + data_hash, withdraw_root, tx_data_digest, tx_data_length: tx_data_length as u64, initial_block_number: blocks[0].header().number, prev_msg_queue_hash: witness.prev_msg_queue_hash.into(), - post_msg_queue_hash: witness.rolling_msg_queue_hash(&*blocks).unwrap_or_default(), + post_msg_queue_hash, block_ctxs: blocks.iter().map(block_to_context).collect(), }; diff --git a/crates/types/chunk/src/lib.rs b/crates/types/chunk/src/lib.rs index 25e60cfa..75d025a4 100644 --- a/crates/types/chunk/src/lib.rs +++ b/crates/types/chunk/src/lib.rs @@ -1,8 +1,8 @@ mod types; mod witness; -pub use witness::{ChunkWitness, LegacyChunkWitness}; pub use types::validium::{QueueTransaction, SecretKey}; +pub use witness::{ChunkWitness, LegacyChunkWitness}; mod execute; pub use execute::execute; diff --git a/crates/types/chunk/src/types.rs b/crates/types/chunk/src/types.rs index 321066ef..50edd9da 100644 --- a/crates/types/chunk/src/types.rs +++ b/crates/types/chunk/src/types.rs @@ -1,8 +1,8 @@ use std::ops::Deref; +use crate::QueueTransaction; use crate::types::validium::SecretKey; use crate::witness::ValidiumInputs; -use crate::{ChunkWitness, QueueTransaction}; use alloy_primitives::keccak256; use itertools::Itertools; use sbv_helpers::manually_drop_on_zkvm; @@ -14,7 +14,6 @@ use sbv_primitives::{ reth::primitives::{Block, RecoveredBlock, TransactionSigned}, }, }; -use types_base::fork_name::ForkName; pub mod validium; @@ -129,7 +128,7 @@ impl<'a, I: Iterator> TxBytesHashExt for I { } /// Chunk related extension methods for Block -trait BlockChunkExt { +trait BlockExt { /// Get an iterator over L1 message transactions in the block. fn l1_txs_iter(&self) -> impl Iterator; @@ -145,7 +144,7 @@ trait BlockChunkExt { ) -> B256; } -impl BlockChunkExt for RecoveredBlock { +impl BlockExt for RecoveredBlock { #[inline] fn l1_txs_iter(&self) -> impl Iterator { self.body() @@ -228,23 +227,3 @@ impl BlockChunkExt for RecoveredBlock { rolling_hash } } - -pub trait ChunkWitnessExt { - fn legacy_data_hash(&self, blocks: &[RecoveredBlock]) -> Option; - - fn rolling_msg_queue_hash(&self, blocks: &[RecoveredBlock]) -> Option; -} - -impl ChunkWitnessExt for ChunkWitness { - #[inline] - fn legacy_data_hash(&self, blocks: &[RecoveredBlock]) -> Option { - (self.fork_name < ForkName::EuclidV2).then(|| blocks.legacy_data_hash()) - } - - #[inline] - fn rolling_msg_queue_hash(&self, blocks: &[RecoveredBlock]) -> Option { - (self.fork_name >= ForkName::EuclidV2).then(|| { - blocks.rolling_msg_queue_hash(self.prev_msg_queue_hash, self.validium.as_ref()) - }) - } -} diff --git a/crates/types/chunk/src/witness.rs b/crates/types/chunk/src/witness.rs index d226350c..f7908509 100644 --- a/crates/types/chunk/src/witness.rs +++ b/crates/types/chunk/src/witness.rs @@ -5,7 +5,6 @@ use sbv_primitives::{U256, types::BlockWitness}; use std::collections::HashSet; use types_base::{fork_name::ForkName, public_inputs::chunk::ChunkInfo}; - /// The witness type accepted by the chunk-circuit. #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] pub struct ChunkWitness { @@ -32,7 +31,6 @@ pub struct ValidiumInputs { pub secret_key: Box<[u8]>, } - /// The witness type accepted by the chunk-circuit. #[derive( Clone, From d8cfb3298cbb11b79844975457de4e3d365ed274 Mon Sep 17 00:00:00 2001 From: lightsing Date: Fri, 22 Aug 2025 10:58:06 +0800 Subject: [PATCH 35/84] add script --- .../chunk-circuit/chunk_exe_commit.rs | 2 +- crates/integration/src/testers/chunk.rs | 16 ++- .../integration/testdata/validium/1019.json | 97 +++++++-------- .../testdata/validium/1019_validium_txs.json | 23 +++- .../integration/testdata/validium/1256.json | 109 ++++++++--------- .../testdata/validium/1256_validium_txs.json | 23 +++- .../integration/testdata/validium/1276.json | 115 ++++++++---------- .../testdata/validium/1276_validium_txs.json | 23 +++- crates/integration/tests/chunk_circuit.rs | 7 +- crates/types/chunk/src/lib.rs | 2 +- crates/types/chunk/src/types.rs | 8 +- crates/types/chunk/src/types/validium.rs | 27 ---- crates/types/chunk/src/witness.rs | 7 +- 13 files changed, 225 insertions(+), 234 deletions(-) diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index 7ecfa0e8..27996ede 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [728168860, 1544705799, 1518435751, 535724372, 1494891784, 2002346445, 683921928, 1716988785]; +pub const COMMIT: [u32; 8] = [851705786, 1900359324, 1863012954, 629666929, 1632506698, 350674644, 257214344, 1478184734]; diff --git a/crates/integration/src/testers/chunk.rs b/crates/integration/src/testers/chunk.rs index 1c6c6ef9..3513786e 100644 --- a/crates/integration/src/testers/chunk.rs +++ b/crates/integration/src/testers/chunk.rs @@ -1,5 +1,6 @@ use std::{ fs::File, + io::{Seek, SeekFrom}, path::{Path, PathBuf}, }; @@ -35,11 +36,16 @@ where println!("File not found: {:?}", path_witness.as_ref()); return Err(eyre::eyre!("File not found: {:?}", path_witness.as_ref())); } - let witness = File::open(path_witness)?; - Ok( - serde_json::from_reader::<_, sbv_primitives::legacy_types::BlockWitness>(witness)? - .into_current(), - ) + let mut witness = File::open(path_witness)?; + if let Ok(witness) = serde_json::from_reader::<_, BlockWitness>(&mut witness) { + Ok(witness) + } else { + witness.seek(SeekFrom::Start(0))?; + Ok( + serde_json::from_reader::<_, sbv_primitives::legacy_types::BlockWitness>(&mut witness)? + .into_current(), + ) + } } pub struct ChunkProverTester; diff --git a/crates/integration/testdata/validium/1019.json b/crates/integration/testdata/validium/1019.json index e943b3bd..8a34e040 100644 --- a/crates/integration/testdata/validium/1019.json +++ b/crates/integration/testdata/validium/1019.json @@ -2,86 +2,79 @@ "chain_id": 33333333, "header": { "parent_hash": "0x3ce90891d90b3f682c03efcf8acf2545a5f6cbd44151e799d5225d396b05d76c", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "miner": "0x0000000000000000000000000000000000000000", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", "state_root": "0x1e745aceffd254c7ea150c57c5d8a8f6f8a3097ac29af7ffce16b6c8aa8ee372", "transactions_root": "0x96cd929dadc2617e456eb52ca643cd2829687781777575578eb74dabbde1d982", "receipts_root": "0xec5ea0aec359988f09e33a0e938dc54d4c4ac6482cc98c229968682e4b7f0fb1", + "withdrawals_root": null, "logs_bloom": "0x00200040000000000000800000000001000000000000001000000000000000000000000000001000000000000000000000000000000010000000000000000400000000000000000000000008000100000000000001000000000000000100000000000000020900400000000010000800000000000000010000000058000000000020000000010000000040000040400020008000000080000000000000100000000000000080000000800000000400000000000000000000008000000000000000000002000000000000000020040000000000000000000200000000000020200000000000000000000001000000080040000000000000000000000008000000", "difficulty": "0x1", - "number": "0x3fb", - "gas_limit": "0x7a1200", - "gas_used": "0x5f045", - "timestamp": "0x6895ee1b", - "extra_data": "0x", + "number": 1019, + "gas_limit": 8000000, + "gas_used": 389189, + "timestamp": 1754656283, "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "base_fee_per_gas": "0x0", - "withdrawals_root": null, + "base_fee_per_gas": 0, "blob_gas_used": null, "excess_blob_gas": null, "parent_beacon_block_root": null, - "requests_hash": null + "requests_hash": null, + "extra_data": "0x" }, - "pre_state_root": "0xa0b42392ed00f962dd79f1724d31891c7c49c3b4dc879e072f89630335c18c1b", - "transaction": [ + "prev_state_root": "0xa0b42392ed00f962dd79f1724d31891c7c49c3b4dc879e072f89630335c18c1b", + "transactions": [ { - "hash": "0x47efc8d1ea337050ec6e0ff04a407102ad26bc137169636555a022c7bc4db329", - "nonce": "0x0", - "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", - "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", - "value": "0x0", - "gas_price": null, - "gas": "0xf4240", - "max_fee_per_gas": "0x0", - "max_priority_fee_per_gas": null, - "max_fee_per_blob_gas": null, - "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a70592000000000000000000000000f64a532493c96a38e5d4e933359e70c575270915000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "signature": null, - "chain_id": null, - "blob_versioned_hashes": null, - "access_list": null, - "authorization_list": null, - "transaction_type": 126, - "queue_index": "0x0" + "TxL1Message": { + "hash": "0x47efc8d1ea337050ec6e0ff04a407102ad26bc137169636555a022c7bc4db329", + "transaction": { + "queueIndex": "0x0", + "gas": "0xf4240", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a70592000000000000000000000000f64a532493c96a38e5d4e933359e70c575270915000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } } ], "withdrawals": null, "states": [ - "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594dfadf71fa473d6a7a7a9dcd1499c4315fc457bb8", - "0xf8518080808080808080808080a0f9015f71561f6a9cf46db1082566825aaf6bddf61711bb6b041d7ef1d5e45af9808080a0f2cfb27d3fb57f56f62e0973942639252316ba6c319fb8e1ee92868bdffcae8080", - "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", - "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da516180a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcca0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0b95fe26ce057456c6c450bc74968f0b02f04598b1040f221d6dcf47f1f975349a09e88921a65a4e0885b5184ed269383efaf0710947c872955061c59fc077a3adb8080808080808080", + "0xf8518080a0b01460450ca263e1ad65154e9d8c57d162d1af2ab4669c53115ebc5433cf8cb18080808080808080a0bee831d91e49e67814173afe867c769a38faa75dcea204a24f470c84c24333688080808080", "0xf87180a0fb98b767393629d9bfb93fada4c90509fea70f7251e8bfbb9958bab7289fa26f80a0d7fb0b8838d85f28436150765402d495f441359787a3574ad50553b7502f76928080808080a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xf85180808080808080808080a05016f95a216237ecc6a3b3a2c382c7d1e68e20c28cfb313eb06f83022b9eadfb8080a0238de5c37d08e53783150d3f58c44f048808a8df72321c17607e13245203bb98808080", + "0xf9015180a020ac0d23f83ceb8520451be1aba90d998e7aa70fc4d8e5e7f9ce6998508023e780a0ecabdb8f15759fed69d4734fd1afed49fc1ce9fe64376a1844ede73baf3de221a0d9408ef8dce0a99a0c7e4009376112d323637d5619fd04839eaa6ddf8abc01db8080a0e52288535ac7fc004a23c7c29a1f0b5f884c8db35bab85e1902d875ec52d965e80a0b8055db3ca1f0c651766c16598ed1dec041568efa1f70cec9c06b2086338dd55a02d5ee4c7bf0794df78c2b40a930dde6ac7a131f3d48e6ecd0bb06ac5bd354bd7a0b9b23b80cd6b0e8521908972c4cc9302f23e49e7d6bd22e1228f4ba2acce3a37a07ecab3b62549ff9a35e52f9e9ebf8e41dba602c8c2cbd5e058d15d292a4668c780a00b4c87b6a88b23a5955b7d7244a065f8e9e0054361ab088481c3707ea0816cdaa0616e0a2a4fc2ad8b3d9f719a6734f5e7899d00e569e3451a716cf847b99255d880", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a8295945fdd39bd675b5951be2e58741c1910573a5774f1", + "0xe21aa034b255ffe46fabbd100c057b05288ed17ee1de7b08dcb47b4de4114275e0e1ff", + "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594d37594dde17dcb02e64023bd3cdddb9068bf6db9", "0xf851808080808080a0fff67d3bf5e559c8139c86b9d08c0116c5d7a19b5a6c3802e70af76a2f1854c080808080808080a09169a8a5030370a2bc5a6bcfc09fe5218c0524fd4671830314cdb59b7793d1128080", - "0xf869a037cb6b4b7193493044bbb4e88ba2ada699e9da9a01c85b6096bebabe4ba4334ab846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba047747417a662b04fe37e06d9dce49d77cc67bdaa6e04a13ab0df5c54f745dca4", - "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d95946976a0273fb14fc58df9d7840cfd3256b8af7984", "0xf869a0328fda92b5c07164bb42506cfa1f54b01846f04fd75a33912207c883cbae5cfbb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", - "0xf869a02080c5909396c0dfb921e1e67884b5c70f8f29697d6c89ad487bac3c8b772d99b846f8440180a03f9d1fa709b4e3aa6df641355c90dc9ad53d404185634e1bf87ed25406e67f12a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", - "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a058c6460055741fc4aa35ecee30694955aa0d772d607c9457d58b6f78053eb5dfa0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da516180a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcca0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0b95fe26ce057456c6c450bc74968f0b02f04598b1040f221d6dcf47f1f975349a09e88921a65a4e0885b5184ed269383efaf0710947c872955061c59fc077a3adb8080808080808080", "0xf8689f3b677423fa337485555bdb61c485755844fb70afb79537ffef69215fad1c40b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0dad338cf3bd32b6e5589b15cb870e8f98a8840c62d70871434444bcfde919ddf", - "0xf8718080a07bc829cf8dd426393ba407faf48530e732143890787e850a8ebf259502709db98080808080a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080808080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", - "0xf9015180a020ac0d23f83ceb8520451be1aba90d998e7aa70fc4d8e5e7f9ce6998508023e780a0ecabdb8f15759fed69d4734fd1afed49fc1ce9fe64376a1844ede73baf3de221a0d9408ef8dce0a99a0c7e4009376112d323637d5619fd04839eaa6ddf8abc01db8080a0e52288535ac7fc004a23c7c29a1f0b5f884c8db35bab85e1902d875ec52d965e80a0b8055db3ca1f0c651766c16598ed1dec041568efa1f70cec9c06b2086338dd55a02d5ee4c7bf0794df78c2b40a930dde6ac7a131f3d48e6ecd0bb06ac5bd354bd7a0b9b23b80cd6b0e8521908972c4cc9302f23e49e7d6bd22e1228f4ba2acce3a37a07ecab3b62549ff9a35e52f9e9ebf8e41dba602c8c2cbd5e058d15d292a4668c780a00b4c87b6a88b23a5955b7d7244a065f8e9e0054361ab088481c3707ea0816cdaa0616e0a2a4fc2ad8b3d9f719a6734f5e7899d00e569e3451a716cf847b99255d880", - "0xf8518080a0b01460450ca263e1ad65154e9d8c57d162d1af2ab4669c53115ebc5433cf8cb18080808080808080a0bee831d91e49e67814173afe867c769a38faa75dcea204a24f470c84c24333688080808080", "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d48195941480082b3164ccd3bcbd1ecb52720f5850f0e45c", - "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594d37594dde17dcb02e64023bd3cdddb9068bf6db9", - "0xf901f1a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a08a955e1b9ed7d6e47c399e1af7b803cacaddf66f4a44c0f8c7a4985d08485d1580a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0d829f43bc2e1241af0f4eb865e49735d3a235e1d1334fde126462993576799aba03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a06027b81f626cad0425a53d01f6241f0c576b1ca9a6a6b672c81762bc8c42b9c1a0475ee2034ee15615f28a7097df855c3705a63c1b713263aecbd216b78ec48d55a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", - "0xf7a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5639594d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca", - "0xf85180808080808080808080a05016f95a216237ecc6a3b3a2c382c7d1e68e20c28cfb313eb06f83022b9eadfb8080a0238de5c37d08e53783150d3f58c44f048808a8df72321c17607e13245203bb98808080", - "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a02bce0a77970dc909d192776c6a445a0ed45279b81a34518a4744cde4bb3cd9fda0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", - "0xe21aa034b255ffe46fabbd100c057b05288ed17ee1de7b08dcb47b4de4114275e0e1ff", + "0xf869a02080c5909396c0dfb921e1e67884b5c70f8f29697d6c89ad487bac3c8b772d99b846f8440180a03f9d1fa709b4e3aa6df641355c90dc9ad53d404185634e1bf87ed25406e67f12a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", + "0xf869a020ccc237cb14f1e7206826bf271fec2ea755a65ca3b2495aa4019e7b27041a3db846f8440180a050b318ede9092989f5c7bf4c4036ae9335fd312a98fe431f3b0a398a379078f9a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d95946976a0273fb14fc58df9d7840cfd3256b8af7984", "0xf8b18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcc80a0b0ef21434c42e174ada1a8e8e3f713955a31017558b6dcdaef64ec14f33e9149a0bd7940db4b06e68a4fe74d394d0e0cc24e569a62c02111b3d8156f1987cb473c8080a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xf869a037cb6b4b7193493044bbb4e88ba2ada699e9da9a01c85b6096bebabe4ba4334ab846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba047747417a662b04fe37e06d9dce49d77cc67bdaa6e04a13ab0df5c54f745dca4", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594dfadf71fa473d6a7a7a9dcd1499c4315fc457bb8", + "0xf8718080a07bc829cf8dd426393ba407faf48530e732143890787e850a8ebf259502709db98080808080a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080808080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf8518080808080808080808080a0f9015f71561f6a9cf46db1082566825aaf6bddf61711bb6b041d7ef1d5e45af9808080a0f2cfb27d3fb57f56f62e0973942639252316ba6c319fb8e1ee92868bdffcae8080", + "0xf901f1a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a08a955e1b9ed7d6e47c399e1af7b803cacaddf66f4a44c0f8c7a4985d08485d1580a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0d829f43bc2e1241af0f4eb865e49735d3a235e1d1334fde126462993576799aba03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a06027b81f626cad0425a53d01f6241f0c576b1ca9a6a6b672c81762bc8c42b9c1a0475ee2034ee15615f28a7097df855c3705a63c1b713263aecbd216b78ec48d55a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", "0xf888a0209d888b8f443fa80d97d6ef86dad20c16dd6152e9d58bfbcb7e5a45ff5e2555b865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a0924a4bbbffb523fbc2a5404f5f66fa235cdf87d5d2cff85bd22469162e12b166a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", - "0xf869a020ccc237cb14f1e7206826bf271fec2ea755a65ca3b2495aa4019e7b27041a3db846f8440180a050b318ede9092989f5c7bf4c4036ae9335fd312a98fe431f3b0a398a379078f9a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", - "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a8295945fdd39bd675b5951be2e58741c1910573a5774f1" + "0xf7a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5639594d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a058c6460055741fc4aa35ecee30694955aa0d772d607c9457d58b6f78053eb5dfa0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2" ], "codes": [ - "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb95781565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb9576001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b7169063b2267a7b903490610c22907f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", - "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf8481565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf846001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a", "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", "0x363d3d373d3d3d363d73d37594dde17dcb02e64023bd3cdddb9068bf6db95af43d82803e903d91602b57fd5bf3", "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", - "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a" + "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb95781565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb9576001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b7169063b2267a7b903490610c22907f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf8481565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf846001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a" ] } \ No newline at end of file diff --git a/crates/integration/testdata/validium/1019_validium_txs.json b/crates/integration/testdata/validium/1019_validium_txs.json index 97315775..d656bdd2 100644 --- a/crates/integration/testdata/validium/1019_validium_txs.json +++ b/crates/integration/testdata/validium/1019_validium_txs.json @@ -1,10 +1,21 @@ [ { - "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", - "target": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "blockHash": "0x8a5388e3e68a8fcf68246d21a11b1d3bf77d27dc112c79adafda06d9f791e7ac", + "blockNumber": "0x3fb", + "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "gas": "0xf4240", + "gasPrice": "0x0", + "hash": "0x9f173d499cba25583a329a35a1452c667a1f8e0c11d23329235f950c872140a8", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504c73f3c2dc76596795c5ce57be763b5a9060ad45ceec355b04142d7604eb016616e4c0c753605509b62b3d569bd9c77515eff35f2c4b9a2c9b5798b982e5aeeada9eeb59fee8ad81ee1a3259871bfee4a3e906c2c5cffa8c9d6ec114c7c5b9560e5955b077aaf99717df8553d86b81a30d9d832e1000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "transactionIndex": "0x0", "value": "0x0", - "queueIndex": 0, - "gasLimit": "0xf4240", - "data": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504c73f3c2dc76596795c5ce57be763b5a9060ad45ceec355b04142d7604eb016616e4c0c753605509b62b3d569bd9c77515eff35f2c4b9a2c9b5798b982e5aeeada9eeb59fee8ad81ee1a3259871bfee4a3e906c2c5cffa8c9d6ec114c7c5b9560e5955b077aaf99717df8553d86b81a30d9d832e1000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "type": "0x7e", + "v": "0x0", + "r": "0x0", + "s": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "queueIndex": "0x0" } -] \ No newline at end of file +] diff --git a/crates/integration/testdata/validium/1256.json b/crates/integration/testdata/validium/1256.json index 207c77f5..aa8bc29e 100644 --- a/crates/integration/testdata/validium/1256.json +++ b/crates/integration/testdata/validium/1256.json @@ -2,92 +2,85 @@ "chain_id": 33333333, "header": { "parent_hash": "0xd465c6780536f418568d57483ee50e72b833831c19a191ef83389b511251f719", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "miner": "0x0000000000000000000000000000000000000000", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", "state_root": "0x415168a9651e1f3b5dc5628b9e366ad37c8a05de330d27ef573022220732a282", "transactions_root": "0xa5985246bdfe99f40cdaded02470275a1bc68d3a67394a0628fb1ba2638fba1f", "receipts_root": "0xc0ff0a3a0400e8d1075e576d12fe9ade41a34ac72272f72b9d2221fe3e0210af", + "withdrawals_root": null, "logs_bloom": "0x00000000000000000000800000000000000000000000001000000000000000000000000000001000000000000000000000000000000010000000000000000c00000000000000000000000008000000000000000001000000000000000000000000000000020100400000000110000800000000000000000000000058004000000000000000010000000040000000400020008000000000000000000000100040000000000080000000800000000000000000000000000000008000000000000000000002000000000000000020000000000000000000000000000001000020200000000000000000000000000000080000000000000000000000000008040000", "difficulty": "0x1", - "number": "0x4e8", - "gas_limit": "0x7a1200", - "gas_used": "0x25e5b", - "timestamp": "0x6895ef34", - "extra_data": "0x", + "number": 1256, + "gas_limit": 8000000, + "gas_used": 155227, + "timestamp": 1754656564, "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "base_fee_per_gas": "0x0", - "withdrawals_root": null, + "base_fee_per_gas": 0, "blob_gas_used": null, "excess_blob_gas": null, "parent_beacon_block_root": null, - "requests_hash": null + "requests_hash": null, + "extra_data": "0x" }, - "pre_state_root": "0xd8de3a9ec349663f2ba631e7db5b8638a0dbe7f8d3cf3195c786d3eb8ac5e550", - "transaction": [ + "prev_state_root": "0xd8de3a9ec349663f2ba631e7db5b8638a0dbe7f8d3cf3195c786d3eb8ac5e550", + "transactions": [ { - "hash": "0xdbd2b250fd90a9f1d781e120361bb8b28828455c89ea598a424a44be78423127", - "nonce": "0x0", - "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", - "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", - "value": "0x0", - "gas_price": null, - "gas": "0xf4240", - "max_fee_per_gas": "0x0", - "max_priority_fee_per_gas": null, - "max_fee_per_blob_gas": null, - "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a705920000000000000000000000003aafea05430a56097316b3a2cdf7ff28e4cc2b9c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "signature": null, - "chain_id": null, - "blob_versioned_hashes": null, - "access_list": null, - "authorization_list": null, - "transaction_type": 126, - "queue_index": "0x1" + "TxL1Message": { + "hash": "0xdbd2b250fd90a9f1d781e120361bb8b28828455c89ea598a424a44be78423127", + "transaction": { + "queueIndex": "0x1", + "gas": "0xf4240", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a705920000000000000000000000003aafea05430a56097316b3a2cdf7ff28e4cc2b9c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } } ], "withdrawals": null, "states": [ - "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", - "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594d37594dde17dcb02e64023bd3cdddb9068bf6db9", - "0xf8689f3b677423fa337485555bdb61c485755844fb70afb79537ffef69215fad1c40b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0dad338cf3bd32b6e5589b15cb870e8f98a8840c62d70871434444bcfde919ddf", - "0xf9015180a034ffe60b579b442213b6366bfd89b1d76e8b442cc63a97952fd14470d9f8ec1080a0be7c26b6d6ec76fe96797d4ab2281875aa4c5fd84c3300962a9806126bcc24b3a01b12fc256adfd2aa370fdea11f576945f289f1220f5ed4bcd3717e54b1f967858080a0e52288535ac7fc004a23c7c29a1f0b5f884c8db35bab85e1902d875ec52d965e80a0bc550b863978f40529e231caa7b4fdf0a3e036593a253b6524cf693bb8465c2ea07a29a41389a775563f259edd3a16efb5bd22000538cb2497a3f7381ce418a49da0b9b23b80cd6b0e8521908972c4cc9302f23e49e7d6bd22e1228f4ba2acce3a37a07ecab3b62549ff9a35e52f9e9ebf8e41dba602c8c2cbd5e058d15d292a4668c780a016bec6e0789de961941afcea27ad81ac08daf198943b4fe6a557152c237951ada0ab9e001858297618a6854c4077a80dfb5be66336d5c617fa55aae70b7669b68d80", - "0xf851808080808080a0b284313f3cde2222dedc5f9067b40fceb0bed50555bf18fbb7b9d48705febc2d80808080808080a09169a8a5030370a2bc5a6bcfc09fe5218c0524fd4671830314cdb59b7793d1128080", - "0xf8518080a0b01460450ca263e1ad65154e9d8c57d162d1af2ab4669c53115ebc5433cf8cb18080808080808080a0bee831d91e49e67814173afe867c769a38faa75dcea204a24f470c84c24333688080808080", - "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a8295945fdd39bd675b5951be2e58741c1910573a5774f1", - "0xf869a020ccc237cb14f1e7206826bf271fec2ea755a65ca3b2495aa4019e7b27041a3db846f8440180a05832b9e4a453b204b469dd1ec9b5fd8b67ce307834666e308a75c910ddd13112a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", - "0xf869a020cb6b4b7193493044bbb4e88ba2ada699e9da9a01c85b6096bebabe4ba4334ab846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba047747417a662b04fe37e06d9dce49d77cc67bdaa6e04a13ab0df5c54f745dca4", - "0xf869a0206fa4d0b426cd21e9e2efb29f0dcc6e93debf41907d3af7842c2668e734ea2cb846f8440180a0f1b5e1fdadf97363ae22e3c30fc8824a4283434608bbe4d26420f49368f8a8eaa0c34dc3e3b2b96c1410bd4cdfde933f041145c8958a0807dab0705c99f1bb557c", - "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", - "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a058c6460055741fc4aa35ecee30694955aa0d772d607c9457d58b6f78053eb5dfa0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", "0xf8b18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb2880a0444bb20502e2faba351f25402a825472ee36dbc64fc810596a74df733b093276808080a0bba9533e0c3e882950a739322e029fd8b7cf829893583d1cc6882cbfef9ceea1a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0c557d0d8d6d1ccbbba16ce309be7fc47931cce54470663fa528da9c3a90ff37e808080808080", - "0xe21aa034b255ffe46fabbd100c057b05288ed17ee1de7b08dcb47b4de4114275e0e1ff", - "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcc80a0b0ef21434c42e174ada1a8e8e3f713955a31017558b6dcdaef64ec14f33e9149a0bd7940db4b06e68a4fe74d394d0e0cc24e569a62c02111b3d8156f1987cb473ca0df8b9048bad60c470a2654eee3f64e485b1b3d9178f250e93203295e530ac60180a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", - "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0083dd83c98ee9d5da9a44b612a60e4b0663b2ac84b986213cc10dc878700b06ea0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", - "0xf869a02080c5909396c0dfb921e1e67884b5c70f8f29697d6c89ad487bac3c8b772d99b846f8440280a03f9d1fa709b4e3aa6df641355c90dc9ad53d404185634e1bf87ed25406e67f12a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", - "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca", - "0xf87180a0c8b1182fb484dce06eed47858db807094b81378e928229b5645afd3c2edc52b480a0d7fb0b8838d85f28436150765402d495f441359787a3574ad50553b7502f76928080808080a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", - "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a08a955e1b9ed7d6e47c399e1af7b803cacaddf66f4a44c0f8c7a4985d08485d15a0bfc52ec0ce9136cde6fd254961909b29fdbe545c03435baedd2573a1deeeb42aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0d829f43bc2e1241af0f4eb865e49735d3a235e1d1334fde126462993576799aba03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a06027b81f626cad0425a53d01f6241f0c576b1ca9a6a6b672c81762bc8c42b9c1a08d72b212bbb5bb20ef0f8f467a0667c9b81d48ae25db58f1a55aa6af222af894a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", - "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d48195941480082b3164ccd3bcbd1ecb52720f5850f0e45c", "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d95946976a0273fb14fc58df9d7840cfd3256b8af7984", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a08a955e1b9ed7d6e47c399e1af7b803cacaddf66f4a44c0f8c7a4985d08485d15a0bfc52ec0ce9136cde6fd254961909b29fdbe545c03435baedd2573a1deeeb42aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0d829f43bc2e1241af0f4eb865e49735d3a235e1d1334fde126462993576799aba03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a06027b81f626cad0425a53d01f6241f0c576b1ca9a6a6b672c81762bc8c42b9c1a08d72b212bbb5bb20ef0f8f467a0667c9b81d48ae25db58f1a55aa6af222af894a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", "0xf869a020823f37b7de174b4a867ec555284bb1165c8b33cbe4e2f09f2d87e1f9494cbdb846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "0xf8689f3b677423fa337485555bdb61c485755844fb70afb79537ffef69215fad1c40b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0dad338cf3bd32b6e5589b15cb870e8f98a8840c62d70871434444bcfde919ddf", + "0xf869a020ccc237cb14f1e7206826bf271fec2ea755a65ca3b2495aa4019e7b27041a3db846f8440180a05832b9e4a453b204b469dd1ec9b5fd8b67ce307834666e308a75c910ddd13112a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf85180808080808080808080a05016f95a216237ecc6a3b3a2c382c7d1e68e20c28cfb313eb06f83022b9eadfb8080a0238de5c37d08e53783150d3f58c44f048808a8df72321c17607e13245203bb98808080", "0xf8718080a012029a027a77ca1b6f037157f1f0cdafcdf85e7dc03c30ad04c6f2838714de9a80808080a02a0eb47c159b0ab16b7af59ff9988e1ec5f11329350d1b21af9d476e941db8788080a02a3a0fc1952479e950b7ef6015a3667c81b9de102761af6b0750b7149331e455808080808080", + "0xf9011180a037b594ccfeb2dfe165f135c1db841f33e8ad15286c54c4bbf883a6ee971b2639a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da516180a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcca0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0b95fe26ce057456c6c450bc74968f0b02f04598b1040f221d6dcf47f1f975349a09e88921a65a4e0885b5184ed269383efaf0710947c872955061c59fc077a3adb808080808080a08384cbc0e87a1d7e5364b015c99d5adb1339a6632aa7199d203197284c62af8e80", + "0xf8518080a0b01460450ca263e1ad65154e9d8c57d162d1af2ab4669c53115ebc5433cf8cb18080808080808080a0bee831d91e49e67814173afe867c769a38faa75dcea204a24f470c84c24333688080808080", "0xf8518080808080808080808080a0f9015f71561f6a9cf46db1082566825aaf6bddf61711bb6b041d7ef1d5e45af9808080a026c3cbe8ef6d3f9be6ad0cb64ded4df971bbf51131ba45d1f1634c52092aaae680", - "0xf85180808080808080808080a05016f95a216237ecc6a3b3a2c382c7d1e68e20c28cfb313eb06f83022b9eadfb8080a0238de5c37d08e53783150d3f58c44f048808a8df72321c17607e13245203bb98808080", + "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d48195941480082b3164ccd3bcbd1ecb52720f5850f0e45c", + "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca", "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a0588d3c1ab6ca32676770c2e6233e63a2aeec88fc199262d5a64acfb50599fab1", + "0xf9015180a034ffe60b579b442213b6366bfd89b1d76e8b442cc63a97952fd14470d9f8ec1080a0be7c26b6d6ec76fe96797d4ab2281875aa4c5fd84c3300962a9806126bcc24b3a01b12fc256adfd2aa370fdea11f576945f289f1220f5ed4bcd3717e54b1f967858080a0e52288535ac7fc004a23c7c29a1f0b5f884c8db35bab85e1902d875ec52d965e80a0bc550b863978f40529e231caa7b4fdf0a3e036593a253b6524cf693bb8465c2ea07a29a41389a775563f259edd3a16efb5bd22000538cb2497a3f7381ce418a49da0b9b23b80cd6b0e8521908972c4cc9302f23e49e7d6bd22e1228f4ba2acce3a37a07ecab3b62549ff9a35e52f9e9ebf8e41dba602c8c2cbd5e058d15d292a4668c780a016bec6e0789de961941afcea27ad81ac08daf198943b4fe6a557152c237951ada0ab9e001858297618a6854c4077a80dfb5be66336d5c617fa55aae70b7669b68d80", + "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594d37594dde17dcb02e64023bd3cdddb9068bf6db9", + "0xe21aa034b255ffe46fabbd100c057b05288ed17ee1de7b08dcb47b4de4114275e0e1ff", + "0xf888a0209d888b8f443fa80d97d6ef86dad20c16dd6152e9d58bfbcb7e5a45ff5e2555b865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a05192d92dbe93bbbd67fd44f3a8abf691d1f2939158e768762545bd38e1bc39f4a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", "0xf869a0328fda92b5c07164bb42506cfa1f54b01846f04fd75a33912207c883cbae5cfbb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xf869a02080c5909396c0dfb921e1e67884b5c70f8f29697d6c89ad487bac3c8b772d99b846f8440280a03f9d1fa709b4e3aa6df641355c90dc9ad53d404185634e1bf87ed25406e67f12a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", + "0xf869a020cb6b4b7193493044bbb4e88ba2ada699e9da9a01c85b6096bebabe4ba4334ab846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba047747417a662b04fe37e06d9dce49d77cc67bdaa6e04a13ab0df5c54f745dca4", + "0xf8718080a07bc829cf8dd426393ba407faf48530e732143890787e850a8ebf259502709db98080808080a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080808080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", "0xf871808080a0d00e6b55bc202837fd9998d284c31e290376de8ed718d50d4a19ff4d2f04a5f1808080a0537d3711100d980c295a131318a5a81887f9d648200ea981a39017445b5e515f80808080808080a05a956fef773f722f82e74365fcd0b89ef9c940c95ec52ace61b1b33a5328b46c80", - "0xf9011180a037b594ccfeb2dfe165f135c1db841f33e8ad15286c54c4bbf883a6ee971b2639a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da516180a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcca0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0b95fe26ce057456c6c450bc74968f0b02f04598b1040f221d6dcf47f1f975349a09e88921a65a4e0885b5184ed269383efaf0710947c872955061c59fc077a3adb808080808080a08384cbc0e87a1d7e5364b015c99d5adb1339a6632aa7199d203197284c62af8e80", - "0xf888a0209d888b8f443fa80d97d6ef86dad20c16dd6152e9d58bfbcb7e5a45ff5e2555b865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a05192d92dbe93bbbd67fd44f3a8abf691d1f2939158e768762545bd38e1bc39f4a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf869a0206fa4d0b426cd21e9e2efb29f0dcc6e93debf41907d3af7842c2668e734ea2cb846f8440180a0f1b5e1fdadf97363ae22e3c30fc8824a4283434608bbe4d26420f49368f8a8eaa0c34dc3e3b2b96c1410bd4cdfde933f041145c8958a0807dab0705c99f1bb557c", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594dfadf71fa473d6a7a7a9dcd1499c4315fc457bb8", - "0xf8718080a07bc829cf8dd426393ba407faf48530e732143890787e850a8ebf259502709db98080808080a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080808080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380" + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a058c6460055741fc4aa35ecee30694955aa0d772d607c9457d58b6f78053eb5dfa0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a8295945fdd39bd675b5951be2e58741c1910573a5774f1", + "0xf87180a0c8b1182fb484dce06eed47858db807094b81378e928229b5645afd3c2edc52b480a0d7fb0b8838d85f28436150765402d495f441359787a3574ad50553b7502f76928080808080a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcc80a0b0ef21434c42e174ada1a8e8e3f713955a31017558b6dcdaef64ec14f33e9149a0bd7940db4b06e68a4fe74d394d0e0cc24e569a62c02111b3d8156f1987cb473ca0df8b9048bad60c470a2654eee3f64e485b1b3d9178f250e93203295e530ac60180a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0083dd83c98ee9d5da9a44b612a60e4b0663b2ac84b986213cc10dc878700b06ea0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf851808080808080a0b284313f3cde2222dedc5f9067b40fceb0bed50555bf18fbb7b9d48705febc2d80808080808080a09169a8a5030370a2bc5a6bcfc09fe5218c0524fd4671830314cdb59b7793d1128080" ], "codes": [ - "0x363d3d373d3d3d363d73d37594dde17dcb02e64023bd3cdddb9068bf6db95af43d82803e903d91602b57fd5bf3", + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf8481565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf846001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x363d3d373d3d3d363d73d37594dde17dcb02e64023bd3cdddb9068bf6db95af43d82803e903d91602b57fd5bf3", "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb95781565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb9576001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b7169063b2267a7b903490610c22907f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", - "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", - "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a", - "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a" + "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a" ] } \ No newline at end of file diff --git a/crates/integration/testdata/validium/1256_validium_txs.json b/crates/integration/testdata/validium/1256_validium_txs.json index 3181829e..f57eba53 100644 --- a/crates/integration/testdata/validium/1256_validium_txs.json +++ b/crates/integration/testdata/validium/1256_validium_txs.json @@ -1,10 +1,21 @@ [ { - "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", - "target": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "blockHash": "0xa4c08205782c3a0237a37c821bf05348948daa3e8e027d6d4f6bb9c8def0f0e2", + "blockNumber": "0x4e8", + "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "gas": "0xf4240", + "gasPrice": "0x0", + "hash": "0xc098e187a6beca2047d53ae95be711251405c911f96a0e28576c5bd33b403f52", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504c28e2df1c91ff662bc8d76e919bff25f558b31324dbd2eaeda382b9e9e5fe74658ac77718c3d2dbe8d9a3809c7fe8d7e83cdb59f5b89aaee465b69b2d5154ec3fb61f2f9034b26254f08b11e0bddd4a12ddf94512399a47fb2068d9a2c672b73106c147c82b84fdc6e5c61b4425bba06d9a9fda3000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "transactionIndex": "0x0", "value": "0x0", - "queueIndex": 1, - "gasLimit": "0xf4240", - "data": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504c28e2df1c91ff662bc8d76e919bff25f558b31324dbd2eaeda382b9e9e5fe74658ac77718c3d2dbe8d9a3809c7fe8d7e83cdb59f5b89aaee465b69b2d5154ec3fb61f2f9034b26254f08b11e0bddd4a12ddf94512399a47fb2068d9a2c672b73106c147c82b84fdc6e5c61b4425bba06d9a9fda3000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "type": "0x7e", + "v": "0x0", + "r": "0x0", + "s": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "queueIndex": "0x1" } -] \ No newline at end of file +] diff --git a/crates/integration/testdata/validium/1276.json b/crates/integration/testdata/validium/1276.json index ed02a60d..d06bf66e 100644 --- a/crates/integration/testdata/validium/1276.json +++ b/crates/integration/testdata/validium/1276.json @@ -2,94 +2,87 @@ "chain_id": 33333333, "header": { "parent_hash": "0xf511f5b60a4998719f8733efe836150f28ca3ab450d076c184b4024b60e742d1", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "miner": "0x0000000000000000000000000000000000000000", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", "state_root": "0xf9227a9a66cfb1c29e41fc76684123ad153269fc109c33e230dc3b48f722b17b", "transactions_root": "0x16f877f7deb45548be28e410df7d2baa7b4fecdc6acd050c7dce3700079d4cbe", "receipts_root": "0x71caf7ccc2c7be5bf7086346030e906266d90727012fb641591f419a8f1d3005", + "withdrawals_root": null, "logs_bloom": "0x00000000000000000000800000000000800000000000001000000000000000000000000000001000000000000000000000000400000210000000000000000400000000000000000000000008000000000000000001000000000000000000000000000000020100400000000010000800000000000000000000000058000000000000000000010000000060000000400020008000000000000000000000100000000000000080000000800000000000000000000000000000008000000000000000000002000000000000000020000000000000000000000000000000000020200000000000000000200000000000080000000800000000000000000008000000", "difficulty": "0x1", - "number": "0x4fc", - "gas_limit": "0x7a1200", - "gas_used": "0x21b8f", - "timestamp": "0x6895ef48", - "extra_data": "0x", + "number": 1276, + "gas_limit": 8000000, + "gas_used": 138127, + "timestamp": 1754656584, "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "base_fee_per_gas": "0x0", - "withdrawals_root": null, + "base_fee_per_gas": 0, "blob_gas_used": null, "excess_blob_gas": null, "parent_beacon_block_root": null, - "requests_hash": null + "requests_hash": null, + "extra_data": "0x" }, - "pre_state_root": "0x415168a9651e1f3b5dc5628b9e366ad37c8a05de330d27ef573022220732a282", - "transaction": [ + "prev_state_root": "0x415168a9651e1f3b5dc5628b9e366ad37c8a05de330d27ef573022220732a282", + "transactions": [ { - "hash": "0x36cd9714ab88ee82730628acb5ab719d0580de1a3f658e9279ba1a53c33e3390", - "nonce": "0x0", - "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", - "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", - "value": "0x0", - "gas_price": null, - "gas": "0xf4240", - "max_fee_per_gas": "0x0", - "max_priority_fee_per_gas": null, - "max_fee_per_blob_gas": null, - "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a705920000000000000000000000005ab1be4da1f732ca0c604f1fdac8299053febfe3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "signature": null, - "chain_id": null, - "blob_versioned_hashes": null, - "access_list": null, - "authorization_list": null, - "transaction_type": 126, - "queue_index": "0x2" + "TxL1Message": { + "hash": "0x36cd9714ab88ee82730628acb5ab719d0580de1a3f658e9279ba1a53c33e3390", + "transaction": { + "queueIndex": "0x2", + "gas": "0xf4240", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a705920000000000000000000000005ab1be4da1f732ca0c604f1fdac8299053febfe3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } } ], "withdrawals": null, "states": [ - "0xeaa03fa4bec1d3298408bb5afcfcd9c430549c5b31f8aa5c5848151c0a55f473c34d88872386f26fc10000", - "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d48195941480082b3164ccd3bcbd1ecb52720f5850f0e45c", - "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcc80a0b0ef21434c42e174ada1a8e8e3f713955a31017558b6dcdaef64ec14f33e9149a0bd7940db4b06e68a4fe74d394d0e0cc24e569a62c02111b3d8156f1987cb473ca0df8b9048bad60c470a2654eee3f64e485b1b3d9178f250e93203295e530ac60180a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", - "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca", - "0xf851808080808080a0b284313f3cde2222dedc5f9067b40fceb0bed50555bf18fbb7b9d48705febc2d80808080808080a09169a8a5030370a2bc5a6bcfc09fe5218c0524fd4671830314cdb59b7793d1128080", - "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", - "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a0588d3c1ab6ca32676770c2e6233e63a2aeec88fc199262d5a64acfb50599fab1", - "0xf8518080a0b01460450ca263e1ad65154e9d8c57d162d1af2ab4669c53115ebc5433cf8cb18080808080808080a0bee831d91e49e67814173afe867c769a38faa75dcea204a24f470c84c24333688080808080", - "0xf9013180a037b594ccfeb2dfe165f135c1db841f33e8ad15286c54c4bbf883a6ee971b2639a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da516180a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcca0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0b95fe26ce057456c6c450bc74968f0b02f04598b1040f221d6dcf47f1f975349a09e88921a65a4e0885b5184ed269383efaf0710947c872955061c59fc077a3adba0349340bdd908871236fa260a16a0cc07ca99b1be947ff71d1bc0342bdebf5de68080808080a08384cbc0e87a1d7e5364b015c99d5adb1339a6632aa7199d203197284c62af8e80", - "0xf8518080808080808080808080a0f9015f71561f6a9cf46db1082566825aaf6bddf61711bb6b041d7ef1d5e45af9808080a026c3cbe8ef6d3f9be6ad0cb64ded4df971bbf51131ba45d1f1634c52092aaae680", + "0xf8f18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a058fd0c07ae2ba9df11414ef2392a0bc1a631ce255556ae323a1a9c8dd030e18ca0444bb20502e2faba351f25402a825472ee36dbc64fc810596a74df733b093276808080a0bba9533e0c3e882950a739322e029fd8b7cf829893583d1cc6882cbfef9ceea1a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0c557d0d8d6d1ccbbba16ce309be7fc47931cce54470663fa528da9c3a90ff37e80a0acfe702776deb4688bd2282801dab92113716b20e319608a1c683e954a38040f80808080", + "0xf871808080a00f33314b1817ecef019640dcc40dd46b5573baf8544cbfd7e29b5ce7a4c247db808080a0537d3711100d980c295a131318a5a81887f9d648200ea981a39017445b5e515f80808080808080a0b8f779f0e4739e12bae97866a670745ee321ea7f48a9766663dab3750a089c3280", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d95946976a0273fb14fc58df9d7840cfd3256b8af7984", + "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594d37594dde17dcb02e64023bd3cdddb9068bf6db9", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a08a955e1b9ed7d6e47c399e1af7b803cacaddf66f4a44c0f8c7a4985d08485d15a0bfc52ec0ce9136cde6fd254961909b29fdbe545c03435baedd2573a1deeeb42aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0d829f43bc2e1241af0f4eb865e49735d3a235e1d1334fde126462993576799aba03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a06027b81f626cad0425a53d01f6241f0c576b1ca9a6a6b672c81762bc8c42b9c1a08d72b212bbb5bb20ef0f8f467a0667c9b81d48ae25db58f1a55aa6af222af894a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf8718080a07bc829cf8dd426393ba407faf48530e732143890787e850a8ebf259502709db98080808080a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080808080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", "0xf869a02080c5909396c0dfb921e1e67884b5c70f8f29697d6c89ad487bac3c8b772d99b846f8440280a03f9d1fa709b4e3aa6df641355c90dc9ad53d404185634e1bf87ed25406e67f12a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", + "0xf8689f3b677423fa337485555bdb61c485755844fb70afb79537ffef69215fad1c40b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0dad338cf3bd32b6e5589b15cb870e8f98a8840c62d70871434444bcfde919ddf", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594dfadf71fa473d6a7a7a9dcd1499c4315fc457bb8", "0xf87180a0199ab2bc362d32aefb61f5bb3371af9a36d426f760e2dcb0c0815e67cae4dba180a0d7fb0b8838d85f28436150765402d495f441359787a3574ad50553b7502f76928080808080a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", - "0xf9015180a034ffe60b579b442213b6366bfd89b1d76e8b442cc63a97952fd14470d9f8ec1080a0be7c26b6d6ec76fe96797d4ab2281875aa4c5fd84c3300962a9806126bcc24b3a0ca808a00006496e3f5a8ee3f8c834cecd38e5fd48cfecdbc4aab63269b4113668080a0e52288535ac7fc004a23c7c29a1f0b5f884c8db35bab85e1902d875ec52d965e80a0bc550b863978f40529e231caa7b4fdf0a3e036593a253b6524cf693bb8465c2ea081aa8c377f94d985a8aadefe3f0f1270d0f0a0c3dccd2460200a76961a74574da0b9b23b80cd6b0e8521908972c4cc9302f23e49e7d6bd22e1228f4ba2acce3a37a07ecab3b62549ff9a35e52f9e9ebf8e41dba602c8c2cbd5e058d15d292a4668c780a016bec6e0789de961941afcea27ad81ac08daf198943b4fe6a557152c237951ada0ab9e001858297618a6854c4077a80dfb5be66336d5c617fa55aae70b7669b68d80", - "0xf869a020823f37b7de174b4a867ec555284bb1165c8b33cbe4e2f09f2d87e1f9494cbdb846f8440280a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a08a955e1b9ed7d6e47c399e1af7b803cacaddf66f4a44c0f8c7a4985d08485d15a0bfc52ec0ce9136cde6fd254961909b29fdbe545c03435baedd2573a1deeeb42aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0d829f43bc2e1241af0f4eb865e49735d3a235e1d1334fde126462993576799aba03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a06027b81f626cad0425a53d01f6241f0c576b1ca9a6a6b672c81762bc8c42b9c1a08d72b212bbb5bb20ef0f8f467a0667c9b81d48ae25db58f1a55aa6af222af894a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcc80a0b0ef21434c42e174ada1a8e8e3f713955a31017558b6dcdaef64ec14f33e9149a0bd7940db4b06e68a4fe74d394d0e0cc24e569a62c02111b3d8156f1987cb473ca0df8b9048bad60c470a2654eee3f64e485b1b3d9178f250e93203295e530ac60180a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xe21aa034b255ffe46fabbd100c057b05288ed17ee1de7b08dcb47b4de4114275e0e1ff", "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a058c6460055741fc4aa35ecee30694955aa0d772d607c9457d58b6f78053eb5dfa0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf8518080808080808080808080a0f9015f71561f6a9cf46db1082566825aaf6bddf61711bb6b041d7ef1d5e45af9808080a026c3cbe8ef6d3f9be6ad0cb64ded4df971bbf51131ba45d1f1634c52092aaae680", + "0xf9013180a037b594ccfeb2dfe165f135c1db841f33e8ad15286c54c4bbf883a6ee971b2639a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da516180a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcca0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0b95fe26ce057456c6c450bc74968f0b02f04598b1040f221d6dcf47f1f975349a09e88921a65a4e0885b5184ed269383efaf0710947c872955061c59fc077a3adba0349340bdd908871236fa260a16a0cc07ca99b1be947ff71d1bc0342bdebf5de68080808080a08384cbc0e87a1d7e5364b015c99d5adb1339a6632aa7199d203197284c62af8e80", + "0xf851808080808080a0b284313f3cde2222dedc5f9067b40fceb0bed50555bf18fbb7b9d48705febc2d80808080808080a09169a8a5030370a2bc5a6bcfc09fe5218c0524fd4671830314cdb59b7793d1128080", "0xf8718080a012029a027a77ca1b6f037157f1f0cdafcdf85e7dc03c30ad04c6f2838714de9a80808080a02a0eb47c159b0ab16b7af59ff9988e1ec5f11329350d1b21af9d476e941db8788080a02a3a0fc1952479e950b7ef6015a3667c81b9de102761af6b0750b7149331e455808080808080", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a8295945fdd39bd675b5951be2e58741c1910573a5774f1", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a0588d3c1ab6ca32676770c2e6233e63a2aeec88fc199262d5a64acfb50599fab1", + "0xf869a0328fda92b5c07164bb42506cfa1f54b01846f04fd75a33912207c883cbae5cfbb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", + "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d48195941480082b3164ccd3bcbd1ecb52720f5850f0e45c", + "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", + "0xf8518080a0b01460450ca263e1ad65154e9d8c57d162d1af2ab4669c53115ebc5433cf8cb18080808080808080a0bee831d91e49e67814173afe867c769a38faa75dcea204a24f470c84c24333688080808080", + "0xf838a033978b4c69c48dd978ab43fe30f077615294f938fb7f936d9eb340e51ea7db2e9695125300000000000000000000000000000000000004", + "0xf85180808080808080808080a05016f95a216237ecc6a3b3a2c382c7d1e68e20c28cfb313eb06f83022b9eadfb8080a0238de5c37d08e53783150d3f58c44f048808a8df72321c17607e13245203bb98808080", "0xf869a0206fa4d0b426cd21e9e2efb29f0dcc6e93debf41907d3af7842c2668e734ea2cb846f8440180a03bc66a9018136605db122456257907a1c79f389b0dd56dc6f336d4e6c9cd25b3a0c34dc3e3b2b96c1410bd4cdfde933f041145c8958a0807dab0705c99f1bb557c", - "0xf8f18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a058fd0c07ae2ba9df11414ef2392a0bc1a631ce255556ae323a1a9c8dd030e18ca0444bb20502e2faba351f25402a825472ee36dbc64fc810596a74df733b093276808080a0bba9533e0c3e882950a739322e029fd8b7cf829893583d1cc6882cbfef9ceea1a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0c557d0d8d6d1ccbbba16ce309be7fc47931cce54470663fa528da9c3a90ff37e80a0acfe702776deb4688bd2282801dab92113716b20e319608a1c683e954a38040f80808080", "0xf869a020cb6b4b7193493044bbb4e88ba2ada699e9da9a01c85b6096bebabe4ba4334ab846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba047747417a662b04fe37e06d9dce49d77cc67bdaa6e04a13ab0df5c54f745dca4", - "0xf869a020ccc237cb14f1e7206826bf271fec2ea755a65ca3b2495aa4019e7b27041a3db846f8440180a05832b9e4a453b204b469dd1ec9b5fd8b67ce307834666e308a75c910ddd13112a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", - "0xf871808080a00f33314b1817ecef019640dcc40dd46b5573baf8544cbfd7e29b5ce7a4c247db808080a0537d3711100d980c295a131318a5a81887f9d648200ea981a39017445b5e515f80808080808080a0b8f779f0e4739e12bae97866a670745ee321ea7f48a9766663dab3750a089c3280", - "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594dfadf71fa473d6a7a7a9dcd1499c4315fc457bb8", - "0xf838a033978b4c69c48dd978ab43fe30f077615294f938fb7f936d9eb340e51ea7db2e9695125300000000000000000000000000000000000004", + "0xf869a020823f37b7de174b4a867ec555284bb1165c8b33cbe4e2f09f2d87e1f9494cbdb846f8440280a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0083dd83c98ee9d5da9a44b612a60e4b0663b2ac84b986213cc10dc878700b06ea0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", "0xf888a0209d888b8f443fa80d97d6ef86dad20c16dd6152e9d58bfbcb7e5a45ff5e2555b865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a0aad7c72b4d577a3d1d97154c0fc59ed849c8564be46d665253635f24f379ab2ea0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", - "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", - "0xf869a0328fda92b5c07164bb42506cfa1f54b01846f04fd75a33912207c883cbae5cfbb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", - "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d95946976a0273fb14fc58df9d7840cfd3256b8af7984", - "0xf85180808080808080808080a05016f95a216237ecc6a3b3a2c382c7d1e68e20c28cfb313eb06f83022b9eadfb8080a0238de5c37d08e53783150d3f58c44f048808a8df72321c17607e13245203bb98808080", - "0xf8718080a07bc829cf8dd426393ba407faf48530e732143890787e850a8ebf259502709db98080808080a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080808080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", - "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594d37594dde17dcb02e64023bd3cdddb9068bf6db9", - "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a8295945fdd39bd675b5951be2e58741c1910573a5774f1", - "0xf8689f3b677423fa337485555bdb61c485755844fb70afb79537ffef69215fad1c40b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0dad338cf3bd32b6e5589b15cb870e8f98a8840c62d70871434444bcfde919ddf", - "0xe21aa034b255ffe46fabbd100c057b05288ed17ee1de7b08dcb47b4de4114275e0e1ff" + "0xf869a020ccc237cb14f1e7206826bf271fec2ea755a65ca3b2495aa4019e7b27041a3db846f8440180a05832b9e4a453b204b469dd1ec9b5fd8b67ce307834666e308a75c910ddd13112a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca", + "0xf9015180a034ffe60b579b442213b6366bfd89b1d76e8b442cc63a97952fd14470d9f8ec1080a0be7c26b6d6ec76fe96797d4ab2281875aa4c5fd84c3300962a9806126bcc24b3a0ca808a00006496e3f5a8ee3f8c834cecd38e5fd48cfecdbc4aab63269b4113668080a0e52288535ac7fc004a23c7c29a1f0b5f884c8db35bab85e1902d875ec52d965e80a0bc550b863978f40529e231caa7b4fdf0a3e036593a253b6524cf693bb8465c2ea081aa8c377f94d985a8aadefe3f0f1270d0f0a0c3dccd2460200a76961a74574da0b9b23b80cd6b0e8521908972c4cc9302f23e49e7d6bd22e1228f4ba2acce3a37a07ecab3b62549ff9a35e52f9e9ebf8e41dba602c8c2cbd5e058d15d292a4668c780a016bec6e0789de961941afcea27ad81ac08daf198943b4fe6a557152c237951ada0ab9e001858297618a6854c4077a80dfb5be66336d5c617fa55aae70b7669b68d80", + "0xeaa03fa4bec1d3298408bb5afcfcd9c430549c5b31f8aa5c5848151c0a55f473c34d88872386f26fc10000" ], "codes": [ - "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", - "0x363d3d373d3d3d363d73d37594dde17dcb02e64023bd3cdddb9068bf6db95af43d82803e903d91602b57fd5bf3", "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a", - "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb95781565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb9576001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b7169063b2267a7b903490610c22907f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x363d3d373d3d3d363d73d37594dde17dcb02e64023bd3cdddb9068bf6db95af43d82803e903d91602b57fd5bf3", "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf8481565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf846001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", - "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a" + "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", + "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb95781565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb9576001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b7169063b2267a7b903490610c22907f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a" ] } \ No newline at end of file diff --git a/crates/integration/testdata/validium/1276_validium_txs.json b/crates/integration/testdata/validium/1276_validium_txs.json index d32fb440..cf5798e2 100644 --- a/crates/integration/testdata/validium/1276_validium_txs.json +++ b/crates/integration/testdata/validium/1276_validium_txs.json @@ -1,10 +1,21 @@ [ { - "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", - "target": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "blockHash": "0x69235f1910828bfc72718a9b6120ccf32bbcaff9e86447fc5ae76c4d78550e8c", + "blockNumber": "0x4fc", + "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "gas": "0xf4240", + "gasPrice": "0x0", + "hash": "0xb99ae9817dea8f5fc099d8301a81f1a403be4713f1d8351983e71b254292abb5", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000750490109ecdd2821a2bff973f758b1dc4ec9fbf5621d829a3e2085c24e70b0cce6d79ee2abeda08ca60962db7a5029e92d3325229ec31c3c907c83c833204568d0b9efcd7f83485123f9e056772b62c4e332288e41aa15537ea2262c844a6c8f8ea49ca4c3c0012e7c5177392540f1a86ff0b68c1d4000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "transactionIndex": "0x0", "value": "0x0", - "queueIndex": 2, - "gasLimit": "0xf4240", - "data": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000750490109ecdd2821a2bff973f758b1dc4ec9fbf5621d829a3e2085c24e70b0cce6d79ee2abeda08ca60962db7a5029e92d3325229ec31c3c907c83c833204568d0b9efcd7f83485123f9e056772b62c4e332288e41aa15537ea2262c844a6c8f8ea49ca4c3c0012e7c5177392540f1a86ff0b68c1d4000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "type": "0x7e", + "v": "0x0", + "r": "0x0", + "s": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "queueIndex": "0x2" } -] \ No newline at end of file +] diff --git a/crates/integration/tests/chunk_circuit.rs b/crates/integration/tests/chunk_circuit.rs index 8177c7ed..5af2792c 100644 --- a/crates/integration/tests/chunk_circuit.rs +++ b/crates/integration/tests/chunk_circuit.rs @@ -1,5 +1,6 @@ use alloy_primitives::B256; use eyre::Ok; +use sbv_primitives::types::consensus::TxL1Message; use scroll_zkvm_integration::testers::PATH_TESTDATA; use scroll_zkvm_integration::testers::chunk::read_block_witness; use scroll_zkvm_integration::{ @@ -12,7 +13,7 @@ use scroll_zkvm_integration::{ }; use scroll_zkvm_prover::utils::read_json; use scroll_zkvm_prover::{Prover, utils::vm::ExecutionResult}; -use scroll_zkvm_types::chunk::{ChunkWitness, QueueTransaction, SecretKey}; +use scroll_zkvm_types::chunk::{ChunkWitness, SecretKey}; use scroll_zkvm_types::public_inputs::ForkName; use std::env; use std::path::Path; @@ -83,9 +84,9 @@ fn test_execute_validium() -> eyre::Result<()> { let secret_key = hex::decode(env::var("VALIDIUM_KEY")?)?; let secret_key = SecretKey::try_from_bytes(&secret_key)?; - for blk in [1019, 1256, 1276] { + for blk in [1019, 1256, 1276, 1141071] { let block_witness = read_block_witness(base_dir.join(format!("{blk}.json")))?; - let validium_txs: Vec = + let validium_txs: Vec = read_json(base_dir.join(format!("{blk}_validium_txs.json")))?; let witness = ChunkWitness::new_validium( diff --git a/crates/types/chunk/src/lib.rs b/crates/types/chunk/src/lib.rs index 75d025a4..98f0ee8f 100644 --- a/crates/types/chunk/src/lib.rs +++ b/crates/types/chunk/src/lib.rs @@ -1,7 +1,7 @@ mod types; mod witness; -pub use types::validium::{QueueTransaction, SecretKey}; +pub use types::validium::SecretKey; pub use witness::{ChunkWitness, LegacyChunkWitness}; mod execute; diff --git a/crates/types/chunk/src/types.rs b/crates/types/chunk/src/types.rs index 50edd9da..15bf5dd2 100644 --- a/crates/types/chunk/src/types.rs +++ b/crates/types/chunk/src/types.rs @@ -1,15 +1,14 @@ use std::ops::Deref; -use crate::QueueTransaction; use crate::types::validium::SecretKey; use crate::witness::ValidiumInputs; use alloy_primitives::keccak256; use itertools::Itertools; use sbv_helpers::manually_drop_on_zkvm; -use sbv_primitives::types::consensus::TxL1Message; use sbv_primitives::{ B256, U256, types::{ + consensus::TxL1Message, eips::Encodable2718, reth::primitives::{Block, RecoveredBlock, TransactionSigned}, }, @@ -140,7 +139,7 @@ trait BlockExt { fn hash_msg_queue( &self, initial_queue_hash: &B256, - validium_txs: Option<(&[QueueTransaction], &SecretKey)>, + validium_txs: Option<(&[TxL1Message], &SecretKey)>, ) -> B256; } @@ -183,7 +182,7 @@ impl BlockExt for RecoveredBlock { fn hash_msg_queue( &self, initial_queue_hash: &B256, - validium_txs: Option<(&[QueueTransaction], &SecretKey)>, + validium_txs: Option<(&[TxL1Message], &SecretKey)>, ) -> B256 { let mut rolling_hash = *initial_queue_hash; @@ -206,7 +205,6 @@ impl BlockExt for RecoveredBlock { if let Some((txs, secret_key)) = validium_txs { for (validium_tx, tx_in_block) in txs.iter().zip_eq(self.l1_txs_iter()) { - let validium_tx = TxL1Message::from(validium_tx); match validium::decrypt(&validium_tx, secret_key) { Ok(decrypted) => { assert_eq!(decrypted, *tx_in_block); diff --git a/crates/types/chunk/src/types/validium.rs b/crates/types/chunk/src/types/validium.rs index de5ecddc..ade303ec 100644 --- a/crates/types/chunk/src/types/validium.rs +++ b/crates/types/chunk/src/types/validium.rs @@ -7,20 +7,6 @@ use sbv_primitives::types::consensus::TxL1Message; pub use ecies::SecretKey; sol! { - #[derive( - Debug, - serde::Deserialize, - serde::Serialize, - )] - event QueueTransaction( - address indexed sender, - address indexed target, - uint256 value, - uint64 queueIndex, - uint256 gasLimit, - bytes data - ); - #[derive(Debug)] function relayMessage( address sender, @@ -62,19 +48,6 @@ pub enum ValidiumError { InvalidTarget, } -impl From<&QueueTransaction> for TxL1Message { - fn from(tx: &QueueTransaction) -> Self { - TxL1Message { - queue_index: tx.queueIndex, - gas_limit: tx.gasLimit.to(), - to: tx.target, - value: tx.value, - sender: tx.sender, - input: tx.data.clone(), - } - } -} - pub fn decrypt(tx: &TxL1Message, secret_key: &SecretKey) -> Result { Ok(TxL1Message { queue_index: tx.queue_index, diff --git a/crates/types/chunk/src/witness.rs b/crates/types/chunk/src/witness.rs index f7908509..cbe2c464 100644 --- a/crates/types/chunk/src/witness.rs +++ b/crates/types/chunk/src/witness.rs @@ -1,6 +1,7 @@ -use crate::types::validium::{QueueTransaction, SecretKey}; +use crate::types::validium::SecretKey; use alloy_primitives::B256; use sbv_core::verifier::StateCommitMode; +use sbv_primitives::types::consensus::TxL1Message; use sbv_primitives::{U256, types::BlockWitness}; use std::collections::HashSet; use types_base::{fork_name::ForkName, public_inputs::chunk::ChunkInfo}; @@ -26,7 +27,7 @@ pub struct ChunkWitness { #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] pub struct ValidiumInputs { /// The validium transactions for each block in the chunk. - pub validium_txs: Vec>, + pub validium_txs: Vec>, /// The secret key used for decrypting validium transactions. pub secret_key: Box<[u8]>, } @@ -75,7 +76,7 @@ impl ChunkWitness { blocks: &[BlockWitness], prev_msg_queue_hash: B256, fork_name: ForkName, - validium_txs: Vec>, + validium_txs: Vec>, secret_key: SecretKey, ) -> Self { Self::new( From 626ee627e1b6ae138986313329141faaa980e8b5 Mon Sep 17 00:00:00 2001 From: lightsing Date: Fri, 22 Aug 2025 10:58:40 +0800 Subject: [PATCH 36/84] add script --- .../testdata/validium/1141071.json | 102 ++++++++++++++++++ .../validium/1141071_validium_txs.json | 40 +++++++ .../testdata/validium/dump-validium-block.sh | 23 ++++ 3 files changed, 165 insertions(+) create mode 100644 crates/integration/testdata/validium/1141071.json create mode 100644 crates/integration/testdata/validium/1141071_validium_txs.json create mode 100644 crates/integration/testdata/validium/dump-validium-block.sh diff --git a/crates/integration/testdata/validium/1141071.json b/crates/integration/testdata/validium/1141071.json new file mode 100644 index 00000000..c552bc2d --- /dev/null +++ b/crates/integration/testdata/validium/1141071.json @@ -0,0 +1,102 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xc5e4628e49e72a55b05a8e5940d73c5f9abf0da6962063302ccc563635602d0e", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xd1e98880945b887b04b23ca0d2480adee255170543279e5c5a0b977913f31acb", + "transactions_root": "0xe5c4c57c2f675c696a8de7ab6615b16960a0531b672ab915fbf061b9182ddc74", + "receipts_root": "0x05e1e469f7ee06c6b523aa8cc9ffeb4ea55090cb428dfb582cafa1931c51e1ab", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000800000000000000000000000001000000000000000000000000000001000000000000000000000000000000010000000000000000400000000000000000000400008000000000001000001000000000000400000100000000000020100400000000010000800000000000000000000000058040000000000000000010000000040000000400020008000000000000000008000100000000000000080000000800000000000000000000000000000008000004000000000000002000000000000000020000000000000000000000000000000000020200000004000000000000000000000080000000000000000000001000008000000", + "difficulty": "0x1", + "number": 1141071, + "gas_limit": 8000000, + "gas_used": 259154, + "timestamp": 1755796400, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xc39aa3516fc81ea2282645a7b2ca7c0ff9949f675f1047e60b0c3bc92c19b170", + "transactions": [ + { + "TxL1Message": { + "hash": "0x283005aee56b49ba905c80d8eed0c68808dcd7c3b6cc7be338a9b3711d03f5f9", + "transaction": { + "queueIndex": "0x4", + "gas": "0xf4240", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000021ace8d80c80d1c179707353cb434ec4f5982c43000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + { + "TxL1Message": { + "hash": "0x762b59368609ffafbc4e2895ed4cd32dc14448aaba8766f1c50cab13c4400b44", + "transaction": { + "queueIndex": "0x5", + "gas": "0xf4240", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000021ace8d80c80d1c179707353cb434ec4f5982c43000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } + } + ], + "withdrawals": null, + "states": [ + "0xf8518080a053d31e4843b226c066087063bb165d1e3e003bbd77cd4dbc393bb08a120f4e1e80808080808080a0159a940be34149624d9ff54f84796b4968a547549d969c92bdb2ce9d70fd2619808080808080", + "0xf869a02080c5909396c0dfb921e1e67884b5c70f8f29697d6c89ad487bac3c8b772d99b846f8440280a03f9d1fa709b4e3aa6df641355c90dc9ad53d404185634e1bf87ed25406e67f12a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", + "0xf869a020823f37b7de174b4a867ec555284bb1165c8b33cbe4e2f09f2d87e1f9494cbdb846f8440480a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "0xf869a0206fa4d0b426cd21e9e2efb29f0dcc6e93debf41907d3af7842c2668e734ea2cb846f8440180a06e87a5e4eeca3fe1f93b477e697b332f191c694e7eebeae1672dc018eb5395efa0c34dc3e3b2b96c1410bd4cdfde933f041145c8958a0807dab0705c99f1bb557c", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcc80a0b0ef21434c42e174ada1a8e8e3f713955a31017558b6dcdaef64ec14f33e9149a0bd7940db4b06e68a4fe74d394d0e0cc24e569a62c02111b3d8156f1987cb473ca0df8b9048bad60c470a2654eee3f64e485b1b3d9178f250e93203295e530ac60180a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a08f4ec04dbbb020ac32a4bdee720ed9330593180122ad620b4032e3a8fbd2a65ba05490dd2fd0b602ab6dde6fe768494ecd5ccc75186c8c1d5b7fecacce5e2be620a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0d829f43bc2e1241af0f4eb865e49735d3a235e1d1334fde126462993576799aba03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a06027b81f626cad0425a53d01f6241f0c576b1ca9a6a6b672c81762bc8c42b9c1a0200afa65929932f7cfe42dd0c8041fb448e3f1bdc041a61e65caf06a0054fda7a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf87180a0ef2f9e570919641e1bbc7ec1202c401ae1aa67ec1f8fa78d84adadad2fa7ff0080a0d7fb0b8838d85f28436150765402d495f441359787a3574ad50553b7502f76928080808080a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a058c6460055741fc4aa35ecee30694955aa0d772d607c9457d58b6f78053eb5dfa0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", + "0xf8f18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a058fd0c07ae2ba9df11414ef2392a0bc1a631ce255556ae323a1a9c8dd030e18ca0444bb20502e2faba351f25402a825472ee36dbc64fc810596a74df733b093276808080a0bba9533e0c3e882950a739322e029fd8b7cf829893583d1cc6882cbfef9ceea1a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0fa513dc885e7e6375d814da5f76af78d27b1c68bcb3dcf924689d3b9099a049d80a038c51dd490535b5feada54b14769414f379beaf3aafe15251bc5482084787d1c80808080", + "0xeaa03fa4bec1d3298408bb5afcfcd9c430549c5b31f8aa5c5848151c0a55f473c34d8887470de4df820000", + "0xf888a0209d888b8f443fa80d97d6ef86dad20c16dd6152e9d58bfbcb7e5a45ff5e2555b865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a00e5ef978c63f5ba19740a578f706f7e3ae643b4bc707681db76f3007107bc111a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d95946976a0273fb14fc58df9d7840cfd3256b8af7984", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a0f15166af8f3fea56417391a9b12fa833a943ffb894d015fbb225463315dbffe3", + "0xf869a0328fda92b5c07164bb42506cfa1f54b01846f04fd75a33912207c883cbae5cfbb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xf8518080808080808080808080a0f9015f71561f6a9cf46db1082566825aaf6bddf61711bb6b041d7ef1d5e45af9808080a026c3cbe8ef6d3f9be6ad0cb64ded4df971bbf51131ba45d1f1634c52092aaae680", + "0xf869a020ccc237cb14f1e7206826bf271fec2ea755a65ca3b2495aa4019e7b27041a3db846f8440180a05832b9e4a453b204b469dd1ec9b5fd8b67ce307834666e308a75c910ddd13112a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf9019180a034ffe60b579b442213b6366bfd89b1d76e8b442cc63a97952fd14470d9f8ec10a057f4c819de65f12dbc823ff1e364336b1205343ed06f21be8acffd1d348ae5b4a094e9add05f6f77f77969ceeee958be6e5737b81f422a37c86b92b2abb585c049a0cdfdff4041d21be21156ba3609aa62a85c9ff5c9c2461ef505b145c57b9f8e968080a0e52288535ac7fc004a23c7c29a1f0b5f884c8db35bab85e1902d875ec52d965e80a0bc550b863978f40529e231caa7b4fdf0a3e036593a253b6524cf693bb8465c2ea02f1195e5e397029c345818a32ce91834ffba8046d5003293f18e7da0af22dc34a0b9b23b80cd6b0e8521908972c4cc9302f23e49e7d6bd22e1228f4ba2acce3a37a07ecab3b62549ff9a35e52f9e9ebf8e41dba602c8c2cbd5e058d15d292a4668c7a0d92fc769dc359b00522d05c45acb8e3f05bd2879139dbfe7d0dd788535db4408a016bec6e0789de961941afcea27ad81ac08daf198943b4fe6a557152c237951ada0ab9e001858297618a6854c4077a80dfb5be66336d5c617fa55aae70b7669b68d80", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594dfadf71fa473d6a7a7a9dcd1499c4315fc457bb8", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0be42ca4e8aae202a71db02f066370d66dd51a4355cb548d519cb4bb5e3117d6da0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe21aa034b255ffe46fabbd100c057b05288ed17ee1de7b08dcb47b4de4114275e0e1ff", + "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594d37594dde17dcb02e64023bd3cdddb9068bf6db9", + "0xf8689f3b677423fa337485555bdb61c485755844fb70afb79537ffef69215fad1c40b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0dad338cf3bd32b6e5589b15cb870e8f98a8840c62d70871434444bcfde919ddf", + "0xf7a020df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d48195941480082b3164ccd3bcbd1ecb52720f5850f0e45c", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", + "0xf8718080a07bc829cf8dd426393ba407faf48530e732143890787e850a8ebf259502709db98080808080a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080808080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d48195941480082b3164ccd3bcbd1ecb52720f5850f0e45c", + "0xf9015180a037b594ccfeb2dfe165f135c1db841f33e8ad15286c54c4bbf883a6ee971b2639a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da516180a09ef3d8f3b3ca2f186dd780afe62b9b2835aad76ab604a64a0d866a08837b7ac2a0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0b95fe26ce057456c6c450bc74968f0b02f04598b1040f221d6dcf47f1f975349a09e88921a65a4e0885b5184ed269383efaf0710947c872955061c59fc077a3adba0323f04280363401cfb81f7dff6d0b171b43c41aedb328cdb5aa7588bcf3de6af80a0575c28dab1df14c950ab8310c391de1579d6a1b035f4b0b71b54ebb33f71733f808080a08384cbc0e87a1d7e5364b015c99d5adb1339a6632aa7199d203197284c62af8e80", + "0xf85180808080808080808080a05016f95a216237ecc6a3b3a2c382c7d1e68e20c28cfb313eb06f83022b9eadfb8080a0238de5c37d08e53783150d3f58c44f048808a8df72321c17607e13245203bb98808080", + "0xf869a020cb6b4b7193493044bbb4e88ba2ada699e9da9a01c85b6096bebabe4ba4334ab846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba047747417a662b04fe37e06d9dce49d77cc67bdaa6e04a13ab0df5c54f745dca4", + "0xf8718080a012029a027a77ca1b6f037157f1f0cdafcdf85e7dc03c30ad04c6f2838714de9a80808080a02a0eb47c159b0ab16b7af59ff9988e1ec5f11329350d1b21af9d476e941db8788080a02a3a0fc1952479e950b7ef6015a3667c81b9de102761af6b0750b7149331e455808080808080", + "0xf871808080a048af3ed6a9da275abf32589b8ddbb06d9366eb19c313258b7707a6af30966474808080a0537d3711100d980c295a131318a5a81887f9d648200ea981a39017445b5e515f80808080808080a05d18f3260595ad15a866d33134bf1c49c20d01ff88ae54357883a267d044738780", + "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca", + "0xf8518080a0b01460450ca263e1ad65154e9d8c57d162d1af2ab4669c53115ebc5433cf8cb18080808080808080a0bee831d91e49e67814173afe867c769a38faa75dcea204a24f470c84c24333688080808080", + "0xf851808080808080a0b284313f3cde2222dedc5f9067b40fceb0bed50555bf18fbb7b9d48705febc2d80808080808080a09169a8a5030370a2bc5a6bcfc09fe5218c0524fd4671830314cdb59b7793d1128080", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a8295945fdd39bd675b5951be2e58741c1910573a5774f1" + ], + "codes": [ + "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf8481565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf846001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a", + "0x363d3d373d3d3d363d73d37594dde17dcb02e64023bd3cdddb9068bf6db95af43d82803e903d91602b57fd5bf3", + "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb95781565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb9576001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b7169063b2267a7b903490610c22907f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a" + ] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/1141071_validium_txs.json b/crates/integration/testdata/validium/1141071_validium_txs.json new file mode 100644 index 00000000..60da5d03 --- /dev/null +++ b/crates/integration/testdata/validium/1141071_validium_txs.json @@ -0,0 +1,40 @@ +[ + { + "blockHash": "0xaf67407fcb4eb1f96d23fc2d0bc57fa3d30722549a100ea4dc8a2d9cbbf29a8e", + "blockNumber": "0x11694f", + "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "gas": "0xf4240", + "gasPrice": "0x0", + "hash": "0xaab2455060453ec66576b7fd00c5a46478df0212e25359da81917c94f5713148", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000750455261c9a93af485a36b8455ba5d5afde8d525911978833bc7067e3bfb3b26c80eba92db684d6eeed87dc43202bab1325f8ae298560b9713061173ed1a2403160644e0e9d16d4e674185373c9b78ded3b0f038ea74949dc8f6d15dc07be68df988eef9dc6f7d25bb2d0729dcd1587f4667dd38343000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "transactionIndex": "0x0", + "value": "0x0", + "type": "0x7e", + "v": "0x0", + "r": "0x0", + "s": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "queueIndex": "0x4" + }, + { + "blockHash": "0xaf67407fcb4eb1f96d23fc2d0bc57fa3d30722549a100ea4dc8a2d9cbbf29a8e", + "blockNumber": "0x11694f", + "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "gas": "0xf4240", + "gasPrice": "0x0", + "hash": "0x77ccf0606623af506d9dc3061ce86c470ee4971075e5f80613125290d4b015e8", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504880bbe20c8ae95af78174380ff1ac0a8d9bf96591c629576d1df0ad742e2b13d890ec82f7dca3315c2e41b563e459907e1ae563e3bac02b766a083d851e941b859e8b4aba9cc8393007c42ed3dbe50c3f1f187238ea1fc2703bdbb9e69bc8b4426c65dd0d5a18f496b2cb667051dff7aac394c51000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "transactionIndex": "0x1", + "value": "0x0", + "type": "0x7e", + "v": "0x0", + "r": "0x0", + "s": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "queueIndex": "0x5" + } +] diff --git a/crates/integration/testdata/validium/dump-validium-block.sh b/crates/integration/testdata/validium/dump-validium-block.sh new file mode 100644 index 00000000..d85d9ceb --- /dev/null +++ b/crates/integration/testdata/validium/dump-validium-block.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +if [[ -z "$SBV_CLI" ]]; then + echo "Error: SBV_CLI is not set" >&2 + exit 1 +fi +echo Using sbv cli from $SBV_CLI + +RPC_URL=${RPC_URL:-"http://10.6.11.77:38545"} +echo "Using RPC URL: $RPC_URL" + +if [[ -z "$1" ]]; then + echo "Usage: $0 " >&2 + exit 1 +fi + +BLOCK_NUMBER=$1 +HEX_BLOCK_NUMBER=$(printf "0x%x" "$BLOCK_NUMBER") +echo "Dumping block number: $BLOCK_NUMBER ($HEX_BLOCK_NUMBER)" + +"$SBV_CLI" dump --rpc "$RPC_URL" --block "$BLOCK_NUMBER" + +cast rpc --rpc-url "$RPC_URL" scroll_getL1MessagesInBlock "$HEX_BLOCK_NUMBER" "synced" | jq > "${BLOCK_NUMBER}_validium_txs.json" From f141fd5bb238ba799b14a0df37e5fc0760be9b89 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Mon, 25 Aug 2025 15:47:25 +0800 Subject: [PATCH 37/84] cleanup --- crates/circuits/batch-circuit/src/circuit.rs | 7 +++--- crates/circuits/bundle-circuit/src/circuit.rs | 7 +++--- crates/circuits/chunk-circuit/Cargo.toml | 2 +- crates/circuits/chunk-circuit/src/circuit.rs | 11 +++++---- crates/integration/src/lib.rs | 6 +++-- crates/integration/src/testers/batch.rs | 3 ++- crates/integration/tests/chunk_circuit.rs | 2 +- crates/types/base/src/aggregation.rs | 24 ------------------- crates/types/chunk/src/execute.rs | 22 ----------------- scripts/build-and-run.sh | 2 +- 10 files changed, 24 insertions(+), 62 deletions(-) diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index 0acfae72..d5227257 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -37,7 +37,8 @@ impl Circuit for BatchCircuit { fn deserialize_witness(witness_bytes: &[u8]) -> Self::Witness { let config = bincode::config::standard(); let (witness, _): (Self::Witness, _) = - bincode::serde::decode_from_slice(witness_bytes, config).unwrap(); + bincode::serde::decode_from_slice(witness_bytes, config) + .expect("BatchCircuit: deserialisation of witness bytes failed"); witness } @@ -69,11 +70,11 @@ impl AggCircuit for BatchCircuit { } fn aggregated_public_inputs(witness: &Self::Witness) -> Vec { - let fork_name = (witness.fork_name).clone(); + let fork_name = witness.fork_name.clone(); witness .chunk_infos .iter() - .map(|archived| (archived.clone(), fork_name)) + .map(|chunk_info| (chunk_info.clone(), fork_name)) .collect() } diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index b8c4276a..1adc9481 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -30,7 +30,8 @@ impl Circuit for BundleCircuit { fn deserialize_witness(witness_bytes: &[u8]) -> Self::Witness { let config = bincode::config::standard(); let (witness, _): (Self::Witness, _) = - bincode::serde::decode_from_slice(witness_bytes, config).unwrap(); + bincode::serde::decode_from_slice(witness_bytes, config) + .expect("BundleCircuit: deserialization of witness bytes failed"); witness } @@ -62,11 +63,11 @@ impl AggCircuit for BundleCircuit { } fn aggregated_public_inputs(witness: &Self::Witness) -> Vec { - let fork_name = (witness.fork_name).clone(); + let fork_name = witness.fork_name.clone(); witness .batch_infos .iter() - .map(|archived| (archived.clone(), fork_name)) + .map(|batch_info| (batch_info.clone(), fork_name)) .collect() } diff --git a/crates/circuits/chunk-circuit/Cargo.toml b/crates/circuits/chunk-circuit/Cargo.toml index 407292c1..441411c5 100644 --- a/crates/circuits/chunk-circuit/Cargo.toml +++ b/crates/circuits/chunk-circuit/Cargo.toml @@ -6,7 +6,7 @@ repository.workspace = true version = "0.5.0" [dependencies] -bincode = { workspace = true, features = ["serde"] } +bincode = { workspace = true } scroll-zkvm-types-circuit = { workspace = true } scroll-zkvm-types-chunk = { workspace = true } sbv-precompile = { workspace = true } diff --git a/crates/circuits/chunk-circuit/src/circuit.rs b/crates/circuits/chunk-circuit/src/circuit.rs index d1416651..65d8c271 100644 --- a/crates/circuits/chunk-circuit/src/circuit.rs +++ b/crates/circuits/chunk-circuit/src/circuit.rs @@ -1,7 +1,9 @@ use openvm::init; -use scroll_zkvm_types_chunk::{ChunkWitness, execute}; +use scroll_zkvm_types_chunk::ChunkWitness; use scroll_zkvm_types_circuit::{ - Circuit, io::read_witnesses, public_inputs::chunk::VersionedChunkInfo, + Circuit, + io::read_witnesses, + public_inputs::chunk::{ChunkInfo, VersionedChunkInfo}, }; #[allow(unused_imports, clippy::single_component_path_imports)] @@ -30,13 +32,14 @@ impl Circuit for ChunkCircuit { fn deserialize_witness(witness_bytes: &[u8]) -> Self::Witness { let config = bincode::config::standard(); let (witness, _): (Self::Witness, _) = - bincode::serde::decode_from_slice(witness_bytes, config).unwrap(); + bincode::serde::decode_from_slice(witness_bytes, config) + .expect("ChunkCircuit: deserialisation of witness bytes failed"); witness } fn validate(witness: Self::Witness) -> Self::PublicInputs { let fork_name = witness.fork_name.clone(); - let chunk_info = execute(witness).expect("failed to execute chunk"); + let chunk_info = ChunkInfo::try_from(witness).expect("failed to execute chunk"); (chunk_info, fork_name) } } diff --git a/crates/integration/src/lib.rs b/crates/integration/src/lib.rs index 78cd6169..07e95769 100644 --- a/crates/integration/src/lib.rs +++ b/crates/integration/src/lib.rs @@ -9,6 +9,7 @@ use scroll_zkvm_types::{ proof::{EvmProof, ProofEnum, StarkProof}, public_inputs::ForkName, types_agg::ProgramCommitment, + utils::serialize_vk, }; use scroll_zkvm_verifier::verifier::UniversalVerifier; use std::{ @@ -102,7 +103,7 @@ pub trait ProverTester { type Witness: PartialProvingTask; /// Tester metadata type - type Metadata; //: for<'a> TryFrom<&'a ::Archived>; + type Metadata; /// Naming for tester const NAME: &str; @@ -406,7 +407,8 @@ pub fn load_program_commitments(program: &str) -> eyre::Result eyre::Result<()> { let (exec_result, total_gas_used) = exec_chunk(&prover, &wit)?; let cycle_per_gas = exec_result.total_cycle / total_gas_used; assert_ne!(cycle_per_gas, 0); - assert!(cycle_per_gas <= 40); + assert!(cycle_per_gas <= 35); Ok(()) } diff --git a/crates/types/base/src/aggregation.rs b/crates/types/base/src/aggregation.rs index 22189702..3229537f 100644 --- a/crates/types/base/src/aggregation.rs +++ b/crates/types/base/src/aggregation.rs @@ -35,30 +35,6 @@ pub struct ProgramCommitment { pub vm: [u32; 8], } -impl ProgramCommitment { - pub fn deserialize(commitment_bytes: &[u8]) -> Self { - // TODO: temporary skip deserialize if no vk is provided - if commitment_bytes.is_empty() { - return Default::default(); - } - - let archived_data = - rkyv::access::(commitment_bytes) - .unwrap(); - - Self { - exe: archived_data.exe.map(|u32_le| u32_le.to_native()), - vm: archived_data.vm.map(|u32_le| u32_le.to_native()), - } - } - - pub fn serialize(&self) -> Vec { - rkyv::to_bytes::(self) - .map(|v| v.to_vec()) - .unwrap() - } -} - impl From<&ArchivedProgramCommitment> for ProgramCommitment { fn from(archived: &ArchivedProgramCommitment) -> Self { Self { diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index 7d758af5..d6fe536b 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -97,25 +97,3 @@ fn block_to_context(block: &RecoveredBlock) -> BlockContextV2 { .expect("num l1 msgs u16"), } } - -/* -impl From<&RecoveredBlock> for BlockContextV2 { - fn from(block: &RecoveredBlock) -> BlockContextV2 { - BlockContextV2 { - timestamp: block.timestamp, - gas_limit: block.gas_limit, - base_fee: U256::from(block.base_fee_per_gas().expect("base_fee_expected")), - num_txs: u16::try_from(block.body().transactions.len()).expect("num txs u16"), - num_l1_msgs: u16::try_from( - block - .body() - .transactions - .iter() - .filter(|tx| tx.is_l1_message()) - .count(), - ) - .expect("num l1 msgs u16"), - } - } -} - */ diff --git a/scripts/build-and-run.sh b/scripts/build-and-run.sh index a6e95b80..73b1fe9a 100644 --- a/scripts/build-and-run.sh +++ b/scripts/build-and-run.sh @@ -1,3 +1,3 @@ set -euxo pipefail -make build-guest-local 2>&1 | tee build.log +make build-guest 2>&1 | tee build.log make test-e2e-bundle 2>&1 | tee e2e.log From 0b5e2d28aee6cbfa4e9a821dc9511ad30df224b8 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Mon, 25 Aug 2025 16:15:49 +0800 Subject: [PATCH 38/84] clean much old codes --- Cargo.lock | 552 ++++-------------- Cargo.toml | 3 - crates/build-guest/Cargo.toml | 12 - crates/circuits/batch-circuit/Cargo.toml | 11 - crates/circuits/batch-circuit/src/circuit.rs | 2 - crates/circuits/bundle-circuit/Cargo.toml | 3 - crates/circuits/bundle-circuit/src/circuit.rs | 2 - crates/circuits/chunk-circuit/Cargo.toml | 2 - crates/integration/Cargo.toml | 12 +- crates/integration/src/lib.rs | 8 +- crates/integration/src/utils/mod.rs | 18 +- crates/integration/tests/chunk_circuit.rs | 20 +- crates/prover/Cargo.toml | 17 +- crates/prover/src/setup.rs | 48 +- crates/prover/src/utils/mod.rs | 73 --- crates/types/Cargo.toml | 14 +- crates/types/base/Cargo.toml | 3 - crates/types/base/src/environ.rs | 61 -- crates/types/base/src/lib.rs | 1 - crates/types/batch/src/witness.rs | 2 +- crates/types/bundle/Cargo.toml | 4 - crates/types/bundle/src/witness.rs | 3 +- crates/types/chunk/Cargo.toml | 9 - crates/types/chunk/src/execute.rs | 2 +- crates/types/src/lib.rs | 2 +- crates/verifier/Cargo.toml | 11 +- crates/verifier/src/evm.rs | 3 +- 27 files changed, 159 insertions(+), 739 deletions(-) delete mode 100644 crates/types/base/src/environ.rs diff --git a/Cargo.lock b/Cargo.lock index 70c5eab5..24426050 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2272,7 +2272,7 @@ dependencies = [ "crossbeam", "ff 0.13.1", "group 0.13.0", - "halo2curves-axiom 0.7.0", + "halo2curves-axiom", "itertools 0.11.0", "maybe-rayon", "pairing 0.23.0", @@ -2361,40 +2361,13 @@ dependencies = [ "rand_core 0.6.4", "rayon", "serde", - "serde_arrays 0.1.0", + "serde_arrays", "sha2 0.10.9", "static_assertions", "subtle", "unroll", ] -[[package]] -name = "halo2curves-axiom" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75bb262279138550a603b35a73da944fcde987a321eb550c05276ce7b0a4e692" -dependencies = [ - "blake2b_simd", - "digest 0.10.7", - "ff 0.13.1", - "group 0.13.0", - "hex", - "lazy_static", - "maybe-rayon", - "num-bigint 0.4.6", - "num-traits", - "pairing 0.23.0", - "pasta_curves 0.5.1", - "paste", - "rand 0.8.5", - "rand_core 0.6.4", - "serde", - "serde_arrays 0.1.0", - "sha2 0.10.9", - "static_assertions", - "subtle", -] - [[package]] name = "halo2curves-axiom" version = "0.7.0" @@ -2416,7 +2389,7 @@ dependencies = [ "rand_core 0.6.4", "rayon", "serde", - "serde_arrays 0.1.0", + "serde_arrays", "sha2 0.10.9", "static_assertions", "subtle", @@ -2725,15 +2698,6 @@ dependencies = [ "either", ] -[[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" @@ -2844,20 +2808,6 @@ dependencies = [ "sha3-asm", ] -[[package]] -name = "kzg-rs" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9201effeea3fcc93b587904ae2df9ce97e433184b9d6d299e9ebc9830a546636" -dependencies = [ - "ff 0.13.1", - "hex", - "serde_arrays 0.2.0", - "sha2 0.10.9", - "sp1_bls12_381", - "spin", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -3435,7 +3385,7 @@ name = "openvm-algebra-guest" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "halo2curves-axiom 0.7.0", + "halo2curves-axiom", "num-bigint 0.4.6", "once_cell", "openvm-algebra-complex-macros 1.3.0", @@ -3451,7 +3401,7 @@ name = "openvm-algebra-guest" version = "1.4.0-rc.4" source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "halo2curves-axiom 0.7.0", + "halo2curves-axiom", "num-bigint 0.4.6", "once_cell", "openvm-algebra-complex-macros 1.4.0-rc.4", @@ -3588,7 +3538,7 @@ dependencies = [ "openvm-instructions", "openvm-poseidon2-air", "openvm-stark-backend", - "p3-baby-bear 0.1.0", + "p3-baby-bear", "rand 0.8.5", "rustc-hash 2.1.1", "serde", @@ -3704,7 +3654,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "group 0.13.0", - "halo2curves-axiom 0.7.0", + "halo2curves-axiom", "once_cell", "openvm 1.3.0", "openvm-algebra-guest 1.3.0", @@ -3723,7 +3673,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "group 0.13.0", - "halo2curves-axiom 0.7.0", + "halo2curves-axiom", "once_cell", "openvm 1.4.0-rc.4", "openvm-algebra-guest 1.4.0-rc.4", @@ -3961,10 +3911,10 @@ dependencies = [ "openvm-native-compiler-derive", "openvm-stark-backend", "openvm-stark-sdk", - "p3-dft 0.1.0", + "p3-dft", "p3-fri", "p3-merkle-tree", - "p3-symmetric 0.1.0", + "p3-symmetric", "rand 0.8.5", "serde", "serde_json", @@ -3980,7 +3930,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-instructions", "openvm-transpiler", - "p3-field 0.1.0", + "p3-field", ] [[package]] @@ -3989,7 +3939,7 @@ version = "1.4.0-rc.4" source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "group 0.13.0", - "halo2curves-axiom 0.7.0", + "halo2curves-axiom", "hex-literal", "itertools 0.14.0", "num-bigint 0.4.6", @@ -4016,7 +3966,7 @@ dependencies = [ "derive-new 0.6.0", "derive_more 1.0.0", "eyre", - "halo2curves-axiom 0.7.0", + "halo2curves-axiom", "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", @@ -4044,7 +3994,7 @@ name = "openvm-pairing-guest" version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ - "halo2curves-axiom 0.7.0", + "halo2curves-axiom", "hex-literal", "itertools 0.14.0", "lazy_static", @@ -4065,7 +4015,7 @@ name = "openvm-pairing-guest" version = "1.4.0-rc.4" source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ - "halo2curves-axiom 0.7.0", + "halo2curves-axiom", "hex-literal", "itertools 0.14.0", "lazy_static", @@ -4125,9 +4075,9 @@ dependencies = [ "openvm-stark-backend", "openvm-stark-sdk", "p3-monty-31", - "p3-poseidon2 0.1.0", + "p3-poseidon2", "p3-poseidon2-air", - "p3-symmetric 0.1.0", + "p3-symmetric", "rand 0.8.5", "zkhash", ] @@ -4181,7 +4131,7 @@ version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "p3-field 0.1.0", + "p3-field", "strum_macros 0.26.4", ] @@ -4191,7 +4141,7 @@ version = "1.4.0-rc.4" source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "p3-field 0.1.0", + "p3-field", "strum_macros 0.26.4", ] @@ -4352,11 +4302,11 @@ dependencies = [ "p3-air", "p3-challenger", "p3-commit", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", "p3-uni-stark", - "p3-util 0.1.0", + "p3-util", "rayon", "rustc-hash 2.1.1", "serde", @@ -4377,18 +4327,18 @@ dependencies = [ "metrics-tracing-context", "metrics-util", "openvm-stark-backend", - "p3-baby-bear 0.1.0", + "p3-baby-bear", "p3-blake3", "p3-bn254-fr", - "p3-dft 0.1.0", + "p3-dft", "p3-fri", "p3-goldilocks", "p3-keccak", "p3-koala-bear", "p3-merkle-tree", "p3-poseidon", - "p3-poseidon2 0.1.0", - "p3-symmetric 0.1.0", + "p3-poseidon2", + "p3-symmetric", "rand 0.8.5", "serde", "serde_json", @@ -4473,8 +4423,8 @@ name = "p3-air" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field 0.1.0", - "p3-matrix 0.1.0", + "p3-field", + "p3-matrix", ] [[package]] @@ -4482,26 +4432,11 @@ name = "p3-baby-bear" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field 0.1.0", - "p3-mds 0.1.0", + "p3-field", + "p3-mds", "p3-monty-31", - "p3-poseidon2 0.1.0", - "p3-symmetric 0.1.0", - "rand 0.8.5", - "serde", -] - -[[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 0.2.3-succinct", - "p3-mds 0.2.3-succinct", - "p3-poseidon2 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", + "p3-poseidon2", + "p3-symmetric", "rand 0.8.5", "serde", ] @@ -4512,8 +4447,8 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "blake3", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-symmetric", + "p3-util", ] [[package]] @@ -4524,9 +4459,9 @@ dependencies = [ "ff 0.13.1", "halo2curves", "num-bigint 0.4.6", - "p3-field 0.1.0", - "p3-poseidon2 0.1.0", - "p3-symmetric 0.1.0", + "p3-field", + "p3-poseidon2", + "p3-symmetric", "rand 0.8.5", "serde", ] @@ -4536,10 +4471,10 @@ name = "p3-challenger" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", "tracing", ] @@ -4550,10 +4485,10 @@ source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62c dependencies = [ "itertools 0.14.0", "p3-challenger", - "p3-dft 0.1.0", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-util 0.1.0", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-util", "serde", ] @@ -4563,23 +4498,10 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", - "tracing", -] - -[[package]] -name = "p3-dft" -version = "0.2.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46414daedd796f1eefcdc1811c0484e4bced5729486b6eaba9521c572c76761a" -dependencies = [ - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", "tracing", ] @@ -4593,27 +4515,13 @@ dependencies = [ "num-integer", "num-traits", "nums", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", + "p3-maybe-rayon", + "p3-util", "rand 0.8.5", "serde", "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 0.2.3-succinct", - "rand 0.8.5", - "serde", -] - [[package]] name = "p3-fri" version = "0.1.0" @@ -4622,12 +4530,12 @@ dependencies = [ "itertools 0.14.0", "p3-challenger", "p3-commit", - "p3-dft 0.1.0", - "p3-field 0.1.0", + "p3-dft", + "p3-field", "p3-interpolation", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", "rand 0.8.5", "serde", "tracing", @@ -4639,13 +4547,13 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "num-bigint 0.4.6", - "p3-dft 0.1.0", - "p3-field 0.1.0", - "p3-mds 0.1.0", + "p3-dft", + "p3-field", + "p3-mds", "p3-poseidon", - "p3-poseidon2 0.1.0", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-poseidon2", + "p3-symmetric", + "p3-util", "rand 0.8.5", "serde", ] @@ -4655,10 +4563,10 @@ name = "p3-interpolation" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", ] [[package]] @@ -4667,9 +4575,9 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-field 0.1.0", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-symmetric", + "p3-util", "tiny-keccak", ] @@ -4679,10 +4587,10 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "p3-air", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", "rand 0.8.5", "tracing", ] @@ -4692,11 +4600,11 @@ name = "p3-koala-bear" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field 0.1.0", - "p3-mds 0.1.0", + "p3-field", + "p3-mds", "p3-monty-31", - "p3-poseidon2 0.1.0", - "p3-symmetric 0.1.0", + "p3-poseidon2", + "p3-symmetric", "rand 0.8.5", "serde", ] @@ -4707,30 +4615,15 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-field 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-maybe-rayon", + "p3-util", "rand 0.8.5", "serde", "tracing", "transpose", ] -[[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 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-util 0.2.3-succinct", - "rand 0.8.5", - "serde", - "tracing", -] - [[package]] name = "p3-maybe-rayon" version = "0.1.0" @@ -4739,38 +4632,17 @@ dependencies = [ "rayon", ] -[[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.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-dft 0.1.0", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", - "rand 0.8.5", -] - -[[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 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", "rand 0.8.5", ] @@ -4781,11 +4653,11 @@ source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62c dependencies = [ "itertools 0.14.0", "p3-commit", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", "rand 0.8.5", "serde", "tracing", @@ -4798,14 +4670,14 @@ source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62c dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", - "p3-dft 0.1.0", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-mds 0.1.0", - "p3-poseidon2 0.1.0", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "p3-util", "rand 0.8.5", "serde", "tracing", @@ -4817,9 +4689,9 @@ name = "p3-poseidon" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field 0.1.0", - "p3-mds 0.1.0", - "p3-symmetric 0.1.0", + "p3-field", + "p3-mds", + "p3-symmetric", "rand 0.8.5", ] @@ -4829,24 +4701,10 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "gcd", - "p3-field 0.1.0", - "p3-mds 0.1.0", - "p3-symmetric 0.1.0", - "rand 0.8.5", -] - -[[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 0.2.3-succinct", - "p3-mds 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", + "p3-field", + "p3-mds", + "p3-symmetric", "rand 0.8.5", - "serde", ] [[package]] @@ -4855,11 +4713,11 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "p3-air", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-poseidon2 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-poseidon2", + "p3-util", "rand 0.8.5", "tikv-jemallocator", "tracing", @@ -4871,18 +4729,7 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-field 0.1.0", - "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 0.2.3-succinct", + "p3-field", "serde", ] @@ -4895,11 +4742,11 @@ dependencies = [ "p3-air", "p3-challenger", "p3-commit", - "p3-dft 0.1.0", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", "serde", "tracing", ] @@ -4912,15 +4759,6 @@ dependencies = [ "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.22.0" @@ -6215,27 +6053,6 @@ dependencies = [ "sha2 0.10.9", ] -[[package]] -name = "revm-precompile" -version = "21.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v74#774616019e9562b12cbe1c3f1cdd110793f8084c" -dependencies = [ - "ark-bls12-381", - "ark-bn254", - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "aurora-engine-modexp", - "cfg-if", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", - "kzg-rs", - "libsecp256k1", - "once_cell", - "revm-primitives 19.1.0", - "ripemd", - "sha2 0.10.9", -] - [[package]] name = "revm-precompile" version = "25.0.0" @@ -6273,15 +6090,6 @@ dependencies = [ "serde", ] -[[package]] -name = "revm-primitives" -version = "19.1.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v74#774616019e9562b12cbe1c3f1cdd110793f8084c" -dependencies = [ - "alloy-primitives", - "num_enum", -] - [[package]] name = "revm-primitives" version = "20.1.0" @@ -6713,57 +6521,36 @@ version = "0.5.0" dependencies = [ "alloy-primitives", "bincode 2.0.1", - "bitcode", - "c-kzg", - "halo2curves-axiom 0.7.0", - "itertools 0.14.0", "openvm 1.4.0-rc.4", - "openvm-algebra-complex-macros 1.4.0-rc.4", "openvm-algebra-guest 1.4.0-rc.4", "openvm-ecc-guest 1.4.0-rc.4", "openvm-keccak256-guest 1.4.0-rc.4", "openvm-pairing", - "openvm-pairing-guest 1.4.0-rc.4", - "openvm-rv32im-guest 1.4.0-rc.4", - "openvm-sha2", "openvm-sha256-guest 1.4.0-rc.4", - "rkyv", "scroll-zkvm-types-batch", "scroll-zkvm-types-circuit", - "serde", ] [[package]] name = "scroll-zkvm-build-guest" version = "0.5.0" dependencies = [ - "bitcode", "cargo_metadata 0.19.2", "dotenv", "eyre", - "halo2curves-axiom 0.5.3", "hex", - "hex-literal", "openvm-build", "openvm-circuit", "openvm-instructions", - "openvm-native-circuit", "openvm-native-compiler", "openvm-native-recursion", - "openvm-native-transpiler", - "openvm-rv32im-transpiler", "openvm-sdk", "openvm-stark-sdk", - "openvm-transpiler", - "p3-field 0.1.0", "scroll-zkvm-types", "serde", "serde_json", - "serde_with", "snark-verifier-sdk", "toml", - "tracing", - "tracing-subscriber 0.3.19", ] [[package]] @@ -6773,10 +6560,7 @@ dependencies = [ "alloy-primitives", "bincode 2.0.1", "openvm 1.4.0-rc.4", - "openvm-algebra-guest 1.4.0-rc.4", "openvm-keccak256-guest 1.4.0-rc.4", - "openvm-rv32im-guest 1.4.0-rc.4", - "rkyv", "scroll-zkvm-types-bundle", "scroll-zkvm-types-circuit", ] @@ -6797,7 +6581,6 @@ dependencies = [ "openvm-pairing-guest 1.4.0-rc.4", "openvm-rv32im-guest 1.4.0-rc.4", "p256 0.13.2 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "rkyv", "sbv-precompile", "scroll-zkvm-types-chunk", "scroll-zkvm-types-circuit", @@ -6813,20 +6596,13 @@ dependencies = [ "cargo_metadata 0.20.0", "chrono", "eyre", - "ff 0.13.1", "glob", - "halo2curves-axiom 0.7.0", "hex", "metrics-tracing-context", "once_cell", - "openvm-build", "openvm-circuit", - "openvm-native-circuit", - "openvm-native-compiler", "openvm-native-recursion", - "openvm-native-transpiler", "openvm-sdk", - "openvm-transpiler", "rayon", "regex", "revm 27.1.0", @@ -6837,7 +6613,6 @@ dependencies = [ "scroll-zkvm-verifier", "serde", "serde_json", - "sha2 0.10.9", "snark-verifier-sdk", "tracing", "tracing-subscriber 0.3.19", @@ -6848,35 +6623,21 @@ dependencies = [ name = "scroll-zkvm-prover" version = "0.5.0" dependencies = [ - "alloy-primitives", "base64", "bincode 1.3.3", - "c-kzg", "eyre", "git-version", - "hex", - "metrics", - "metrics-tracing-context", - "metrics-util", - "munge", - "once_cell", "openvm-circuit", - "openvm-continuations", "openvm-native-circuit", "openvm-native-recursion", "openvm-sdk", "openvm-stark-sdk", - "revm 27.1.0", "rkyv", - "sbv-primitives", "scroll-zkvm-types", - "scroll-zkvm-types-batch", - "scroll-zkvm-types-chunk", "scroll-zkvm-verifier", "serde", "serde_json", "serde_stacker", - "snark-verifier-sdk", "thiserror 2.0.15", "toml", "tracing", @@ -6886,14 +6647,13 @@ dependencies = [ name = "scroll-zkvm-types" version = "0.5.0" dependencies = [ + "alloy-primitives", "base64", "bincode 1.3.3", "c-kzg", - "openvm-continuations", "openvm-native-recursion", "openvm-sdk", "openvm-stark-sdk", - "rkyv", "sbv-primitives", "scroll-zkvm-types-base", "scroll-zkvm-types-batch", @@ -6909,12 +6669,10 @@ version = "0.5.0" dependencies = [ "alloy-primitives", "alloy-serde 1.0.24", - "itertools 0.14.0", "rkyv", "serde", "sha2 0.10.9", "sha3", - "tiny-keccak", ] [[package]] @@ -6924,7 +6682,7 @@ dependencies = [ "alloy-primitives", "bincode 2.0.1", "c-kzg", - "halo2curves-axiom 0.7.0", + "halo2curves-axiom", "itertools 0.14.0", "openvm 1.4.0-rc.4", "openvm-ecc-guest 1.4.0-rc.4", @@ -6942,13 +6700,9 @@ dependencies = [ name = "scroll-zkvm-types-bundle" version = "0.5.0" dependencies = [ - "alloy-primitives", - "bincode 2.0.1", - "itertools 0.14.0", "rkyv", "scroll-zkvm-types-base", "serde", - "vm-zstd", ] [[package]] @@ -6956,18 +6710,10 @@ name = "scroll-zkvm-types-chunk" version = "0.5.0" dependencies = [ "alloy-primitives", - "bincode 2.0.1", - "itertools 0.14.0", - "openvm 1.4.0-rc.4", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "openvm-rv32im-guest 1.4.0-rc.4", - "revm-precompile 21.0.0", "rkyv", "sbv-core", "sbv-helpers", - "sbv-kv", "sbv-primitives", - "sbv-trie", "scroll-zkvm-types-base", "serde", ] @@ -6991,19 +6737,12 @@ dependencies = [ name = "scroll-zkvm-verifier" version = "0.5.0" dependencies = [ - "base64", "bincode 1.3.3", "eyre", - "itertools 0.14.0", "once_cell", - "openvm-circuit", "openvm-continuations", - "openvm-native-circuit", "openvm-native-recursion", "openvm-sdk", - "openvm-stark-sdk", - "revm 27.1.0", - "scroll-zkvm-prover", "scroll-zkvm-types", "serde", "serde_json", @@ -7142,15 +6881,6 @@ dependencies = [ "serde", ] -[[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_derive" version = "1.0.219" @@ -7378,52 +7108,6 @@ dependencies = [ "snark-verifier", ] -[[package]] -name = "sp1-lib" -version = "5.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1fe81b6f87134f9170cb642f948ae41e0ee1cd3785e0cb665add5b67106d1a" -dependencies = [ - "bincode 1.3.3", - "serde", - "sp1-primitives", -] - -[[package]] -name = "sp1-primitives" -version = "5.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dddd8d022840c1c500e0d7f82e9b9cf080b7dabd469f06b394010e6a594f692b" -dependencies = [ - "bincode 1.3.3", - "blake3", - "cfg-if", - "hex", - "lazy_static", - "num-bigint 0.4.6", - "p3-baby-bear 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-poseidon2 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", - "serde", - "sha2 0.10.9", -] - -[[package]] -name = "sp1_bls12_381" -version = "0.8.0-sp1-5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac255e1704ebcdeec5e02f6a0ebc4d2e9e6b802161938330b6810c13a610c583" -dependencies = [ - "cfg-if", - "ff 0.13.1", - "group 0.13.0", - "pairing 0.23.0", - "rand_core 0.6.4", - "sp1-lib", - "subtle", -] - [[package]] name = "spin" version = "0.9.8" diff --git a/Cargo.toml b/Cargo.toml index 0c86b309..ea7ada51 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,7 +56,6 @@ openvm-transpiler = { git = "https://github.com/openvm-org/openvm.git", rev = "c # more openvm related libs openvm-stark-sdk = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.1.1" } -p3-field = { git = "https://github.com/Plonky3/Plonky3.git", rev = "539bbc84085efb609f4f62cb03cf49588388abdb" } sbv-core = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master", features = ["scroll", "rkyv"] } sbv-helpers = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } @@ -64,8 +63,6 @@ sbv-primitives = { git = "https://github.com/scroll-tech/stateless-block-verifie sbv-kv = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } sbv-trie = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } sbv-precompile = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "master" } -scroll-alloy-evm = { git = "https://github.com/scroll-tech/reth", rev = "74dd0bd368325b1286e4fe99c20e6ef0fdbaee51", default-features = false } - alloy-primitives = { version = "1.3", default-features = false, features = ["std", "map-hashbrown", "map-fxhash", "rkyv"] } alloy-serde = { version = "1.0.13", default-features = false } diff --git a/crates/build-guest/Cargo.toml b/crates/build-guest/Cargo.toml index 3fca0e21..69be8d47 100644 --- a/crates/build-guest/Cargo.toml +++ b/crates/build-guest/Cargo.toml @@ -9,27 +9,15 @@ scroll-zkvm-types.workspace = true openvm-instructions.workspace = true openvm-native-compiler.workspace = true openvm-native-recursion.workspace = true -openvm-rv32im-transpiler.workspace = true openvm-sdk.workspace = true openvm-stark-sdk.workspace = true openvm-build = { workspace = true, default-features = false } -openvm-transpiler = { workspace = true, default-features = false } -openvm-native-circuit = { workspace = true, default-features = false } -openvm-native-transpiler = { workspace = true, default-features = false } openvm-circuit = { workspace = true } -tracing.workspace = true -tracing-subscriber.workspace = true - -bitcode.workspace = true -halo2curves-axiom.workspace = true eyre.workspace = true -p3-field.workspace = true serde.workspace = true -hex-literal.workspace = true hex.workspace = true serde_json.workspace = true -serde_with.workspace = true snark-verifier-sdk.workspace = true toml.workspace = true diff --git a/crates/circuits/batch-circuit/Cargo.toml b/crates/circuits/batch-circuit/Cargo.toml index 3a8f7ac0..ed1c8868 100644 --- a/crates/circuits/batch-circuit/Cargo.toml +++ b/crates/circuits/batch-circuit/Cargo.toml @@ -14,23 +14,12 @@ openvm-algebra-guest.workspace = true openvm-pairing = { workspace = true, features = ["bls12_381"] } openvm-keccak256-guest.workspace = true openvm-sha256-guest.workspace = true -openvm-sha2.workspace = true openvm-ecc-guest = { workspace = true, features = ["halo2curves"] } -openvm-algebra-complex-macros = { workspace = true } -openvm-pairing-guest = { workspace = true, features = ["halo2curves"] } -openvm-rv32im-guest.workspace = true - -halo2curves-axiom = "0.7.0" alloy-primitives = { workspace = true, features = ["native-keccak"] } bincode.workspace = true -bitcode.workspace = true -itertools.workspace = true -rkyv.workspace = true -serde.workspace = true [features] default = [] [dev-dependencies] -c-kzg = "2.0" diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index d5227257..d1b055a8 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -3,7 +3,6 @@ use scroll_zkvm_types_batch::BatchWitness; use scroll_zkvm_types_circuit::{ AggCircuit, AggregationInput, Circuit, ProgramCommitment, io::read_witnesses, - manually_drop_on_zkvm, public_inputs::{ batch::{BatchInfo, VersionedBatchInfo}, chunk::VersionedChunkInfo, @@ -43,7 +42,6 @@ impl Circuit for BatchCircuit { } fn validate(witness: Self::Witness) -> Self::PublicInputs { - let witness = manually_drop_on_zkvm!(witness); let fork_name = witness.fork_name; (BatchInfo::from(&witness), fork_name) } diff --git a/crates/circuits/bundle-circuit/Cargo.toml b/crates/circuits/bundle-circuit/Cargo.toml index 7bdce203..786de15e 100644 --- a/crates/circuits/bundle-circuit/Cargo.toml +++ b/crates/circuits/bundle-circuit/Cargo.toml @@ -11,12 +11,9 @@ scroll-zkvm-types-circuit.workspace = true scroll-zkvm-types-bundle.workspace = true openvm = { workspace = true, features = ["std"] } -openvm-algebra-guest.workspace = true openvm-keccak256-guest.workspace = true -openvm-rv32im-guest.workspace = true alloy-primitives = { workspace = true } -rkyv.workspace = true [features] default = [] diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index 1adc9481..2a066727 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -3,7 +3,6 @@ use scroll_zkvm_types_bundle::BundleWitness; use scroll_zkvm_types_circuit::{ AggCircuit, AggregationInput, Circuit, ProgramCommitment, io::read_witnesses, - manually_drop_on_zkvm, public_inputs::{ batch::VersionedBatchInfo, bundle::{BundleInfo, VersionedBundleInfo}, @@ -36,7 +35,6 @@ impl Circuit for BundleCircuit { } fn validate(witness: Self::Witness) -> Self::PublicInputs { - let witness = manually_drop_on_zkvm!(witness); let fork_name = witness.fork_name; (BundleInfo::from(&witness), fork_name) } diff --git a/crates/circuits/chunk-circuit/Cargo.toml b/crates/circuits/chunk-circuit/Cargo.toml index 441411c5..cbf1dafc 100644 --- a/crates/circuits/chunk-circuit/Cargo.toml +++ b/crates/circuits/chunk-circuit/Cargo.toml @@ -11,8 +11,6 @@ scroll-zkvm-types-circuit = { workspace = true } scroll-zkvm-types-chunk = { workspace = true } sbv-precompile = { workspace = true } -rkyv.workspace = true - openvm = { workspace = true, features = ["std", "getrandom-unsupported"] } openvm-k256 = { workspace = true } openvm-p256 = { workspace = true } diff --git a/crates/integration/Cargo.toml b/crates/integration/Cargo.toml index 3af56d7d..11b42750 100644 --- a/crates/integration/Cargo.toml +++ b/crates/integration/Cargo.toml @@ -7,20 +7,15 @@ edition.workspace = true scroll-zkvm-types.workspace = true scroll-zkvm-prover.workspace = true scroll-zkvm-verifier.workspace = true + +rkyv.workspace = true sbv-primitives = { workspace = true } tracing.workspace = true -rkyv.workspace = true tracing-subscriber.workspace = true metrics-tracing-context.workspace = true - -openvm-build = { workspace = true, default-features = false } openvm-circuit.workspace = true openvm-sdk = { workspace = true, default-features = false } -openvm-native-circuit = { workspace = true, default-features = false } -openvm-native-compiler = { workspace = true, default-features = false } openvm-native-recursion = { workspace = true, default-features = false } -openvm-native-transpiler = { workspace = true, default-features = false } -openvm-transpiler = { workspace = true, default-features = false } alloy-primitives.workspace = true base64.workspace = true @@ -33,12 +28,10 @@ vm-zstd = { workspace = true, features = ["zstd"] } hex.workspace = true chrono = "0.4" -ff = "0.13" glob = "0.3" once_cell = "1.20" revm = { workspace = true } serde_json = "1.0" -sha2 = "0.10" snark-verifier-sdk = { workspace = true, default-features = false, features = [ "loader_halo2", "halo2-axiom", @@ -47,7 +40,6 @@ snark-verifier-sdk = { workspace = true, default-features = false, features = [ regex = "1.11.1" [dev-dependencies] -halo2curves-axiom = "0.7.0" glob = "0.3" [features] diff --git a/crates/integration/src/lib.rs b/crates/integration/src/lib.rs index 07e95769..25cf87a7 100644 --- a/crates/integration/src/lib.rs +++ b/crates/integration/src/lib.rs @@ -3,6 +3,7 @@ use once_cell::sync::OnceCell; use openvm_sdk::StdIn; use scroll_zkvm_prover::{ Prover, + setup::{read_app_config, read_app_exe}, utils::{read_json, vm::ExecutionResult, write_json}, }; use scroll_zkvm_types::{ @@ -263,10 +264,12 @@ fn setup_logger() -> eyre::Result<()> { /// Light weight testing to simply execute the vm program for test #[instrument("tester_execute", skip_all)] pub fn tester_execute( - prover: &Prover, witness: &T::Witness, proofs: &[ProofEnum], ) -> eyre::Result { + let (path_app_config, path_app_exe) = T::load()?; + let app_exe = read_app_exe(&path_app_exe)?; + let app_config = read_app_config(&path_app_config)?; let stdin = T::build_guest_input( witness, proofs @@ -274,7 +277,8 @@ pub fn tester_execute( .map(|p| p.as_stark_proof().expect("must be stark proof")), )?; - let ret = prover.execute_and_check_with_full_result(&stdin)?; + let ret = + scroll_zkvm_prover::utils::vm::execute_guest(app_config.app_vm_config, app_exe, &stdin)?; Ok(ret) } diff --git a/crates/integration/src/utils/mod.rs b/crates/integration/src/utils/mod.rs index 3fb83d7b..a26c4eb3 100644 --- a/crates/integration/src/utils/mod.rs +++ b/crates/integration/src/utils/mod.rs @@ -207,14 +207,14 @@ pub fn build_batch_witnesses( let blob_versioned_hash = point_eval::get_versioned_hash(&kzg_commitment); // primage = keccak(payload) + blob_versioned_hash - let chg_preimage = if testing_hardfork() >= ForkName::EuclidV2 { - let mut chg_preimage = keccak256(&blob_bytes).to_vec(); - chg_preimage.extend(blob_versioned_hash.0); - chg_preimage + let challenge_preimage = if testing_hardfork() >= ForkName::EuclidV2 { + let mut challenge_preimage = keccak256(&blob_bytes).to_vec(); + challenge_preimage.extend(blob_versioned_hash.0); + challenge_preimage } else { - let mut chg_preimage = Vec::from(keccak256(&meta_chunk_bytes).0); + let mut challenge_preimage = Vec::from(keccak256(&meta_chunk_bytes).0); let last_digest = chunk_digests.last().expect("at least we have one"); - chg_preimage.extend( + challenge_preimage.extend( chunk_digests .iter() .chain(std::iter::repeat(last_digest)) @@ -224,10 +224,10 @@ pub fn build_batch_witnesses( ret }), ); - chg_preimage.extend_from_slice(blob_versioned_hash.as_slice()); - chg_preimage + challenge_preimage.extend_from_slice(blob_versioned_hash.as_slice()); + challenge_preimage }; - let challenge_digest = keccak256(&chg_preimage); + let challenge_digest = keccak256(&challenge_preimage); let x = point_eval::get_x_from_challenge(challenge_digest); let (kzg_proof, z) = point_eval::get_kzg_proof(&kzg_blob, challenge_digest); diff --git a/crates/integration/tests/chunk_circuit.rs b/crates/integration/tests/chunk_circuit.rs index 794ec228..9a365063 100644 --- a/crates/integration/tests/chunk_circuit.rs +++ b/crates/integration/tests/chunk_circuit.rs @@ -7,10 +7,10 @@ use scroll_zkvm_integration::{ }, utils::metadata_from_chunk_witnesses, }; -use scroll_zkvm_prover::{Prover, utils::vm::ExecutionResult}; +use scroll_zkvm_prover::utils::vm::ExecutionResult; use scroll_zkvm_types::chunk::ChunkWitness; -fn exec_chunk(prover: &Prover, wit: &ChunkWitness) -> eyre::Result<(ExecutionResult, u64)> { +fn exec_chunk(wit: &ChunkWitness) -> eyre::Result<(ExecutionResult, u64)> { let blk = wit.blocks[0].header.number; println!( "task block num: {}, block[0] idx: {}", @@ -19,7 +19,7 @@ fn exec_chunk(prover: &Prover, wit: &ChunkWitness) -> eyre::Result<(ExecutionRes ); let stats = wit.stats(); println!("chunk stats {:#?}", stats); - let exec_result = tester_execute::(prover, wit, &[])?; + let exec_result = tester_execute::(wit, &[])?; let cycle_count = exec_result.total_cycle as u64; let cycle_per_gas = cycle_count / stats.total_gas_used; println!( @@ -36,7 +36,6 @@ fn test_cycle() -> eyre::Result<()> { ChunkProverTester::setup()?; // use rayon::prelude::*; - let prover = ChunkProverTester::load_prover(false)?; let blocks = 1u64..=8u64; for blk in blocks { @@ -45,7 +44,7 @@ fn test_cycle() -> eyre::Result<()> { ..Default::default() }; - let (exec_result, gas) = exec_chunk(&prover, &task.get_or_build_witness()?)?; + let (exec_result, gas) = exec_chunk(&task.get_or_build_witness()?)?; let cycle_per_gas = exec_result.total_cycle / gas; assert!(cycle_per_gas < 30); } @@ -56,10 +55,9 @@ fn test_cycle() -> eyre::Result<()> { #[test] fn test_execute() -> eyre::Result<()> { ChunkProverTester::setup()?; - let prover = ChunkProverTester::load_prover(false)?; let wit = get_witness_from_env_or_builder(&mut preset_chunk())?; - let (exec_result, total_gas_used) = exec_chunk(&prover, &wit)?; + let (exec_result, total_gas_used) = exec_chunk(&wit)?; let cycle_per_gas = exec_result.total_cycle / total_gas_used; assert_ne!(cycle_per_gas, 0); assert!(cycle_per_gas <= 35); @@ -140,16 +138,13 @@ fn test_execute_multi() -> eyre::Result<()> { .unwrap(); // Execute tasks in parallel let (total_gas, total_cycle) = pool.install(|| { - // comment by fan@scroll.io: why we need to load prover multiple times (which is time costing) - let prover = ChunkProverTester::load_prover(false).unwrap(); let init = (0u64, 0u64); let adder = |(gas1, cycle1): (u64, u64), (gas2, cycle2): (u64, u64)| (gas1 + gas2, cycle1 + cycle2); preset_chunk_multiple() .into_iter() .map(|mut task| -> (u64, u64) { - let (exec_result, gas) = - exec_chunk(&prover, &task.get_or_build_witness().unwrap()).unwrap(); + let (exec_result, gas) = exec_chunk(&task.get_or_build_witness().unwrap()).unwrap(); (gas, exec_result.total_cycle) }) .fold(init, adder) @@ -168,10 +163,9 @@ fn test_execute_multi() -> eyre::Result<()> { #[test] fn guest_profiling() -> eyre::Result<()> { ChunkProverTester::setup()?; - let prover = ChunkProverTester::load_prover(false)?; let wit = get_witness_from_env_or_builder(&mut preset_chunk())?; - let (exec_result, _) = exec_chunk(&prover, &wit)?; + let (exec_result, _) = exec_chunk(&wit)?; let total_cycles = exec_result.total_cycle; println!( diff --git a/crates/prover/Cargo.toml b/crates/prover/Cargo.toml index 8a65eede..4f4234dc 100644 --- a/crates/prover/Cargo.toml +++ b/crates/prover/Cargo.toml @@ -7,42 +7,27 @@ version.workspace = true [dependencies] scroll-zkvm-types.workspace = true -scroll-zkvm-types-chunk = { workspace = true, features = ["scroll-compress-ratio"] } scroll-zkvm-verifier.workspace = true -scroll-zkvm-types-batch.workspace = true -alloy-primitives = { workspace = true, features = ["tiny-keccak"] } rkyv.workspace = true bincode_v1.workspace = true -hex.workspace = true -sbv-primitives = { workspace = true } tracing.workspace = true -metrics.workspace = true -metrics-util.workspace = true -metrics-tracing-context.workspace = true -snark-verifier-sdk.workspace = true - openvm-circuit = { workspace = true } -openvm-continuations.workspace = true openvm-native-circuit = { workspace = true, default-features = false } openvm-native-recursion = { workspace = true } openvm-sdk = { workspace = true } openvm-stark-sdk = { workspace = true, default-features = false } base64 = "0.22" +eyre.workspace = true git-version = "0.3.5" -munge = "=0.4.1" -once_cell = "1.20" serde = "1.0" serde_json = "1.0" serde_stacker = "0.1" thiserror = "2.0" toml = "0.8" -revm = { workspace = true } -c-kzg = { workspace = true, features = ["serde"] } [dev-dependencies] -eyre = "0.6" [features] default = [] diff --git a/crates/prover/src/setup.rs b/crates/prover/src/setup.rs index 3283af14..5189e487 100644 --- a/crates/prover/src/setup.rs +++ b/crates/prover/src/setup.rs @@ -5,21 +5,14 @@ use openvm_circuit::arch::instructions::{ instruction::{DebugInfo, Instruction}, program::Program, }; -use openvm_native_recursion::halo2::utils::CacheHalo2ParamsReader; use openvm_sdk::{ - DefaultStaticVerifierPvHandler, Sdk, - commit::AppExecutionCommit, - config::{AggConfig, AppConfig, SdkVmConfig}, - fs::{read_app_pk_from_file, read_exe_from_file, read_from_file_bitcode}, - keygen::{AggProvingKey, AppProvingKey}, + F, + config::{AppConfig, SdkVmConfig}, + fs::{read_exe_from_file, read_from_file_bitcode}, }; -use openvm_stark_sdk::p3_baby_bear::BabyBear; use crate::Error; -/// Alias for convenience. -pub type F = BabyBear; - /// Wrapper around [`openvm_sdk::fs::read_exe_from_file`]. pub fn read_app_exe>(path: P) -> Result, Error> { if let Ok(exe) = read_exe_from_file(&path) { @@ -61,14 +54,6 @@ pub fn read_app_exe>(path: P) -> Result, Error> { Ok(exe) } -/// Wrapper around [`openvm_sdk::fs::read_app_pk_from_file`]. -pub fn read_app_pk>(path: P) -> Result, Error> { - read_app_pk_from_file(&path).map_err(|e| Error::Setup { - path: path.as_ref().into(), - src: e.to_string(), - }) -} - /// Read and deserialize [`openvm_sdk::config::AppConfig`] from the given path to the TOML config. pub fn read_app_config>(path: P) -> Result, Error> { let toml_str = read_to_string(&path).map_err(|e| Error::Setup { @@ -81,30 +66,3 @@ pub fn read_app_config>(path: P) -> Result src: e.to_string(), }) } - -/// Compute commitments to the app. -pub fn compute_commitments( - app_exe: VmExe, - app_pk: AppProvingKey, -) -> Result { - let committed_exe = Sdk::new() - .commit_app_exe(app_pk.app_fri_params(), app_exe) - .map_err(|e| Error::Commit(e.to_string()))?; - Ok(AppExecutionCommit::compute( - &app_pk.app_vm_pk.vm_config, - &committed_exe, - &app_pk.leaf_committed_exe, - )) -} - -/// Generate STARK aggregation [proving key][`openvm_sdk::keygen::AggProvingKey`]. -pub fn gen_agg_pk(params_dir: &str) -> Result { - let halo2_params_reader = CacheHalo2ParamsReader::new(params_dir); - Sdk::new() - .agg_keygen( - AggConfig::default(), - &halo2_params_reader, - &DefaultStaticVerifierPvHandler, - ) - .map_err(|e| Error::Keygen(e.to_string())) -} diff --git a/crates/prover/src/utils/mod.rs b/crates/prover/src/utils/mod.rs index bc0c135c..6a2289a3 100644 --- a/crates/prover/src/utils/mod.rs +++ b/crates/prover/src/utils/mod.rs @@ -107,76 +107,3 @@ pub mod as_base64 { bincode_v1::deserialize(&v_bytes).map_err(serde::de::Error::custom) } } - -pub mod point_eval { - use c_kzg; - use sbv_primitives::{B256 as H256, U256, types::eips::eip4844::BLS_MODULUS}; - - /// Given the blob-envelope, translate it to a fixed size EIP-4844 blob. - /// - /// For every 32-bytes chunk in the blob, the most-significant byte is set to 0 while the other - /// 31 bytes are copied from the provided blob-envelope. - pub fn to_blob(envelope_bytes: &[u8]) -> c_kzg::Blob { - let mut blob_bytes = [0u8; c_kzg::BYTES_PER_BLOB]; - - assert!( - envelope_bytes.len() - <= c_kzg::FIELD_ELEMENTS_PER_BLOB * (c_kzg::BYTES_PER_FIELD_ELEMENT - 1), - "too many bytes in blob envelope", - ); - - for (i, &byte) in envelope_bytes.iter().enumerate() { - blob_bytes[(i / 31) * 32 + 1 + (i % 31)] = byte; - } - - c_kzg::Blob::new(blob_bytes) - } - - /// Get the KZG commitment from an EIP-4844 blob. - pub fn blob_to_kzg_commitment(blob: &c_kzg::Blob) -> c_kzg::KzgCommitment { - let settings = c_kzg::ethereum_kzg_settings(0); - settings - .blob_to_kzg_commitment(blob) - .expect("blob to kzg commitment should succeed") - } - - /// Get the EIP-4844 versioned hash from the KZG commitment. - pub fn get_versioned_hash(commitment: &c_kzg::KzgCommitment) -> H256 { - H256::new( - revm::precompile::kzg_point_evaluation::kzg_to_versioned_hash(commitment.as_slice()), - ) - } - - /// Get x for kzg proof from challenge hash - pub fn get_x_from_challenge(challenge: H256) -> U256 { - U256::from_be_bytes(challenge.0) % BLS_MODULUS - } - - /// Generate KZG proof and evaluation given the blob (polynomial) and a random challenge. - pub fn get_kzg_proof(blob: &c_kzg::Blob, challenge: H256) -> (c_kzg::KzgProof, U256) { - let challenge = get_x_from_challenge(challenge); - let settings = c_kzg::ethereum_kzg_settings(0); - let (proof, y) = settings - .compute_kzg_proof(blob, &c_kzg::Bytes32::new(challenge.to_be_bytes())) - .expect("kzg proof should succeed"); - - (proof, U256::from_be_slice(y.as_slice())) - } -} - -use snark_verifier_sdk::snark_verifier::halo2_base::halo2_proofs::halo2curves::bn256::Fr; - -/// use the openvm's implement for compress 8xbabybear into bn254 -pub fn compress_commitment(commitment: &[u32; 8]) -> Fr { - use openvm_stark_sdk::{openvm_stark_backend::p3_field::PrimeField32, p3_baby_bear::BabyBear}; - let order = Fr::from(BabyBear::ORDER_U32 as u64); - let mut base = Fr::one(); - let mut ret = Fr::zero(); - - for v in commitment { - ret += Fr::from(*v as u64) * base; - base *= order; - } - - ret -} diff --git a/crates/types/Cargo.toml b/crates/types/Cargo.toml index 298f7970..a8abefbd 100644 --- a/crates/types/Cargo.toml +++ b/crates/types/Cargo.toml @@ -8,19 +8,19 @@ repository.workspace = true version.workspace = true [dependencies] -types-base = { path = "base", package = "scroll-zkvm-types-base"} -types-chunk = { path = "chunk", package = "scroll-zkvm-types-chunk"} -types-batch = { path = "batch", package = "scroll-zkvm-types-batch"} -types-bundle = { path = "bundle", package = "scroll-zkvm-types-bundle"} +types-base = { path = "base", package = "scroll-zkvm-types-base" } +types-chunk = { path = "chunk", package = "scroll-zkvm-types-chunk", features = ["scroll-compress-ratio"] } +types-batch = { path = "batch", package = "scroll-zkvm-types-batch" } +types-bundle = { path = "bundle", package = "scroll-zkvm-types-bundle" } openvm-sdk = { workspace = true } -openvm-continuations.workspace = true openvm-native-recursion.workspace = true openvm-stark-sdk = { workspace = true, default-features = false } + +alloy-primitives = { workspace = true, features = ["tiny-keccak"] } snark-verifier-sdk.workspace = true sbv-primitives.workspace = true serde.workspace = true -rkyv.workspace = true base64.workspace = true bincode_v1.workspace = true -c-kzg.workspace = true \ No newline at end of file +c-kzg.workspace = true diff --git a/crates/types/base/Cargo.toml b/crates/types/base/Cargo.toml index 93692cbf..9b3ee832 100644 --- a/crates/types/base/Cargo.toml +++ b/crates/types/base/Cargo.toml @@ -11,12 +11,9 @@ version.workspace = true alloy-primitives = { workspace = true } alloy-serde.workspace = true rkyv.workspace = true -#sbv-primitives = { workspace = true, features = ["scroll-consensus-types", "scroll-reth-types", "scroll-reth-primitives-types", "reth-primitives-types"] } serde.workspace = true -itertools.workspace = true sha3 = "0.10.8" sha2 = "0.10.8" -tiny-keccak.workspace = true [features] default = [] diff --git a/crates/types/base/src/environ.rs b/crates/types/base/src/environ.rs deleted file mode 100644 index c237fb18..00000000 --- a/crates/types/base/src/environ.rs +++ /dev/null @@ -1,61 +0,0 @@ -use rkyv::util::AlignedVec; -use std::{borrow::Cow, collections::BTreeMap}; - -#[cfg(target_os = "zkvm")] -static ENVIRON_STUB: std::sync::OnceLock<&'static ArchivedEnvironStub> = std::sync::OnceLock::new(); - -/// A list of environment variable keys that are allowed to be stored in the `EnvironStub`. -#[cfg(not(target_os = "zkvm"))] -static ENVIRON_KEY_ALLOW_LIST: &[&str] = &["SCROLL_CHUNK_STATE_COMMITMENT"]; - -/// A stub for the environ API. -#[derive( - Debug, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize, serde::Serialize, serde::Deserialize, -)] -#[rkyv(derive(Debug))] -pub struct EnvironStub(BTreeMap); - -impl EnvironStub { - /// Creates a new `EnvironStub` from the current environment variables. - #[cfg(not(target_os = "zkvm"))] - pub fn from_env() -> Result { - let map = std::env::vars() - .filter(|(k, _)| ENVIRON_KEY_ALLOW_LIST.contains(&k.as_str())) - .collect(); - let this = Self(map); - rkyv::to_bytes(&this) - } - - /// Sets up the `EnvironStub` with serialized environment variables. - #[cfg(target_os = "zkvm")] - pub fn setup(env: Vec) { - static INIT: std::sync::OnceLock> = std::sync::OnceLock::new(); - INIT.set(env).expect("EnvironStub already initialized"); - - let buffer = INIT.get().expect("EnvironStub not initialized"); - let archived = rkyv::access::(buffer) - .expect("Failed to access ArchivedEnvironStub"); - ENVIRON_STUB.set(archived).expect("EnvironStub already set"); - } - - /// Sets up the `EnvironStub` with serialized environment variables. - #[cfg(not(target_os = "zkvm"))] - pub fn setup(_env: Vec) { - // This function is a no-op in non-ZKVM environments. - // The environment variables are accessed directly using std::env::var. - // No setup is needed. - } - - /// Returns the value associated with the given key, if it exists. - #[cfg(target_os = "zkvm")] - pub fn get(key: &str) -> Option> { - let archived = ENVIRON_STUB.get().expect("EnvironStub not initialized"); - archived.0.get(key).map(|s| Cow::Borrowed(s.as_str())) - } - - /// Returns the value associated with the given key, if it exists. - #[cfg(not(target_os = "zkvm"))] - pub fn get(key: &str) -> Option> { - std::env::var(key).ok().map(Cow::Owned) - } -} diff --git a/crates/types/base/src/lib.rs b/crates/types/base/src/lib.rs index e7aa9682..23727b7d 100644 --- a/crates/types/base/src/lib.rs +++ b/crates/types/base/src/lib.rs @@ -1,5 +1,4 @@ pub mod aggregation; -pub mod environ; pub mod fork_name; pub mod public_inputs; pub mod utils; diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index 8b43b37e..f2d51e51 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -14,7 +14,7 @@ use crate::{ /// Simply rewrap byte48 to avoid unnecessary dep pub type Bytes48 = [u8; 48]; mod array48 { - use serde::{Deserialize, Deserializer, Serializer}; + use serde::{Deserializer, Serializer}; pub fn serialize(array: &[u8; 48], serializer: S) -> Result where diff --git a/crates/types/bundle/Cargo.toml b/crates/types/bundle/Cargo.toml index f176a274..0304e485 100644 --- a/crates/types/bundle/Cargo.toml +++ b/crates/types/bundle/Cargo.toml @@ -8,12 +8,8 @@ repository.workspace = true version.workspace = true [dependencies] -alloy-primitives = { workspace = true } -bincode = { workspace = true } rkyv.workspace = true serde.workspace = true -itertools.workspace = true -vm-zstd = { workspace = true } types-base = { path = "../base", package = "scroll-zkvm-types-base"} diff --git a/crates/types/bundle/src/witness.rs b/crates/types/bundle/src/witness.rs index 19b7648c..5c531a79 100644 --- a/crates/types/bundle/src/witness.rs +++ b/crates/types/bundle/src/witness.rs @@ -1,6 +1,5 @@ -use rkyv::util::AlignedVec; use types_base::{ - aggregation::{AggregationInput, ProgramCommitment, ProofCarryingWitness}, + aggregation::{AggregationInput, ProofCarryingWitness}, fork_name::ForkName, public_inputs::{batch::BatchInfo, bundle::BundleInfo}, }; diff --git a/crates/types/chunk/Cargo.toml b/crates/types/chunk/Cargo.toml index a84b1b18..5acc32b7 100644 --- a/crates/types/chunk/Cargo.toml +++ b/crates/types/chunk/Cargo.toml @@ -8,21 +8,12 @@ repository.workspace = true version.workspace = true [dependencies] -revm-precompile = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v74", default-features=false, features = ["kzg-rs", "libsecp256k1"] } alloy-primitives = { workspace = true, features = ["native-keccak"] } -bincode = { workspace = true } rkyv.workspace = true -sbv-trie = { workspace = true } sbv-helpers.workspace = true sbv-core = { workspace = true } sbv-primitives = { workspace = true, features = ["hardforks", "scroll-hardforks", "scroll-revm-types"] } -sbv-kv = { workspace = true } serde.workspace = true -itertools.workspace = true - -openvm = { workspace = true, features = ["std"] } -openvm-rv32im-guest = { workspace = true } -openvm-custom-insn = { workspace = true } types-base = { path = "../base", package = "scroll-zkvm-types-base"} diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index d6fe536b..6024a62a 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -75,7 +75,7 @@ pub fn execute(witness: ChunkWitness) -> Result { block_ctxs: blocks.iter().map(block_to_context).collect(), }; - println!("chunk_info = {:#?}", chunk_info); + // println!("chunk_info = {}", chunk_info); Ok(chunk_info) } diff --git a/crates/types/src/lib.rs b/crates/types/src/lib.rs index bdd8cc7a..9bb1023c 100644 --- a/crates/types/src/lib.rs +++ b/crates/types/src/lib.rs @@ -17,7 +17,7 @@ pub mod chunk { pub use types_chunk::*; } -pub use types_base::{aggregation as types_agg, environ, public_inputs}; +pub use types_base::{aggregation as types_agg, public_inputs}; pub mod proof; diff --git a/crates/verifier/Cargo.toml b/crates/verifier/Cargo.toml index d41d1071..58a030ea 100644 --- a/crates/verifier/Cargo.toml +++ b/crates/verifier/Cargo.toml @@ -7,25 +7,16 @@ version.workspace = true [dependencies] scroll-zkvm-types.workspace = true - -openvm-circuit.workspace = true -openvm-native-circuit.workspace = true openvm-native-recursion = { workspace = true, features = ["static-verifier"] } -openvm-sdk = { workspace = true, features = [] } +openvm-sdk.workspace = true openvm-continuations.workspace = true -openvm-stark-sdk.workspace = true - -itertools.workspace = true once_cell = "1.20" tracing.workspace = true snark-verifier-sdk = {workspace = true, default-features = false, features = ["loader_evm"]} bincode_v1.workspace = true eyre.workspace = true -revm = { workspace = true } serde.workspace = true serde_json.workspace = true [dev-dependencies] -scroll-zkvm-prover.workspace = true -base64.workspace = true diff --git a/crates/verifier/src/evm.rs b/crates/verifier/src/evm.rs index 908f7052..51839f3e 100644 --- a/crates/verifier/src/evm.rs +++ b/crates/verifier/src/evm.rs @@ -63,8 +63,7 @@ fn test_verify_evm_proof() -> eyre::Result<()> { )? .proof; - let evm_verifier: Vec = - scroll_zkvm_prover::utils::read(Path::new(PATH_TESTDATA).join("verifier.bin"))?; + let evm_verifier: Vec = std::fs::read(Path::new(PATH_TESTDATA).join("verifier.bin"))?; let gas_cost = verify_evm_proof(&evm_verifier, &evm_proof.into_evm_proof().unwrap().into()) .map_err(|e| eyre::eyre!("evm-proof verification failed: {e}"))?; From da3de4e659a3480e403072af8e5e1c75a3c394b8 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Mon, 25 Aug 2025 16:16:35 +0800 Subject: [PATCH 39/84] lint --- crates/circuits/batch-circuit/src/circuit.rs | 2 +- crates/circuits/bundle-circuit/src/circuit.rs | 2 +- crates/circuits/chunk-circuit/src/circuit.rs | 2 +- crates/integration/src/lib.rs | 2 +- crates/types/batch/src/witness.rs | 8 ++++---- crates/types/bundle/src/witness.rs | 14 +++++++------- crates/types/chunk/src/execute.rs | 4 ++-- crates/types/chunk/src/types.rs | 2 +- 8 files changed, 18 insertions(+), 18 deletions(-) diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index d1b055a8..818256de 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -68,7 +68,7 @@ impl AggCircuit for BatchCircuit { } fn aggregated_public_inputs(witness: &Self::Witness) -> Vec { - let fork_name = witness.fork_name.clone(); + let fork_name = witness.fork_name; witness .chunk_infos .iter() diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index 2a066727..9654f5ae 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -61,7 +61,7 @@ impl AggCircuit for BundleCircuit { } fn aggregated_public_inputs(witness: &Self::Witness) -> Vec { - let fork_name = witness.fork_name.clone(); + let fork_name = witness.fork_name; witness .batch_infos .iter() diff --git a/crates/circuits/chunk-circuit/src/circuit.rs b/crates/circuits/chunk-circuit/src/circuit.rs index 65d8c271..4fc7dd78 100644 --- a/crates/circuits/chunk-circuit/src/circuit.rs +++ b/crates/circuits/chunk-circuit/src/circuit.rs @@ -38,7 +38,7 @@ impl Circuit for ChunkCircuit { } fn validate(witness: Self::Witness) -> Self::PublicInputs { - let fork_name = witness.fork_name.clone(); + let fork_name = witness.fork_name; let chunk_info = ChunkInfo::try_from(witness).expect("failed to execute chunk"); (chunk_info, fork_name) } diff --git a/crates/integration/src/lib.rs b/crates/integration/src/lib.rs index 25cf87a7..b7ddb586 100644 --- a/crates/integration/src/lib.rs +++ b/crates/integration/src/lib.rs @@ -90,7 +90,7 @@ pub trait PartialProvingTask: serde::Serialize { "0.5.2" => self.legacy_rkyv_archive()?, _ => { let config = bincode::config::standard(); - bincode::serde::encode_to_vec(&self, config)? + bincode::serde::encode_to_vec(self, config)? } }; stdin.write_bytes(&bytes); diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index f2d51e51..3d89dab0 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -96,12 +96,12 @@ impl ProofCarryingWitness for BatchWitness { impl From<&BatchWitness> for BatchInfo { fn from(witness: &BatchWitness) -> Self { - let chunk_infos: Vec = witness.chunk_infos.iter().map(|ci| ci.clone()).collect(); + let chunk_infos: Vec = witness.chunk_infos.iter().cloned().collect(); match &witness.reference_header { ReferenceHeader::V6(header) => { let args = BuilderArgsV6 { - header: header.clone(), + header: *header, chunk_infos, blob_bytes: witness.blob_bytes.to_vec(), kzg_commitment: None, @@ -111,7 +111,7 @@ impl From<&BatchWitness> for BatchInfo { } ReferenceHeader::V7(header) => { let args = BuilderArgsV7 { - header: header.clone(), + header: *header, chunk_infos, blob_bytes: witness.blob_bytes.to_vec(), kzg_commitment: Some(witness.point_eval_witness.kzg_commitment), @@ -121,7 +121,7 @@ impl From<&BatchWitness> for BatchInfo { } ReferenceHeader::V8(header) => { let args = BuilderArgsV8 { - header: header.clone(), + header: *header, chunk_infos, blob_bytes: witness.blob_bytes.to_vec(), kzg_commitment: Some(witness.point_eval_witness.kzg_commitment), diff --git a/crates/types/bundle/src/witness.rs b/crates/types/bundle/src/witness.rs index 5c531a79..0d97f4e5 100644 --- a/crates/types/bundle/src/witness.rs +++ b/crates/types/bundle/src/witness.rs @@ -51,14 +51,14 @@ impl From<&BundleWitness> for BundleInfo { .expect("at least one batch in bundle"), ); - let chain_id = first_batch.chain_id.into(); + let chain_id = first_batch.chain_id; let num_batches = u32::try_from(witness.batch_infos.len()).expect("num_batches: u32"); - let prev_state_root = first_batch.parent_state_root.into(); - let prev_batch_hash = first_batch.parent_batch_hash.into(); - let post_state_root = last_batch.state_root.into(); - let batch_hash = last_batch.batch_hash.into(); - let withdraw_root = last_batch.withdraw_root.into(); - let msg_queue_hash = last_batch.post_msg_queue_hash.into(); + let prev_state_root = first_batch.parent_state_root; + let prev_batch_hash = first_batch.parent_batch_hash; + let post_state_root = last_batch.state_root; + let batch_hash = last_batch.batch_hash; + let withdraw_root = last_batch.withdraw_root; + let msg_queue_hash = last_batch.post_msg_queue_hash; BundleInfo { chain_id, diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index 6024a62a..2a37309c 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -56,7 +56,7 @@ pub fn execute(witness: ChunkWitness) -> Result { }; let post_msg_queue_hash = if witness.fork_name >= ForkName::EuclidV2 { - blocks.rolling_msg_queue_hash(witness.prev_msg_queue_hash.into()) + blocks.rolling_msg_queue_hash(witness.prev_msg_queue_hash) } else { B256::ZERO }; @@ -70,7 +70,7 @@ pub fn execute(witness: ChunkWitness) -> Result { tx_data_digest, tx_data_length: tx_data_length as u64, initial_block_number: blocks[0].header().number, - prev_msg_queue_hash: witness.prev_msg_queue_hash.into(), + prev_msg_queue_hash: witness.prev_msg_queue_hash, post_msg_queue_hash, block_ctxs: blocks.iter().map(block_to_context).collect(), }; diff --git a/crates/types/chunk/src/types.rs b/crates/types/chunk/src/types.rs index 5568a828..5719f04e 100644 --- a/crates/types/chunk/src/types.rs +++ b/crates/types/chunk/src/types.rs @@ -150,7 +150,7 @@ impl BlockChunkExt for RecoveredBlock { buffer[..size_of::()].copy_from_slice(rolling_hash.as_ref()); buffer[size_of::()..].copy_from_slice(tx.tx_hash().as_ref()); - rolling_hash = keccak256(&buffer); + rolling_hash = keccak256(buffer); // clear last 32 bits, i.e. 4 bytes. // https://github.com/scroll-tech/da-codec/blob/26dc8d575244560611548fada6a3a2745c60fe83/encoding/da.go#L817-L825 // see also https://github.com/scroll-tech/da-codec/pull/42 From 0d16a61ff686e6f0e3040bb8604d5f3b9a9de825 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Mon, 25 Aug 2025 16:21:09 +0800 Subject: [PATCH 40/84] clippy --- Cargo.lock | 53 ++++--------------- .../batch/src/blob_consistency/openvm.rs | 5 +- crates/types/batch/src/witness.rs | 2 +- openvm-clippy.sh | 2 +- 4 files changed, 14 insertions(+), 48 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 24426050..7ac81134 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -84,7 +84,7 @@ dependencies = [ "c-kzg", "derive_more 2.0.1", "either", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "k256", "once_cell", "rand 0.8.5", "secp256k1 0.30.0", @@ -139,7 +139,7 @@ checksum = "9d4769c6ffddca380b0070d71c8b7f30bed375543fe76bb2f74ec0acf4b7cd16" dependencies = [ "alloy-primitives", "alloy-rlp", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "k256", "serde", "serde_with", "thiserror 2.0.15", @@ -272,7 +272,7 @@ dependencies = [ "hashbrown 0.15.5", "indexmap 2.10.0", "itoa", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "k256", "keccak-asm", "paste", "proptest", @@ -2756,20 +2756,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "k256" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" -dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "serdect", - "sha2 0.10.9", -] - [[package]] name = "k256" version = "0.13.4" @@ -4388,18 +4374,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[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 0.10.9", -] - [[package]] name = "p256" version = "0.13.2" @@ -4984,15 +4958,6 @@ dependencies = [ "syn 2.0.106", ] -[[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.12.2" @@ -6043,10 +6008,10 @@ dependencies = [ "blst", "c-kzg", "cfg-if", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "k256", "libsecp256k1", "once_cell", - "p256 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", + "p256", "revm-primitives 18.0.0", "ripemd", "secp256k1 0.30.0", @@ -6068,10 +6033,10 @@ dependencies = [ "blst", "c-kzg", "cfg-if", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "k256", "libsecp256k1", "once_cell", - "p256 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", + "p256", "revm-primitives 20.1.0", "ripemd", "rug", @@ -6570,7 +6535,7 @@ name = "scroll-zkvm-chunk-circuit" version = "0.5.0" dependencies = [ "bincode 2.0.1", - "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "k256", "openvm 1.4.0-rc.4", "openvm-algebra-complex-macros 1.4.0-rc.4", "openvm-algebra-guest 1.4.0-rc.4", @@ -6580,7 +6545,7 @@ dependencies = [ "openvm-pairing", "openvm-pairing-guest 1.4.0-rc.4", "openvm-rv32im-guest 1.4.0-rc.4", - "p256 0.13.2 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "p256", "sbv-precompile", "scroll-zkvm-types-chunk", "scroll-zkvm-types-circuit", diff --git a/crates/types/batch/src/blob_consistency/openvm.rs b/crates/types/batch/src/blob_consistency/openvm.rs index 096c7941..92d370ac 100644 --- a/crates/types/batch/src/blob_consistency/openvm.rs +++ b/crates/types/batch/src/blob_consistency/openvm.rs @@ -101,8 +101,9 @@ pub fn verify_kzg_proof(z: Scalar, y: Scalar, commitment: G1Affine, proof: G1Aff .expect("kzg proof not G1 identity"); let p_minus_y = G1Affine::from_xy_nonidentity(commitment.x().clone(), commitment.y().clone()) .expect("kzg commitment not G1 identity") - - msm(&[y], &[G1Affine::GENERATOR.clone()]); - let x_minus_z = msm(&[z], &[G2_GENERATOR.clone()]) - KZG_G2_SETUP.clone(); + - msm(&[y], std::slice::from_ref(&G1Affine::GENERATOR)); + let g2_generator: &G2Affine = &G2_GENERATOR; + let x_minus_z = msm(&[z], std::slice::from_ref(g2_generator)) - KZG_G2_SETUP.clone(); let p0_proof = AffinePoint::new(proof_q.x().clone(), proof_q.y().clone()); let q0 = AffinePoint::new(p_minus_y.x().clone(), p_minus_y.y().clone()); diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index 3d89dab0..76f83b64 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -96,7 +96,7 @@ impl ProofCarryingWitness for BatchWitness { impl From<&BatchWitness> for BatchInfo { fn from(witness: &BatchWitness) -> Self { - let chunk_infos: Vec = witness.chunk_infos.iter().cloned().collect(); + let chunk_infos: Vec = witness.chunk_infos.to_vec(); match &witness.reference_header { ReferenceHeader::V6(header) => { diff --git a/openvm-clippy.sh b/openvm-clippy.sh index e8b2ffa5..1fe0984e 100755 --- a/openvm-clippy.sh +++ b/openvm-clippy.sh @@ -3,7 +3,7 @@ # Alas, the openvm CLI does not offer `clippy` as a subcommand, # so we have to use `cargo` directly. The options are copy-and-pasted from # `openvm`'s `build` command. -clippycmd="cargo +nightly-2025-02-14 clippy \ +clippycmd="cargo +nightly-2025-08-18 clippy \ --target riscv32im-risc0-zkvm-elf \ -Z build-std=alloc,core,proc_macro,panic_abort,std \ -Z build-std-features=compiler-builtins-mem \ From bb643033dc76176081ecf861e94905e4b3f18040 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Mon, 25 Aug 2025 16:22:13 +0800 Subject: [PATCH 41/84] update sbv --- Cargo.lock | 67 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7ac81134..2e22625f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -84,7 +84,7 @@ dependencies = [ "c-kzg", "derive_more 2.0.1", "either", - "k256", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "once_cell", "rand 0.8.5", "secp256k1 0.30.0", @@ -139,7 +139,7 @@ checksum = "9d4769c6ffddca380b0070d71c8b7f30bed375543fe76bb2f74ec0acf4b7cd16" dependencies = [ "alloy-primitives", "alloy-rlp", - "k256", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde", "serde_with", "thiserror 2.0.15", @@ -272,7 +272,7 @@ dependencies = [ "hashbrown 0.15.5", "indexmap 2.10.0", "itoa", - "k256", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "keccak-asm", "paste", "proptest", @@ -1887,7 +1887,7 @@ dependencies = [ [[package]] name = "encoder-standard" version = "0.1.0" -source = "git+https://github.com/scroll-tech/da-codec#2cfec8c99547b68dc64e2b020fa2b83cfb9c0e99" +source = "git+https://github.com/scroll-tech/da-codec#cddc263e5ef69917b925bbdba3be36503612d044" dependencies = [ "zstd", ] @@ -2756,6 +2756,20 @@ dependencies = [ "subtle", ] +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "serdect", + "sha2 0.10.9", +] + [[package]] name = "k256" version = "0.13.4" @@ -4374,6 +4388,18 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[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 0.10.9", +] + [[package]] name = "p256" version = "0.13.2" @@ -4958,6 +4984,15 @@ dependencies = [ "syn 2.0.106", ] +[[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.12.2" @@ -6008,10 +6043,10 @@ dependencies = [ "blst", "c-kzg", "cfg-if", - "k256", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "libsecp256k1", "once_cell", - "p256", + "p256 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", "revm-primitives 18.0.0", "ripemd", "secp256k1 0.30.0", @@ -6033,10 +6068,10 @@ dependencies = [ "blst", "c-kzg", "cfg-if", - "k256", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", "libsecp256k1", "once_cell", - "p256", + "p256 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", "revm-primitives 20.1.0", "ripemd", "rug", @@ -6299,7 +6334,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "sbv-core" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#482b62d1350445ae86f19d7e5d79a598c7a49135" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#b01386033edf72289d86d0cce17717c248441e5e" dependencies = [ "cfg-if", "itertools 0.14.0", @@ -6316,7 +6351,7 @@ dependencies = [ [[package]] name = "sbv-helpers" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#482b62d1350445ae86f19d7e5d79a598c7a49135" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#b01386033edf72289d86d0cce17717c248441e5e" dependencies = [ "tracing", ] @@ -6324,7 +6359,7 @@ dependencies = [ [[package]] name = "sbv-kv" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#482b62d1350445ae86f19d7e5d79a598c7a49135" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#b01386033edf72289d86d0cce17717c248441e5e" dependencies = [ "auto_impl", "hashbrown 0.15.5", @@ -6334,7 +6369,7 @@ dependencies = [ [[package]] name = "sbv-precompile" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#482b62d1350445ae86f19d7e5d79a598c7a49135" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#b01386033edf72289d86d0cce17717c248441e5e" dependencies = [ "openvm-ecc-guest 1.4.0-rc.4", "openvm-pairing", @@ -6345,7 +6380,7 @@ dependencies = [ [[package]] name = "sbv-primitives" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#482b62d1350445ae86f19d7e5d79a598c7a49135" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#b01386033edf72289d86d0cce17717c248441e5e" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -6382,7 +6417,7 @@ dependencies = [ [[package]] name = "sbv-trie" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#482b62d1350445ae86f19d7e5d79a598c7a49135" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#b01386033edf72289d86d0cce17717c248441e5e" dependencies = [ "alloy-rlp", "alloy-trie", @@ -6535,7 +6570,7 @@ name = "scroll-zkvm-chunk-circuit" version = "0.5.0" dependencies = [ "bincode 2.0.1", - "k256", + "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", "openvm 1.4.0-rc.4", "openvm-algebra-complex-macros 1.4.0-rc.4", "openvm-algebra-guest 1.4.0-rc.4", @@ -6545,7 +6580,7 @@ dependencies = [ "openvm-pairing", "openvm-pairing-guest 1.4.0-rc.4", "openvm-rv32im-guest 1.4.0-rc.4", - "p256", + "p256 0.13.2 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", "sbv-precompile", "scroll-zkvm-types-chunk", "scroll-zkvm-types-circuit", From 4a6edbc06f7aa1688142fc63480d8524fdca475b Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Mon, 25 Aug 2025 16:23:22 +0800 Subject: [PATCH 42/84] 0.6.0 --- Cargo.toml | 2 +- crates/circuits/batch-circuit/Cargo.toml | 2 +- crates/circuits/bundle-circuit/Cargo.toml | 2 +- crates/circuits/chunk-circuit/Cargo.toml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ea7ada51..efd9f5c5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ edition = "2021" homepage = "https://github.com/scroll-tech/zkvm-prover" readme = "README.md" repository = "https://github.com/scroll-tech/zkvm-prover" -version = "0.5.0" +version = "0.6.0" [workspace.dependencies] # openvm guest libs diff --git a/crates/circuits/batch-circuit/Cargo.toml b/crates/circuits/batch-circuit/Cargo.toml index ed1c8868..caa6475e 100644 --- a/crates/circuits/batch-circuit/Cargo.toml +++ b/crates/circuits/batch-circuit/Cargo.toml @@ -3,7 +3,7 @@ name = "scroll-zkvm-batch-circuit" edition.workspace = true readme.workspace = true repository.workspace = true -version = "0.5.0" +version = "0.6.0" [dependencies] scroll-zkvm-types-circuit.workspace = true diff --git a/crates/circuits/bundle-circuit/Cargo.toml b/crates/circuits/bundle-circuit/Cargo.toml index 786de15e..106533f7 100644 --- a/crates/circuits/bundle-circuit/Cargo.toml +++ b/crates/circuits/bundle-circuit/Cargo.toml @@ -3,7 +3,7 @@ name = "scroll-zkvm-bundle-circuit" edition.workspace = true readme.workspace = true repository.workspace = true -version = "0.5.0" +version = "0.6.0" [dependencies] bincode.workspace = true diff --git a/crates/circuits/chunk-circuit/Cargo.toml b/crates/circuits/chunk-circuit/Cargo.toml index cbf1dafc..c43ef31a 100644 --- a/crates/circuits/chunk-circuit/Cargo.toml +++ b/crates/circuits/chunk-circuit/Cargo.toml @@ -3,7 +3,7 @@ name = "scroll-zkvm-chunk-circuit" edition.workspace = true readme.workspace = true repository.workspace = true -version = "0.5.0" +version = "0.6.0" [dependencies] bincode = { workspace = true } From b5ac88019d5147606b711ab2c8a7f1f766f17a79 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Mon, 25 Aug 2025 08:30:10 +0000 Subject: [PATCH 43/84] docker ignore --- .dockerignore | 3 ++- Cargo.lock | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/.dockerignore b/.dockerignore index cb844014..fa702ca3 100644 --- a/.dockerignore +++ b/.dockerignore @@ -18,8 +18,9 @@ releases *.sh !build-guest-actions-entrypoint.sh +*.log *.md openvm-clippy -target \ No newline at end of file +target diff --git a/Cargo.lock b/Cargo.lock index 2e22625f..cd1753e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6517,7 +6517,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-batch-circuit" -version = "0.5.0" +version = "0.6.0" dependencies = [ "alloy-primitives", "bincode 2.0.1", @@ -6533,7 +6533,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-build-guest" -version = "0.5.0" +version = "0.6.0" dependencies = [ "cargo_metadata 0.19.2", "dotenv", @@ -6555,7 +6555,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-bundle-circuit" -version = "0.5.0" +version = "0.6.0" dependencies = [ "alloy-primitives", "bincode 2.0.1", @@ -6567,7 +6567,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-chunk-circuit" -version = "0.5.0" +version = "0.6.0" dependencies = [ "bincode 2.0.1", "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", @@ -6588,7 +6588,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-integration" -version = "0.5.0" +version = "0.6.0" dependencies = [ "alloy-primitives", "base64", @@ -6621,7 +6621,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-prover" -version = "0.5.0" +version = "0.6.0" dependencies = [ "base64", "bincode 1.3.3", @@ -6645,7 +6645,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-types" -version = "0.5.0" +version = "0.6.0" dependencies = [ "alloy-primitives", "base64", @@ -6665,7 +6665,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-types-base" -version = "0.5.0" +version = "0.6.0" dependencies = [ "alloy-primitives", "alloy-serde 1.0.24", @@ -6677,7 +6677,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-types-batch" -version = "0.5.0" +version = "0.6.0" dependencies = [ "alloy-primitives", "bincode 2.0.1", @@ -6698,7 +6698,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-types-bundle" -version = "0.5.0" +version = "0.6.0" dependencies = [ "rkyv", "scroll-zkvm-types-base", @@ -6707,7 +6707,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-types-chunk" -version = "0.5.0" +version = "0.6.0" dependencies = [ "alloy-primitives", "rkyv", @@ -6720,7 +6720,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-types-circuit" -version = "0.5.0" +version = "0.6.0" dependencies = [ "alloy-primitives", "getrandom 0.2.16", @@ -6735,7 +6735,7 @@ dependencies = [ [[package]] name = "scroll-zkvm-verifier" -version = "0.5.0" +version = "0.6.0" dependencies = [ "bincode 1.3.3", "eyre", From ed6bf2d084ef8e99df4c47ab4ab0b53ff33ba717 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Mon, 25 Aug 2025 08:38:59 +0000 Subject: [PATCH 44/84] build --- build-guest.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-guest.sh b/build-guest.sh index 03a2b2b1..2c6a6f26 100755 --- a/build-guest.sh +++ b/build-guest.sh @@ -31,7 +31,7 @@ trap cleanup EXIT docker run --cidfile ./build-guest.cid --platform linux/amd64\ -e BUILD_STAGES=${BUILD_STAGES}\ build-guest:local\ - cargo run --release -p scroll-zkvm-build-guest + make build-guest-local container_id=$(cat ./build-guest.cid) if [ -n "$(echo ${BUILD_STAGES} | grep stage1)" ]; then From f41a99d4ef35feeab864f9119c5481232867b1db Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Mon, 25 Aug 2025 08:46:36 +0000 Subject: [PATCH 45/84] add exe_commit.rs --- crates/circuits/batch-circuit/batch_exe_commit.rs | 2 +- crates/circuits/bundle-circuit/bundle_exe_commit.rs | 2 +- crates/circuits/chunk-circuit/chunk_exe_commit.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/circuits/batch-circuit/batch_exe_commit.rs b/crates/circuits/batch-circuit/batch_exe_commit.rs index 81af9c3d..265c2e5c 100644 --- a/crates/circuits/batch-circuit/batch_exe_commit.rs +++ b/crates/circuits/batch-circuit/batch_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [929447834, 820187407, 1209145919, 270864530, 1042645838, 1882891518, 1322197458, 1528101909]; +pub const COMMIT: [u32; 8] = [1977200712, 164000656, 1913155134, 1077030025, 605628646, 1253556162, 226927146, 637945472]; diff --git a/crates/circuits/bundle-circuit/bundle_exe_commit.rs b/crates/circuits/bundle-circuit/bundle_exe_commit.rs index 3dc8f72c..edf67e16 100644 --- a/crates/circuits/bundle-circuit/bundle_exe_commit.rs +++ b/crates/circuits/bundle-circuit/bundle_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [656901663, 1847532670, 51169052, 1776352742, 669705513, 1444764618, 1562590178, 774429438]; +pub const COMMIT: [u32; 8] = [1734773866, 471206981, 1116518272, 39106946, 1768537985, 1996057545, 820597863, 537872345]; diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index af7e9bef..62df05ad 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1071419318, 13542696, 228098146, 1154682103, 1049712254, 1415629403, 1604860768, 985830407]; +pub const COMMIT: [u32; 8] = [1954389790, 1028875012, 1445798022, 1249823514, 895192610, 683282762, 201633599, 421015397]; From edbb297962f8ea22eb578390661870ca560d061d Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Wed, 27 Aug 2025 07:56:09 +0800 Subject: [PATCH 46/84] update --- Cargo.lock | 436 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 329 insertions(+), 107 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 82f16eb3..9107d07b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2447,7 +2447,7 @@ dependencies = [ "rand_core 0.6.4", "rayon", "serde", - "serde_arrays", + "serde_arrays 0.1.0", "sha2 0.10.9", "static_assertions", "subtle", @@ -2475,7 +2475,7 @@ dependencies = [ "rand_core 0.6.4", "rayon", "serde", - "serde_arrays", + "serde_arrays 0.1.0", "sha2 0.10.9", "static_assertions", "subtle", @@ -2811,6 +2811,15 @@ dependencies = [ "either", ] +[[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" @@ -2922,6 +2931,20 @@ dependencies = [ "sha3-asm", ] +[[package]] +name = "kzg-rs" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9201effeea3fcc93b587904ae2df9ce97e433184b9d6d299e9ebc9830a546636" +dependencies = [ + "ff 0.13.1", + "hex", + "serde_arrays 0.2.0", + "sha2 0.10.9", + "sp1_bls12_381", + "spin", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -3652,7 +3675,7 @@ dependencies = [ "openvm-instructions", "openvm-poseidon2-air", "openvm-stark-backend", - "p3-baby-bear", + "p3-baby-bear 0.1.0", "rand 0.8.5", "rustc-hash 2.1.1", "serde", @@ -4025,10 +4048,10 @@ dependencies = [ "openvm-native-compiler-derive", "openvm-stark-backend", "openvm-stark-sdk", - "p3-dft", + "p3-dft 0.1.0", "p3-fri", "p3-merkle-tree", - "p3-symmetric", + "p3-symmetric 0.1.0", "rand 0.8.5", "serde", "serde_json", @@ -4044,7 +4067,7 @@ source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd9 dependencies = [ "openvm-instructions", "openvm-transpiler", - "p3-field", + "p3-field 0.1.0", ] [[package]] @@ -4189,9 +4212,9 @@ dependencies = [ "openvm-stark-backend", "openvm-stark-sdk", "p3-monty-31", - "p3-poseidon2", + "p3-poseidon2 0.1.0", "p3-poseidon2-air", - "p3-symmetric", + "p3-symmetric 0.1.0", "rand 0.8.5", "zkhash", ] @@ -4245,7 +4268,7 @@ version = "1.3.0" source = "git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c#c033e184cdb04a5bfdbd95ca5651c44f5a355c0c" dependencies = [ "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=c033e184cdb04a5bfdbd95ca5651c44f5a355c0c)", - "p3-field", + "p3-field 0.1.0", "strum_macros 0.26.4", ] @@ -4255,7 +4278,7 @@ version = "1.4.0-rc.4" source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "p3-field", + "p3-field 0.1.0", "strum_macros 0.26.4", ] @@ -4416,11 +4439,11 @@ dependencies = [ "p3-air", "p3-challenger", "p3-commit", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", + "p3-field 0.1.0", + "p3-matrix 0.1.0", + "p3-maybe-rayon 0.1.0", "p3-uni-stark", - "p3-util", + "p3-util 0.1.0", "rayon", "rustc-hash 2.1.1", "serde", @@ -4441,18 +4464,18 @@ dependencies = [ "metrics-tracing-context", "metrics-util", "openvm-stark-backend", - "p3-baby-bear", + "p3-baby-bear 0.1.0", "p3-blake3", "p3-bn254-fr", - "p3-dft", + "p3-dft 0.1.0", "p3-fri", "p3-goldilocks", "p3-keccak", "p3-koala-bear", "p3-merkle-tree", "p3-poseidon", - "p3-poseidon2", - "p3-symmetric", + "p3-poseidon2 0.1.0", + "p3-symmetric 0.1.0", "rand 0.8.5", "serde", "serde_json", @@ -4537,8 +4560,8 @@ name = "p3-air" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field", - "p3-matrix", + "p3-field 0.1.0", + "p3-matrix 0.1.0", ] [[package]] @@ -4546,11 +4569,26 @@ name = "p3-baby-bear" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field", - "p3-mds", + "p3-field 0.1.0", + "p3-mds 0.1.0", "p3-monty-31", - "p3-poseidon2", - "p3-symmetric", + "p3-poseidon2 0.1.0", + "p3-symmetric 0.1.0", + "rand 0.8.5", + "serde", +] + +[[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 0.2.3-succinct", + "p3-mds 0.2.3-succinct", + "p3-poseidon2 0.2.3-succinct", + "p3-symmetric 0.2.3-succinct", "rand 0.8.5", "serde", ] @@ -4561,8 +4599,8 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "blake3", - "p3-symmetric", - "p3-util", + "p3-symmetric 0.1.0", + "p3-util 0.1.0", ] [[package]] @@ -4573,9 +4611,9 @@ dependencies = [ "ff 0.13.1", "halo2curves", "num-bigint 0.4.6", - "p3-field", - "p3-poseidon2", - "p3-symmetric", + "p3-field 0.1.0", + "p3-poseidon2 0.1.0", + "p3-symmetric 0.1.0", "rand 0.8.5", "serde", ] @@ -4585,10 +4623,10 @@ name = "p3-challenger" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field", - "p3-maybe-rayon", - "p3-symmetric", - "p3-util", + "p3-field 0.1.0", + "p3-maybe-rayon 0.1.0", + "p3-symmetric 0.1.0", + "p3-util 0.1.0", "tracing", ] @@ -4599,10 +4637,10 @@ source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62c dependencies = [ "itertools 0.14.0", "p3-challenger", - "p3-dft", - "p3-field", - "p3-matrix", - "p3-util", + "p3-dft 0.1.0", + "p3-field 0.1.0", + "p3-matrix 0.1.0", + "p3-util 0.1.0", "serde", ] @@ -4612,10 +4650,23 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", + "p3-field 0.1.0", + "p3-matrix 0.1.0", + "p3-maybe-rayon 0.1.0", + "p3-util 0.1.0", + "tracing", +] + +[[package]] +name = "p3-dft" +version = "0.2.3-succinct" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46414daedd796f1eefcdc1811c0484e4bced5729486b6eaba9521c572c76761a" +dependencies = [ + "p3-field 0.2.3-succinct", + "p3-matrix 0.2.3-succinct", + "p3-maybe-rayon 0.2.3-succinct", + "p3-util 0.2.3-succinct", "tracing", ] @@ -4629,13 +4680,27 @@ dependencies = [ "num-integer", "num-traits", "nums", - "p3-maybe-rayon", - "p3-util", + "p3-maybe-rayon 0.1.0", + "p3-util 0.1.0", "rand 0.8.5", "serde", "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 0.2.3-succinct", + "rand 0.8.5", + "serde", +] + [[package]] name = "p3-fri" version = "0.1.0" @@ -4644,12 +4709,12 @@ dependencies = [ "itertools 0.14.0", "p3-challenger", "p3-commit", - "p3-dft", - "p3-field", + "p3-dft 0.1.0", + "p3-field 0.1.0", "p3-interpolation", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", + "p3-matrix 0.1.0", + "p3-maybe-rayon 0.1.0", + "p3-util 0.1.0", "rand 0.8.5", "serde", "tracing", @@ -4661,13 +4726,13 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "num-bigint 0.4.6", - "p3-dft", - "p3-field", - "p3-mds", + "p3-dft 0.1.0", + "p3-field 0.1.0", + "p3-mds 0.1.0", "p3-poseidon", - "p3-poseidon2", - "p3-symmetric", - "p3-util", + "p3-poseidon2 0.1.0", + "p3-symmetric 0.1.0", + "p3-util 0.1.0", "rand 0.8.5", "serde", ] @@ -4677,10 +4742,10 @@ name = "p3-interpolation" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", + "p3-field 0.1.0", + "p3-matrix 0.1.0", + "p3-maybe-rayon 0.1.0", + "p3-util 0.1.0", ] [[package]] @@ -4689,9 +4754,9 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-field", - "p3-symmetric", - "p3-util", + "p3-field 0.1.0", + "p3-symmetric 0.1.0", + "p3-util 0.1.0", "tiny-keccak", ] @@ -4701,10 +4766,10 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "p3-air", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", + "p3-field 0.1.0", + "p3-matrix 0.1.0", + "p3-maybe-rayon 0.1.0", + "p3-util 0.1.0", "rand 0.8.5", "tracing", ] @@ -4714,11 +4779,11 @@ name = "p3-koala-bear" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field", - "p3-mds", + "p3-field 0.1.0", + "p3-mds 0.1.0", "p3-monty-31", - "p3-poseidon2", - "p3-symmetric", + "p3-poseidon2 0.1.0", + "p3-symmetric 0.1.0", "rand 0.8.5", "serde", ] @@ -4729,15 +4794,30 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-field", - "p3-maybe-rayon", - "p3-util", + "p3-field 0.1.0", + "p3-maybe-rayon 0.1.0", + "p3-util 0.1.0", "rand 0.8.5", "serde", "tracing", "transpose", ] +[[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 0.2.3-succinct", + "p3-maybe-rayon 0.2.3-succinct", + "p3-util 0.2.3-succinct", + "rand 0.8.5", + "serde", + "tracing", +] + [[package]] name = "p3-maybe-rayon" version = "0.1.0" @@ -4746,17 +4826,38 @@ dependencies = [ "rayon", ] +[[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.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-dft", - "p3-field", - "p3-matrix", - "p3-symmetric", - "p3-util", + "p3-dft 0.1.0", + "p3-field 0.1.0", + "p3-matrix 0.1.0", + "p3-symmetric 0.1.0", + "p3-util 0.1.0", + "rand 0.8.5", +] + +[[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 0.2.3-succinct", + "p3-field 0.2.3-succinct", + "p3-matrix 0.2.3-succinct", + "p3-symmetric 0.2.3-succinct", + "p3-util 0.2.3-succinct", "rand 0.8.5", ] @@ -4767,11 +4868,11 @@ source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62c dependencies = [ "itertools 0.14.0", "p3-commit", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-symmetric", - "p3-util", + "p3-field 0.1.0", + "p3-matrix 0.1.0", + "p3-maybe-rayon 0.1.0", + "p3-symmetric 0.1.0", + "p3-util 0.1.0", "rand 0.8.5", "serde", "tracing", @@ -4784,14 +4885,14 @@ source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62c dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", - "p3-dft", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-mds", - "p3-poseidon2", - "p3-symmetric", - "p3-util", + "p3-dft 0.1.0", + "p3-field 0.1.0", + "p3-matrix 0.1.0", + "p3-maybe-rayon 0.1.0", + "p3-mds 0.1.0", + "p3-poseidon2 0.1.0", + "p3-symmetric 0.1.0", + "p3-util 0.1.0", "rand 0.8.5", "serde", "tracing", @@ -4803,9 +4904,9 @@ name = "p3-poseidon" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field", - "p3-mds", - "p3-symmetric", + "p3-field 0.1.0", + "p3-mds 0.1.0", + "p3-symmetric 0.1.0", "rand 0.8.5", ] @@ -4815,23 +4916,37 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "gcd", - "p3-field", - "p3-mds", - "p3-symmetric", + "p3-field 0.1.0", + "p3-mds 0.1.0", + "p3-symmetric 0.1.0", "rand 0.8.5", ] +[[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 0.2.3-succinct", + "p3-mds 0.2.3-succinct", + "p3-symmetric 0.2.3-succinct", + "rand 0.8.5", + "serde", +] + [[package]] name = "p3-poseidon2-air" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "p3-air", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-poseidon2", - "p3-util", + "p3-field 0.1.0", + "p3-matrix 0.1.0", + "p3-maybe-rayon 0.1.0", + "p3-poseidon2 0.1.0", + "p3-util 0.1.0", "rand 0.8.5", "tikv-jemallocator", "tracing", @@ -4843,7 +4958,18 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-field", + "p3-field 0.1.0", + "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 0.2.3-succinct", "serde", ] @@ -4856,11 +4982,11 @@ dependencies = [ "p3-air", "p3-challenger", "p3-commit", - "p3-dft", - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", + "p3-dft 0.1.0", + "p3-field 0.1.0", + "p3-matrix 0.1.0", + "p3-maybe-rayon 0.1.0", + "p3-util 0.1.0", "serde", "tracing", ] @@ -4873,6 +4999,15 @@ dependencies = [ "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.22.0" @@ -6178,6 +6313,27 @@ dependencies = [ "sha2 0.10.9", ] +[[package]] +name = "revm-precompile" +version = "21.0.0" +source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v74#774616019e9562b12cbe1c3f1cdd110793f8084c" +dependencies = [ + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "aurora-engine-modexp", + "cfg-if", + "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "kzg-rs", + "libsecp256k1", + "once_cell", + "revm-primitives 19.1.0", + "ripemd", + "sha2 0.10.9", +] + [[package]] name = "revm-precompile" version = "25.0.0" @@ -6215,6 +6371,15 @@ dependencies = [ "serde", ] +[[package]] +name = "revm-primitives" +version = "19.1.0" +source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v74#774616019e9562b12cbe1c3f1cdd110793f8084c" +dependencies = [ + "alloy-primitives", + "num_enum", +] + [[package]] name = "revm-primitives" version = "20.1.0" @@ -6839,6 +7004,8 @@ dependencies = [ "alloy-primitives", "alloy-sol-types", "ecies", + "itertools 0.14.0", + "revm-precompile 21.0.0", "rkyv", "sbv-core", "sbv-helpers", @@ -7011,6 +7178,15 @@ dependencies = [ "serde", ] +[[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_derive" version = "1.0.219" @@ -7238,6 +7414,52 @@ dependencies = [ "snark-verifier", ] +[[package]] +name = "sp1-lib" +version = "5.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1fe81b6f87134f9170cb642f948ae41e0ee1cd3785e0cb665add5b67106d1a" +dependencies = [ + "bincode 1.3.3", + "serde", + "sp1-primitives", +] + +[[package]] +name = "sp1-primitives" +version = "5.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dddd8d022840c1c500e0d7f82e9b9cf080b7dabd469f06b394010e6a594f692b" +dependencies = [ + "bincode 1.3.3", + "blake3", + "cfg-if", + "hex", + "lazy_static", + "num-bigint 0.4.6", + "p3-baby-bear 0.2.3-succinct", + "p3-field 0.2.3-succinct", + "p3-poseidon2 0.2.3-succinct", + "p3-symmetric 0.2.3-succinct", + "serde", + "sha2 0.10.9", +] + +[[package]] +name = "sp1_bls12_381" +version = "0.8.0-sp1-5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac255e1704ebcdeec5e02f6a0ebc4d2e9e6b802161938330b6810c13a610c583" +dependencies = [ + "cfg-if", + "ff 0.13.1", + "group 0.13.0", + "pairing 0.23.0", + "rand_core 0.6.4", + "sp1-lib", + "subtle", +] + [[package]] name = "spin" version = "0.9.8" From df6c966ee583202022bdb4d001a08ab356437d05 Mon Sep 17 00:00:00 2001 From: Rohit Narurkar Date: Wed, 3 Sep 2025 10:15:17 +0100 Subject: [PATCH 47/84] validium batch-bundle (#175) * preliminary work * chore: clippy fix * update versioned public inputs * fix: compilation for crate/integration * fix: further changes to support integration tests * fix: dir name for validium * test: with euclid-v2 for older testdata * commitment * fix: update due to upstream --------- Co-authored-by: Zhuo Zhang --- Makefile | 3 + .../batch-circuit/batch_exe_commit.rs | 2 +- crates/circuits/batch-circuit/src/circuit.rs | 12 +- .../bundle-circuit/bundle_exe_commit.rs | 2 +- crates/circuits/bundle-circuit/src/circuit.rs | 12 +- .../chunk-circuit/chunk_exe_commit.rs | 2 +- crates/circuits/chunk-circuit/src/circuit.rs | 11 +- crates/integration/src/lib.rs | 11 +- crates/integration/src/testers/batch.rs | 55 ++++- crates/integration/src/testers/bundle.rs | 13 +- crates/integration/src/testers/chunk.rs | 106 ++++++--- crates/integration/src/utils/mod.rs | 166 +++++++++++++- .../testdata/validium/witnesses/1141071.json | 102 +++++++++ .../witnesses/1141071_validium_txs.json | 40 ++++ crates/integration/tests/batch_circuit.rs | 26 ++- crates/integration/tests/bundle_circuit.rs | 53 ++++- crates/integration/tests/chunk_circuit.rs | 14 +- crates/types/base/src/lib.rs | 5 + crates/types/base/src/public_inputs.rs | 15 +- crates/types/base/src/public_inputs/batch.rs | 36 ++- crates/types/base/src/public_inputs/bundle.rs | 35 ++- crates/types/base/src/public_inputs/chunk.rs | 79 ++++++- crates/types/base/src/version.rs | 175 +++++++++++++++ crates/types/batch/src/builder/mod.rs | 2 + crates/types/batch/src/builder/validium.rs | 52 +++++ crates/types/batch/src/header/mod.rs | 9 + crates/types/batch/src/header/validium.rs | 146 ++++++++++++ crates/types/batch/src/lib.rs | 1 + crates/types/batch/src/payload/mod.rs | 6 +- crates/types/batch/src/payload/v7.rs | 10 +- crates/types/batch/src/payload/validium.rs | 209 ++++++++++++++++++ crates/types/batch/src/witness.rs | 32 ++- crates/types/bundle/src/witness.rs | 3 + crates/types/chunk/src/execute.rs | 2 + crates/types/chunk/src/types.rs | 2 +- crates/types/chunk/src/types/validium.rs | 2 +- crates/types/chunk/src/witness.rs | 14 +- 37 files changed, 1344 insertions(+), 121 deletions(-) create mode 100644 crates/integration/testdata/validium/witnesses/1141071.json create mode 100644 crates/integration/testdata/validium/witnesses/1141071_validium_txs.json create mode 100644 crates/types/base/src/version.rs create mode 100644 crates/types/batch/src/builder/validium.rs create mode 100644 crates/types/batch/src/header/validium.rs create mode 100644 crates/types/batch/src/payload/validium.rs diff --git a/Makefile b/Makefile index 525f7bd2..8fc56ac0 100644 --- a/Makefile +++ b/Makefile @@ -69,6 +69,9 @@ test-execute-batch-fast: test-execute-bundle: @cargo test $(CARGO_CONFIG_FLAG) --release -p scroll-zkvm-integration --test bundle_circuit test_execute -- --exact --nocapture +test-execute-validium-e2e: + @cargo test --release -p scroll-zkvm-integration --test bundle_circuit test_execute_validium -- --exact --nocapture + test-single-chunk: @cargo test $(CARGO_CONFIG_FLAG) --release -p scroll-zkvm-integration --test chunk_circuit setup_prove_verify_single -- --exact --nocapture diff --git a/crates/circuits/batch-circuit/batch_exe_commit.rs b/crates/circuits/batch-circuit/batch_exe_commit.rs index 265c2e5c..8fc44852 100644 --- a/crates/circuits/batch-circuit/batch_exe_commit.rs +++ b/crates/circuits/batch-circuit/batch_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1977200712, 164000656, 1913155134, 1077030025, 605628646, 1253556162, 226927146, 637945472]; +pub const COMMIT: [u32; 8] = [1035786594, 1303498991, 980566745, 555563793, 1189696157, 1358373261, 1652120310, 573029938]; diff --git a/crates/circuits/batch-circuit/src/circuit.rs b/crates/circuits/batch-circuit/src/circuit.rs index 01210d39..66f65baa 100644 --- a/crates/circuits/batch-circuit/src/circuit.rs +++ b/crates/circuits/batch-circuit/src/circuit.rs @@ -4,6 +4,7 @@ use scroll_zkvm_types_circuit::{ AggCircuit, AggregationInput, Circuit, ProgramCommitment, io::read_witnesses, public_inputs::{ + Version, batch::{BatchInfo, VersionedBatchInfo}, chunk::VersionedChunkInfo, }, @@ -42,8 +43,10 @@ impl Circuit for BatchCircuit { } fn validate(witness: Self::Witness) -> Self::PublicInputs { - let fork_name = witness.fork_name; - (BatchInfo::from(&witness), fork_name) + let version = Version::from(witness.version); + assert_eq!(version.fork, witness.fork_name); + + (BatchInfo::from(&witness), version) } } @@ -68,11 +71,12 @@ impl AggCircuit for BatchCircuit { } fn aggregated_public_inputs(witness: &Self::Witness) -> Vec { - let fork_name = witness.fork_name; + let version = Version::from(witness.version); witness .chunk_infos .iter() - .map(|chunk_info| (chunk_info.clone(), fork_name)) + .cloned() + .map(|chunk_info| (chunk_info, version)) .collect() } diff --git a/crates/circuits/bundle-circuit/bundle_exe_commit.rs b/crates/circuits/bundle-circuit/bundle_exe_commit.rs index edf67e16..7d64c403 100644 --- a/crates/circuits/bundle-circuit/bundle_exe_commit.rs +++ b/crates/circuits/bundle-circuit/bundle_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1734773866, 471206981, 1116518272, 39106946, 1768537985, 1996057545, 820597863, 537872345]; +pub const COMMIT: [u32; 8] = [1405004965, 893408229, 845512488, 631859947, 1666417312, 975133313, 610996457, 1270337891]; diff --git a/crates/circuits/bundle-circuit/src/circuit.rs b/crates/circuits/bundle-circuit/src/circuit.rs index 1c14fb46..fb78e641 100644 --- a/crates/circuits/bundle-circuit/src/circuit.rs +++ b/crates/circuits/bundle-circuit/src/circuit.rs @@ -4,6 +4,7 @@ use scroll_zkvm_types_circuit::{ AggCircuit, AggregationInput, Circuit, ProgramCommitment, io::read_witnesses, public_inputs::{ + Version, batch::VersionedBatchInfo, bundle::{BundleInfo, VersionedBundleInfo}, }, @@ -35,8 +36,10 @@ impl Circuit for BundleCircuit { } fn validate(witness: Self::Witness) -> Self::PublicInputs { - let fork_name = witness.fork_name; - (BundleInfo::from(&witness), fork_name) + let version = Version::from(witness.version); + assert_eq!(version.fork, witness.fork_name); + + (BundleInfo::from(&witness), version) } } @@ -61,11 +64,12 @@ impl AggCircuit for BundleCircuit { } fn aggregated_public_inputs(witness: &Self::Witness) -> Vec { - let fork_name = witness.fork_name; + let version = Version::from(witness.version); witness .batch_infos .iter() - .map(|batch_info| (batch_info.clone(), fork_name)) + .cloned() + .map(|batch_info| (batch_info, version)) .collect() } diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index 62df05ad..b0fcb185 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1954389790, 1028875012, 1445798022, 1249823514, 895192610, 683282762, 201633599, 421015397]; +pub const COMMIT: [u32; 8] = [530940478, 1113081054, 162458416, 863505408, 1784674020, 738811261, 841509867, 279682691]; diff --git a/crates/circuits/chunk-circuit/src/circuit.rs b/crates/circuits/chunk-circuit/src/circuit.rs index 4fc7dd78..75ddc48d 100644 --- a/crates/circuits/chunk-circuit/src/circuit.rs +++ b/crates/circuits/chunk-circuit/src/circuit.rs @@ -3,7 +3,10 @@ use scroll_zkvm_types_chunk::ChunkWitness; use scroll_zkvm_types_circuit::{ Circuit, io::read_witnesses, - public_inputs::chunk::{ChunkInfo, VersionedChunkInfo}, + public_inputs::{ + Version, + chunk::{ChunkInfo, VersionedChunkInfo}, + }, }; #[allow(unused_imports, clippy::single_component_path_imports)] @@ -38,8 +41,10 @@ impl Circuit for ChunkCircuit { } fn validate(witness: Self::Witness) -> Self::PublicInputs { - let fork_name = witness.fork_name; + let version = Version::from(witness.version); + assert_eq!(version.fork, witness.fork_name); + let chunk_info = ChunkInfo::try_from(witness).expect("failed to execute chunk"); - (chunk_info, fork_name) + (chunk_info, version) } } diff --git a/crates/integration/src/lib.rs b/crates/integration/src/lib.rs index 8c3f63b7..22f7393a 100644 --- a/crates/integration/src/lib.rs +++ b/crates/integration/src/lib.rs @@ -8,7 +8,7 @@ use scroll_zkvm_prover::{ }; use scroll_zkvm_types::{ proof::{EvmProof, ProofEnum, StarkProof}, - public_inputs::ForkName, + public_inputs::{ForkName, Version}, types_agg::ProgramCommitment, utils::serialize_vk, }; @@ -42,6 +42,15 @@ pub fn testing_hardfork() -> ForkName { ForkName::Feynman } +/// Test settings (version). +pub fn testing_version() -> Version { + Version::feynman() +} + +pub fn testing_version_validium() -> Version { + Version::validium_v1() +} + /// Read the 'GUEST_VERSION' from the environment variable. /// If not existed, return "dev" as default /// The returned value will be used to locate asset files: $workspace/releases/$guest_version diff --git a/crates/integration/src/testers/batch.rs b/crates/integration/src/testers/batch.rs index 26b0c0b6..231d06fb 100644 --- a/crates/integration/src/testers/batch.rs +++ b/crates/integration/src/testers/batch.rs @@ -3,14 +3,14 @@ use scroll_zkvm_types::{ batch::{BatchHeader, BatchInfo, BatchWitness, ReferenceHeader}, chunk::ChunkInfo, proof::ProofEnum, - public_inputs::ForkName, + public_inputs::{ForkName, Version}, utils::serialize_vk, }; use crate::{ PartialProvingTask, ProverTester, load_program_commitments, prove_verify, - testers::chunk::{ChunkTaskGenerator, preset_chunk_multiple}, - utils::build_batch_witnesses, + testers::chunk::{ChunkTaskGenerator, preset_chunk_multiple, preset_chunk_validium}, + utils::{build_batch_witnesses, build_batch_witnesses_validium}, }; impl PartialProvingTask for BatchWitness { @@ -19,6 +19,7 @@ impl PartialProvingTask for BatchWitness { ReferenceHeader::V6(h) => h.batch_hash(), ReferenceHeader::V7(h) => h.batch_hash(), ReferenceHeader::V8(h) => h.batch_hash(), + ReferenceHeader::Validium(h) => h.batch_hash(), }; header_hash.to_string() } @@ -55,6 +56,16 @@ pub struct BatchTaskGenerator { } impl BatchTaskGenerator { + pub fn version(&self) -> Version { + if let Some(wit) = self.witness.as_ref() { + return Version::from(wit.version); + } + self.chunk_generators + .first() + .expect("at least 1 chunk in a batch") + .version + } + pub fn get_or_build_witness(&mut self) -> eyre::Result { if self.witness.is_some() { return Ok(self.witness.clone().unwrap()); @@ -63,6 +74,7 @@ impl BatchTaskGenerator { self.witness.replace(witness.clone()); Ok(witness) } + pub fn get_or_build_proof( &mut self, prover: &mut Prover, @@ -103,14 +115,31 @@ impl BatchTaskGenerator { .collect::>>()?; let commitment = load_program_commitments("chunk")?; - let ret_wit = build_batch_witnesses( - &chunks, - &serialize_vk::serialize(&commitment), - self.last_witness - .as_ref() - .map(|wit| (&wit.reference_header).into()) - .unwrap_or_default(), - )?; + + let ret_wit = if chunks + .first() + .expect("at least 1 chunk in batch") + .version() + .is_validium() + { + build_batch_witnesses_validium( + &chunks, + &serialize_vk::serialize(&commitment), + self.last_witness + .as_ref() + .map(|wit| (&wit.reference_header).into()) + .unwrap_or_default(), + )? + } else { + build_batch_witnesses( + &chunks, + &serialize_vk::serialize(&commitment), + self.last_witness + .as_ref() + .map(|wit| (&wit.reference_header).into()) + .unwrap_or_default(), + )? + }; // sanity check for info in &ret_wit.chunk_infos { @@ -173,6 +202,10 @@ pub fn preset_batch() -> BatchTaskGenerator { BatchTaskGenerator::from_chunk_tasks(&preset_chunk_multiple(), None) } +pub fn preset_batch_validium() -> BatchTaskGenerator { + BatchTaskGenerator::from_chunk_tasks(&[preset_chunk_validium()], None) +} + /// preset examples for multiple task pub fn preset_batch_multiple() -> Vec { static PRESET_RESULT: std::sync::OnceLock> = std::sync::OnceLock::new(); diff --git a/crates/integration/src/testers/bundle.rs b/crates/integration/src/testers/bundle.rs index 409300c1..1e7795f7 100644 --- a/crates/integration/src/testers/bundle.rs +++ b/crates/integration/src/testers/bundle.rs @@ -10,7 +10,7 @@ use scroll_zkvm_prover::Prover; use crate::{ PartialProvingTask, ProverTester, load_program_commitments, prove_verify_single_evm, - testers::batch::BatchTaskGenerator, testing_hardfork, utils::metadata_from_batch_witnesses, + testers::batch::BatchTaskGenerator, utils::metadata_from_batch_witnesses, }; impl PartialProvingTask for BundleWitness { @@ -77,6 +77,7 @@ impl BundleTaskGenerator { self.proof.replace(proof.clone()); Ok(proof) } + fn get_or_build_child_proofs( &mut self, batch_prover: &mut Prover, @@ -104,7 +105,12 @@ impl BundleTaskGenerator { public_inputs::MultiVersionPublicInputs, types_agg::AggregationInput, }; - let fork_name = testing_hardfork(); + let version = self + .batch_generators + .first() + .expect("at least 1 batch in a bundle") + .version(); + let fork_name = version.fork; let commitment = load_program_commitments("batch")?; let mut batch_proofs = Vec::new(); @@ -120,7 +126,7 @@ impl BundleTaskGenerator { assert_eq!(info.parent_batch_hash, last_info.batch_hash, "batch hash",); } - let pi_hash = info.pi_hash_by_fork(fork_name); + let pi_hash = info.pi_hash_by_version(version); let proof = AggregationInput { public_values: pi_hash .as_slice() @@ -134,6 +140,7 @@ impl BundleTaskGenerator { } Ok(BundleWitness { + version: version.as_version_byte(), batch_infos, batch_proofs, fork_name, diff --git a/crates/integration/src/testers/chunk.rs b/crates/integration/src/testers/chunk.rs index 3513786e..8b3323f7 100644 --- a/crates/integration/src/testers/chunk.rs +++ b/crates/integration/src/testers/chunk.rs @@ -4,17 +4,21 @@ use std::{ path::{Path, PathBuf}, }; -use sbv_primitives::{B256, types::BlockWitness}; -use scroll_zkvm_prover::Prover; +use sbv_primitives::{ + B256, + types::{BlockWitness, consensus::TxL1Message}, +}; +use scroll_zkvm_prover::{Prover, utils::read_json}; use scroll_zkvm_types::{ - chunk::{ChunkInfo, ChunkWitness, LegacyChunkWitness}, + chunk::{ChunkInfo, ChunkWitness, LegacyChunkWitness, SecretKey}, proof::ProofEnum, - public_inputs::ForkName, + public_inputs::{ForkName, Version}, }; use crate::{ PartialProvingTask, ProverTester, prove_verify, testdata_fork_directory, - testers::PATH_TESTDATA, testing_hardfork, utils::metadata_from_chunk_witnesses, + testers::PATH_TESTDATA, testing_hardfork, testing_version, + utils::metadata_from_chunk_witnesses, }; /// Load a file .json in the directory. @@ -85,6 +89,7 @@ impl ProverTester for ChunkProverTester { /// Generator collect a range of block witnesses from test data #[derive(Clone, Default)] pub struct ChunkTaskGenerator { + pub version: Version, pub block_range: Vec, pub prev_message_hash: Option, pub witness: Option, @@ -101,6 +106,7 @@ impl ChunkTaskGenerator { self.witness = Some(witness.clone()); Ok(witness) } + pub fn get_or_build_proof(&mut self, prover: &mut Prover) -> eyre::Result { if let Some(proof) = &self.proof { return Ok(proof.clone()); @@ -112,12 +118,17 @@ impl ChunkTaskGenerator { } pub fn calculate_witness(&mut self) -> eyre::Result { + let dir_name = if self.version.is_validium() { + "validium" + } else { + self.version.fork.as_str() + }; let paths: Vec = self .block_range .iter() .map(|block_n| { Path::new(PATH_TESTDATA) - .join(testdata_fork_directory()) + .join(dir_name) .join("witnesses") .join(format!("{}.json", block_n)) }) @@ -128,12 +139,33 @@ impl ChunkTaskGenerator { .map(read_block_witness) .collect::>>()?; - let witness = ChunkWitness::new_scroll( - &block_witnesses, - self.prev_message_hash - .unwrap_or_else(|| B256::repeat_byte(1u8)), - testing_hardfork(), - ); + let witness = if self.version.is_validium() { + let base_dir = Path::new(PATH_TESTDATA).join("validium"); + let secret_key = hex::decode(std::env::var("VALIDIUM_KEY")?)?; + let secret_key = SecretKey::try_from_bytes(&secret_key)?; + let validium_txs = self + .block_range + .iter() + .map(|blk| read_json(base_dir.join(format!("{blk}_validium_txs.json")))) + .collect::>, _>>()?; + ChunkWitness::new_validium( + self.version.as_version_byte(), + &block_witnesses, + self.prev_message_hash + .unwrap_or_else(|| B256::repeat_byte(1u8)), + self.version.fork, + validium_txs, + secret_key, + ) + } else { + ChunkWitness::new_scroll( + self.version.as_version_byte(), + &block_witnesses, + self.prev_message_hash + .unwrap_or_else(|| B256::repeat_byte(1u8)), + testing_hardfork(), + ) + }; Ok(witness) } @@ -152,7 +184,11 @@ pub fn get_witness_from_env_or_builder( .iter() .map(read_block_witness) .collect::>>()?; + + let version = testing_version().as_version_byte(); + Ok(ChunkWitness::new_scroll( + version, &block_witnesses, B256::repeat_byte(1u8), testing_hardfork(), @@ -161,13 +197,14 @@ pub fn get_witness_from_env_or_builder( /// preset examples for single task pub fn preset_chunk() -> ChunkTaskGenerator { - let block_range = match testing_hardfork() { - ForkName::EuclidV1 => 12508460u64..=12508463u64, - ForkName::EuclidV2 => 1u64..=4u64, - ForkName::Feynman => 16525000u64..=16525003u64, + let (version, block_range) = match testing_hardfork() { + ForkName::EuclidV1 => (Version::euclid_v1(), 12508460u64..=12508463u64), + ForkName::EuclidV2 => (Version::euclid_v2(), 1u64..=4u64), + ForkName::Feynman => (Version::feynman(), 16525000u64..=16525003u64), }; ChunkTaskGenerator { + version, block_range: block_range.collect(), ..Default::default() } @@ -175,12 +212,14 @@ pub fn preset_chunk() -> ChunkTaskGenerator { /// create canonical tasks from a series of block range pub fn create_canonical_tasks( + version: Version, ranges: impl Iterator>, ) -> eyre::Result> { let mut ret = Vec::new(); let mut prev_message_hash = None; for r in ranges { let mut canonical_generator = ChunkTaskGenerator { + version, block_range: r.collect(), prev_message_hash, proof: Default::default(), @@ -202,23 +241,40 @@ pub fn preset_chunk_multiple() -> Vec { PRESET_RESULT .get_or_init(|| { - create_canonical_tasks( - match testing_hardfork() { - ForkName::EuclidV1 => vec![ + let (block_range, version) = match testing_hardfork() { + ForkName::EuclidV1 => ( + vec![ 12508460u64..=12508460u64, 12508461u64..=12508461u64, 12508462u64..=12508463u64, ], - ForkName::EuclidV2 => vec![1u64..=1u64, 2u64..=2u64, 3u64..=4u64], - ForkName::Feynman => vec![ + Version::euclid_v1(), + ), + ForkName::EuclidV2 => ( + vec![1u64..=1u64, 2u64..=2u64, 3u64..=4u64], + Version::euclid_v2(), + ), + ForkName::Feynman => ( + vec![ 16525000u64..=16525000u64, 16525001u64..=16525001u64, 16525002u64..=16525003u64, ], - } - .into_iter(), - ) - .expect("must success for preset collections") + Version::feynman(), + ), + }; + create_canonical_tasks(version, block_range.into_iter()) + .expect("must success for preset collections") }) .clone() } + +pub fn preset_chunk_validium() -> ChunkTaskGenerator { + let block_range = 1141071..=1141071; + + ChunkTaskGenerator { + version: Version::validium_v1(), + block_range: block_range.collect(), + ..Default::default() + } +} diff --git a/crates/integration/src/utils/mod.rs b/crates/integration/src/utils/mod.rs index a26c4eb3..4e3cc0c1 100644 --- a/crates/integration/src/utils/mod.rs +++ b/crates/integration/src/utils/mod.rs @@ -1,4 +1,4 @@ -use crate::testing_hardfork; +use crate::{testing_hardfork, testing_version, testing_version_validium}; use sbv_primitives::types::consensus::ScrollTransaction; use sbv_primitives::{ B256, @@ -6,8 +6,8 @@ use sbv_primitives::{ }; use scroll_zkvm_types::{ batch::{ - BatchHeader, BatchHeaderV6, BatchHeaderV7, BatchInfo, BatchWitness, PointEvalWitness, - ReferenceHeader, + BatchHeader, BatchHeaderV6, BatchHeaderV7, BatchHeaderValidium, BatchHeaderValidiumV1, + BatchInfo, BatchWitness, PointEvalWitness, ReferenceHeader, }, bundle::{BundleInfo, BundleWitness}, chunk::{ChunkInfo, ChunkWitness}, @@ -71,6 +71,7 @@ impl From<&ReferenceHeader> for LastHeader { ReferenceHeader::V6(h) => h.into(), ReferenceHeader::V7(h) => h.into(), ReferenceHeader::V8(h) => h.into(), + ReferenceHeader::Validium(h) => h.into(), } } } @@ -97,6 +98,17 @@ impl From<&BatchHeaderV7> for LastHeader { } } +impl From<&BatchHeaderValidium> for LastHeader { + fn from(h: &BatchHeaderValidium) -> Self { + Self { + batch_index: h.index(), + version: h.version(), + batch_hash: h.batch_hash(), + l1_message_index: 0, + } + } +} + pub fn metadata_from_chunk_witnesses(witness: ChunkWitness) -> eyre::Result { witness .try_into() @@ -162,7 +174,9 @@ pub fn build_batch_witnesses( } else { meta_chunk_bytes.clone() }; - if testing_hardfork() >= ForkName::EuclidV2 { + + let version = testing_version(); + if version.fork >= ForkName::EuclidV2 { let num_blocks = chunks.iter().map(|w| w.blocks.len()).sum::() as u16; let prev_msg_queue_hash = chunks[0].prev_msg_queue_hash; let initial_block_number = chunks[0].blocks[0].header.number; @@ -187,8 +201,7 @@ pub fn build_batch_witnesses( // compress ... let compressed_payload = zstd_encode(&payload); - let version = ForkName::Feynman.to_protocol_version() as u32; - let heading = compressed_payload.len() as u32 + (version << 24); + let heading = compressed_payload.len() as u32 + ((version.as_version_byte() as u32) << 24); let blob_bytes = if testing_hardfork() >= ForkName::EuclidV2 { let mut blob_bytes = Vec::from(heading.to_be_bytes()); @@ -297,12 +310,11 @@ pub fn build_batch_witnesses( } }; - let fork_name = testing_hardfork(); let commitment = serialize_vk::deserialize(prover_vk); let chunk_proofs = chunk_infos .iter() .map(|chunk_info| { - let pi_hash = chunk_info.pi_hash_by_fork(fork_name); + let pi_hash = chunk_info.pi_hash_by_version(version); AggregationInput { public_values: pi_hash .as_slice() @@ -315,15 +327,146 @@ pub fn build_batch_witnesses( .collect::>(); Ok(BatchWitness { + version: version.as_version_byte(), chunk_proofs, chunk_infos, reference_header, blob_bytes, - point_eval_witness: PointEvalWitness { + point_eval_witness: Some(PointEvalWitness { kzg_commitment: *kzg_commitment.to_bytes().as_ref(), kzg_proof: *kzg_proof.to_bytes().as_ref(), + }), + fork_name: version.fork, + }) +} + +pub fn build_batch_witnesses_validium( + chunks: &[ChunkWitness], + prover_vk: &[u8], // notice we supppose all proof is (would be) generated from the same prover + last_header: LastHeader, +) -> eyre::Result { + let chunk_infos = chunks + .iter() + .cloned() + .map(metadata_from_chunk_witnesses) + .collect::>>()?; + + // collect tx bytes from chunk tasks + let (meta_chunk_sizes, chunk_digests, chunk_tx_bytes) = chunks.iter().fold( + (Vec::new(), Vec::new(), Vec::new()), + |(mut meta_chunk_sizes, mut chunk_digests, mut payload_bytes), chunk_wit| { + let tx_bytes = blks_tx_bytes(chunk_wit.blocks.iter()); + meta_chunk_sizes.push(tx_bytes.len()); + chunk_digests.push(keccak256(&tx_bytes)); + payload_bytes.extend(tx_bytes); + (meta_chunk_sizes, chunk_digests, payload_bytes) }, - fork_name, + ); + + // sanity check, verify the correction of execute + for (digest, chunk_info) in chunk_digests.iter().zip(chunk_infos.as_slice()) { + assert_eq!(digest, &chunk_info.tx_data_digest); + } + + const LEGACY_MAX_CHUNKS: usize = 45; + + let meta_chunk_bytes = { + let valid_chunk_size = chunks.len() as u16; + meta_chunk_sizes + .into_iter() + .chain(std::iter::repeat(0)) + .take(LEGACY_MAX_CHUNKS) + .fold( + Vec::from(valid_chunk_size.to_be_bytes()), + |mut bytes, len| { + bytes.extend_from_slice(&(len as u32).to_be_bytes()); + bytes + }, + ) + }; + + // collect all data together for payload + let version = testing_version_validium(); + let mut payload = if version.fork >= ForkName::EuclidV2 { + Vec::new() + } else { + meta_chunk_bytes.clone() + }; + + if version.fork >= ForkName::EuclidV2 { + let num_blocks = chunks.iter().map(|w| w.blocks.len()).sum::() as u16; + let prev_msg_queue_hash = chunks[0].prev_msg_queue_hash; + let initial_block_number = chunks[0].blocks[0].header.number; + let post_msg_queue_hash = chunk_infos + .last() + .expect("at least one chunk") + .post_msg_queue_hash; + + payload.extend_from_slice(prev_msg_queue_hash.as_slice()); + payload.extend_from_slice(post_msg_queue_hash.as_slice()); + payload.extend(initial_block_number.to_be_bytes()); + payload.extend(num_blocks.to_be_bytes()); + assert_eq!(payload.len(), 74); + for chunk_info in &chunk_infos { + for ctx in &chunk_info.block_ctxs { + payload.extend(ctx.to_bytes()); + } + } + assert_eq!(payload.len(), 74 + 52 * num_blocks as usize); + } + payload.extend(chunk_tx_bytes); + // compress ... + let compressed_payload = zstd_encode(&payload); + + let heading = compressed_payload.len() as u32 + ((version.as_version_byte() as u32) << 24); + + let blob_bytes = if version.fork >= ForkName::EuclidV2 { + let mut blob_bytes = Vec::from(heading.to_be_bytes()); + blob_bytes.push(1u8); // compressed flag + blob_bytes.extend(compressed_payload); + blob_bytes.resize(4096 * 31, 0); + blob_bytes + } else { + let mut blob_bytes = vec![1]; + blob_bytes.extend(compressed_payload); + blob_bytes + }; + + let last_chunk = chunk_infos.last().expect("at least 1 chunk in batch"); + let reference_header = + ReferenceHeader::Validium(BatchHeaderValidium::V1(BatchHeaderValidiumV1 { + version: version.as_version_byte(), + batch_index: last_header.batch_index + 1, + parent_batch_hash: last_header.batch_hash, + post_state_root: last_chunk.post_state_root, + withdraw_root: last_chunk.withdraw_root, + commitment: last_chunk.post_blockhash, + })); + + let commitment = serialize_vk::deserialize(prover_vk); + let chunk_proofs = chunk_infos + .iter() + .map(|chunk_info| { + let pi_hash = chunk_info.pi_hash_by_version(version); + AggregationInput { + public_values: pi_hash + .as_slice() + .iter() + .map(|&b| b as u32) + .collect::>(), + commitment: commitment.clone(), + } + }) + .collect::>(); + + Ok(BatchWitness { + version: version.as_version_byte(), + chunk_proofs, + chunk_infos, + reference_header, + blob_bytes, + point_eval_witness: None, + fork_name: version.fork, }) } @@ -371,6 +514,9 @@ fn test_build_and_parse_batch_task() -> eyre::Result<()> { let enveloped = batch::EnvelopeV8::from_slice(&task_wit.blob_bytes); ::from_envelope(&enveloped).validate(h, infos); } + ReferenceHeader::Validium(_h) => { + todo!() + } } Ok(()) diff --git a/crates/integration/testdata/validium/witnesses/1141071.json b/crates/integration/testdata/validium/witnesses/1141071.json new file mode 100644 index 00000000..c552bc2d --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/1141071.json @@ -0,0 +1,102 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xc5e4628e49e72a55b05a8e5940d73c5f9abf0da6962063302ccc563635602d0e", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xd1e98880945b887b04b23ca0d2480adee255170543279e5c5a0b977913f31acb", + "transactions_root": "0xe5c4c57c2f675c696a8de7ab6615b16960a0531b672ab915fbf061b9182ddc74", + "receipts_root": "0x05e1e469f7ee06c6b523aa8cc9ffeb4ea55090cb428dfb582cafa1931c51e1ab", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000800000000000000000000000001000000000000000000000000000001000000000000000000000000000000010000000000000000400000000000000000000400008000000000001000001000000000000400000100000000000020100400000000010000800000000000000000000000058040000000000000000010000000040000000400020008000000000000000008000100000000000000080000000800000000000000000000000000000008000004000000000000002000000000000000020000000000000000000000000000000000020200000004000000000000000000000080000000000000000000001000008000000", + "difficulty": "0x1", + "number": 1141071, + "gas_limit": 8000000, + "gas_used": 259154, + "timestamp": 1755796400, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xc39aa3516fc81ea2282645a7b2ca7c0ff9949f675f1047e60b0c3bc92c19b170", + "transactions": [ + { + "TxL1Message": { + "hash": "0x283005aee56b49ba905c80d8eed0c68808dcd7c3b6cc7be338a9b3711d03f5f9", + "transaction": { + "queueIndex": "0x4", + "gas": "0xf4240", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000021ace8d80c80d1c179707353cb434ec4f5982c43000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + { + "TxL1Message": { + "hash": "0x762b59368609ffafbc4e2895ed4cd32dc14448aaba8766f1c50cab13c4400b44", + "transaction": { + "queueIndex": "0x5", + "gas": "0xf4240", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "value": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c10000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000021ace8d80c80d1c179707353cb434ec4f5982c43000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } + } + ], + "withdrawals": null, + "states": [ + "0xf8518080a053d31e4843b226c066087063bb165d1e3e003bbd77cd4dbc393bb08a120f4e1e80808080808080a0159a940be34149624d9ff54f84796b4968a547549d969c92bdb2ce9d70fd2619808080808080", + "0xf869a02080c5909396c0dfb921e1e67884b5c70f8f29697d6c89ad487bac3c8b772d99b846f8440280a03f9d1fa709b4e3aa6df641355c90dc9ad53d404185634e1bf87ed25406e67f12a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", + "0xf869a020823f37b7de174b4a867ec555284bb1165c8b33cbe4e2f09f2d87e1f9494cbdb846f8440480a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "0xf869a0206fa4d0b426cd21e9e2efb29f0dcc6e93debf41907d3af7842c2668e734ea2cb846f8440180a06e87a5e4eeca3fe1f93b477e697b332f191c694e7eebeae1672dc018eb5395efa0c34dc3e3b2b96c1410bd4cdfde933f041145c8958a0807dab0705c99f1bb557c", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a0751bab9da8bbd646b7574d6214f70a4bff9a5c13095d5a3318ab66dff2827bcc80a0b0ef21434c42e174ada1a8e8e3f713955a31017558b6dcdaef64ec14f33e9149a0bd7940db4b06e68a4fe74d394d0e0cc24e569a62c02111b3d8156f1987cb473ca0df8b9048bad60c470a2654eee3f64e485b1b3d9178f250e93203295e530ac60180a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a08f4ec04dbbb020ac32a4bdee720ed9330593180122ad620b4032e3a8fbd2a65ba05490dd2fd0b602ab6dde6fe768494ecd5ccc75186c8c1d5b7fecacce5e2be620a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0d829f43bc2e1241af0f4eb865e49735d3a235e1d1334fde126462993576799aba03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a06027b81f626cad0425a53d01f6241f0c576b1ca9a6a6b672c81762bc8c42b9c1a0200afa65929932f7cfe42dd0c8041fb448e3f1bdc041a61e65caf06a0054fda7a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf87180a0ef2f9e570919641e1bbc7ec1202c401ae1aa67ec1f8fa78d84adadad2fa7ff0080a0d7fb0b8838d85f28436150765402d495f441359787a3574ad50553b7502f76928080808080a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a058c6460055741fc4aa35ecee30694955aa0d772d607c9457d58b6f78053eb5dfa0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", + "0xf8f18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a058fd0c07ae2ba9df11414ef2392a0bc1a631ce255556ae323a1a9c8dd030e18ca0444bb20502e2faba351f25402a825472ee36dbc64fc810596a74df733b093276808080a0bba9533e0c3e882950a739322e029fd8b7cf829893583d1cc6882cbfef9ceea1a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0fa513dc885e7e6375d814da5f76af78d27b1c68bcb3dcf924689d3b9099a049d80a038c51dd490535b5feada54b14769414f379beaf3aafe15251bc5482084787d1c80808080", + "0xeaa03fa4bec1d3298408bb5afcfcd9c430549c5b31f8aa5c5848151c0a55f473c34d8887470de4df820000", + "0xf888a0209d888b8f443fa80d97d6ef86dad20c16dd6152e9d58bfbcb7e5a45ff5e2555b865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a00e5ef978c63f5ba19740a578f706f7e3ae643b4bc707681db76f3007107bc111a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d95946976a0273fb14fc58df9d7840cfd3256b8af7984", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a0f15166af8f3fea56417391a9b12fa833a943ffb894d015fbb225463315dbffe3", + "0xf869a0328fda92b5c07164bb42506cfa1f54b01846f04fd75a33912207c883cbae5cfbb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xf8518080808080808080808080a0f9015f71561f6a9cf46db1082566825aaf6bddf61711bb6b041d7ef1d5e45af9808080a026c3cbe8ef6d3f9be6ad0cb64ded4df971bbf51131ba45d1f1634c52092aaae680", + "0xf869a020ccc237cb14f1e7206826bf271fec2ea755a65ca3b2495aa4019e7b27041a3db846f8440180a05832b9e4a453b204b469dd1ec9b5fd8b67ce307834666e308a75c910ddd13112a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf9019180a034ffe60b579b442213b6366bfd89b1d76e8b442cc63a97952fd14470d9f8ec10a057f4c819de65f12dbc823ff1e364336b1205343ed06f21be8acffd1d348ae5b4a094e9add05f6f77f77969ceeee958be6e5737b81f422a37c86b92b2abb585c049a0cdfdff4041d21be21156ba3609aa62a85c9ff5c9c2461ef505b145c57b9f8e968080a0e52288535ac7fc004a23c7c29a1f0b5f884c8db35bab85e1902d875ec52d965e80a0bc550b863978f40529e231caa7b4fdf0a3e036593a253b6524cf693bb8465c2ea02f1195e5e397029c345818a32ce91834ffba8046d5003293f18e7da0af22dc34a0b9b23b80cd6b0e8521908972c4cc9302f23e49e7d6bd22e1228f4ba2acce3a37a07ecab3b62549ff9a35e52f9e9ebf8e41dba602c8c2cbd5e058d15d292a4668c7a0d92fc769dc359b00522d05c45acb8e3f05bd2879139dbfe7d0dd788535db4408a016bec6e0789de961941afcea27ad81ac08daf198943b4fe6a557152c237951ada0ab9e001858297618a6854c4077a80dfb5be66336d5c617fa55aae70b7669b68d80", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594dfadf71fa473d6a7a7a9dcd1499c4315fc457bb8", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0be42ca4e8aae202a71db02f066370d66dd51a4355cb548d519cb4bb5e3117d6da0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe21aa034b255ffe46fabbd100c057b05288ed17ee1de7b08dcb47b4de4114275e0e1ff", + "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594d37594dde17dcb02e64023bd3cdddb9068bf6db9", + "0xf8689f3b677423fa337485555bdb61c485755844fb70afb79537ffef69215fad1c40b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0dad338cf3bd32b6e5589b15cb870e8f98a8840c62d70871434444bcfde919ddf", + "0xf7a020df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d48195941480082b3164ccd3bcbd1ecb52720f5850f0e45c", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", + "0xf8718080a07bc829cf8dd426393ba407faf48530e732143890787e850a8ebf259502709db98080808080a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080808080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d48195941480082b3164ccd3bcbd1ecb52720f5850f0e45c", + "0xf9015180a037b594ccfeb2dfe165f135c1db841f33e8ad15286c54c4bbf883a6ee971b2639a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da516180a09ef3d8f3b3ca2f186dd780afe62b9b2835aad76ab604a64a0d866a08837b7ac2a0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0b95fe26ce057456c6c450bc74968f0b02f04598b1040f221d6dcf47f1f975349a09e88921a65a4e0885b5184ed269383efaf0710947c872955061c59fc077a3adba0323f04280363401cfb81f7dff6d0b171b43c41aedb328cdb5aa7588bcf3de6af80a0575c28dab1df14c950ab8310c391de1579d6a1b035f4b0b71b54ebb33f71733f808080a08384cbc0e87a1d7e5364b015c99d5adb1339a6632aa7199d203197284c62af8e80", + "0xf85180808080808080808080a05016f95a216237ecc6a3b3a2c382c7d1e68e20c28cfb313eb06f83022b9eadfb8080a0238de5c37d08e53783150d3f58c44f048808a8df72321c17607e13245203bb98808080", + "0xf869a020cb6b4b7193493044bbb4e88ba2ada699e9da9a01c85b6096bebabe4ba4334ab846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba047747417a662b04fe37e06d9dce49d77cc67bdaa6e04a13ab0df5c54f745dca4", + "0xf8718080a012029a027a77ca1b6f037157f1f0cdafcdf85e7dc03c30ad04c6f2838714de9a80808080a02a0eb47c159b0ab16b7af59ff9988e1ec5f11329350d1b21af9d476e941db8788080a02a3a0fc1952479e950b7ef6015a3667c81b9de102761af6b0750b7149331e455808080808080", + "0xf871808080a048af3ed6a9da275abf32589b8ddbb06d9366eb19c313258b7707a6af30966474808080a0537d3711100d980c295a131318a5a81887f9d648200ea981a39017445b5e515f80808080808080a05d18f3260595ad15a866d33134bf1c49c20d01ff88ae54357883a267d044738780", + "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca", + "0xf8518080a0b01460450ca263e1ad65154e9d8c57d162d1af2ab4669c53115ebc5433cf8cb18080808080808080a0bee831d91e49e67814173afe867c769a38faa75dcea204a24f470c84c24333688080808080", + "0xf851808080808080a0b284313f3cde2222dedc5f9067b40fceb0bed50555bf18fbb7b9d48705febc2d80808080808080a09169a8a5030370a2bc5a6bcfc09fe5218c0524fd4671830314cdb59b7793d1128080", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a8295945fdd39bd675b5951be2e58741c1910573a5774f1" + ], + "codes": [ + "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf8481565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f0000000000000000000000004d3b02958a81979c7aa52829e9b49c4a61bfbf846001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a", + "0x363d3d373d3d3d363d73d37594dde17dcb02e64023bd3cdddb9068bf6db95af43d82803e903d91602b57fd5bf3", + "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb95781565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b76001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb9576001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000d277afc9b0fa76ca883a3f5236ab9bc6f24f53b7169063b2267a7b903490610c22907f000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000ee811b63b49275f36d197a41047565a5662058cd90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a" + ] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/1141071_validium_txs.json b/crates/integration/testdata/validium/witnesses/1141071_validium_txs.json new file mode 100644 index 00000000..60da5d03 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/1141071_validium_txs.json @@ -0,0 +1,40 @@ +[ + { + "blockHash": "0xaf67407fcb4eb1f96d23fc2d0bc57fa3d30722549a100ea4dc8a2d9cbbf29a8e", + "blockNumber": "0x11694f", + "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "gas": "0xf4240", + "gasPrice": "0x0", + "hash": "0xaab2455060453ec66576b7fd00c5a46478df0212e25359da81917c94f5713148", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000750455261c9a93af485a36b8455ba5d5afde8d525911978833bc7067e3bfb3b26c80eba92db684d6eeed87dc43202bab1325f8ae298560b9713061173ed1a2403160644e0e9d16d4e674185373c9b78ded3b0f038ea74949dc8f6d15dc07be68df988eef9dc6f7d25bb2d0729dcd1587f4667dd38343000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "transactionIndex": "0x0", + "value": "0x0", + "type": "0x7e", + "v": "0x0", + "r": "0x0", + "s": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "queueIndex": "0x4" + }, + { + "blockHash": "0xaf67407fcb4eb1f96d23fc2d0bc57fa3d30722549a100ea4dc8a2d9cbbf29a8e", + "blockNumber": "0x11694f", + "from": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "gas": "0xf4240", + "gasPrice": "0x0", + "hash": "0x77ccf0606623af506d9dc3061ce86c470ee4971075e5f80613125290d4b015e8", + "input": "0x8ef1332e000000000000000000000000d1a3ee261d2980e81316f545701a9d82c3bdb957000000000000000000000000d595e33f80ea2a22b1a9327b00e32bb5bfcea8ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000944010736c505a568beea4f9719ee7aefce5d9cd000000000000000000000000253169d91a93faf675de1b7ab382330196a7059200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504880bbe20c8ae95af78174380ff1ac0a8d9bf96591c629576d1df0ad742e2b13d890ec82f7dca3315c2e41b563e459907e1ae563e3bac02b766a083d851e941b859e8b4aba9cc8393007c42ed3dbe50c3f1f187238ea1fc2703bdbb9e69bc8b4426c65dd0d5a18f496b2cb667051dff7aac394c51000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "to": "0xd277afc9b0fa76ca883a3f5236ab9bc6f24f53b7", + "transactionIndex": "0x1", + "value": "0x0", + "type": "0x7e", + "v": "0x0", + "r": "0x0", + "s": "0x0", + "sender": "0x5e4c02958a81979c7aa52829e9b49c4a61bfd095", + "queueIndex": "0x5" + } +] diff --git a/crates/integration/tests/batch_circuit.rs b/crates/integration/tests/batch_circuit.rs index c75505ad..1adedcd8 100644 --- a/crates/integration/tests/batch_circuit.rs +++ b/crates/integration/tests/batch_circuit.rs @@ -5,9 +5,10 @@ use scroll_zkvm_integration::{ chunk::{ChunkProverTester, create_canonical_tasks, preset_chunk_multiple}, load_local_task, }, - testing_hardfork, + testing_version, }; use scroll_zkvm_prover::task::ProvingTask; +use scroll_zkvm_types::public_inputs::Version; #[ignore = "need local stuff"] #[test] @@ -74,22 +75,29 @@ fn verify_batch_hash_invariant() -> eyre::Result<()> { BatchProverTester::setup(true)?; let outcome_1 = preset_chunk_multiple(); - let outcome_2 = create_canonical_tasks( - match testing_hardfork() { - ForkName::EuclidV1 => vec![ + let (version, block_range) = match testing_version().fork { + ForkName::EuclidV1 => ( + Version::euclid_v1(), + vec![ 12508460u64..=12508461u64, 12508462u64..=12508462u64, 12508463u64..=12508463u64, ], - ForkName::EuclidV2 => vec![1u64..=2u64, 3u64..=3u64, 4u64..=4u64], - ForkName::Feynman => vec![ + ), + ForkName::EuclidV2 => ( + Version::euclid_v2(), + vec![1u64..=2u64, 3u64..=3u64, 4u64..=4u64], + ), + ForkName::Feynman => ( + Version::feynman(), + vec![ 16525000u64..=16525001u64, 16525002u64..=16525002u64, 16525003u64..=16525003u64, ], - } - .into_iter(), - )?; + ), + }; + let outcome_2 = create_canonical_tasks(version, block_range.into_iter())?; let mut task_1 = BatchTaskGenerator::from_chunk_tasks(&outcome_1, None); let mut task_2 = BatchTaskGenerator::from_chunk_tasks(&outcome_2, None); diff --git a/crates/integration/tests/bundle_circuit.rs b/crates/integration/tests/bundle_circuit.rs index e4f50176..2a0fbbee 100644 --- a/crates/integration/tests/bundle_circuit.rs +++ b/crates/integration/tests/bundle_circuit.rs @@ -1,28 +1,30 @@ use sbv_primitives::B256; use scroll_zkvm_integration::{ - ProverTester, // utils::{LastHeader, build_batch_task, testing_hardfork}, + ProverTester, testers::{ - batch::{BatchProverTester, preset_batch_multiple}, + batch::{BatchProverTester, preset_batch_multiple, preset_batch_validium}, bundle::{BundleProverTester, BundleTaskGenerator}, chunk::ChunkProverTester, load_local_task, }, - testing_hardfork, + testing_hardfork, testing_version_validium, utils::metadata_from_bundle_witnesses, }; -use scroll_zkvm_prover::{ - // AsRootProof, BatchProof, ChunkProof, IntoEvmProof, - // setup::{read_app_config, read_app_exe}, - Prover, - ProverConfig, +use scroll_zkvm_prover::{Prover, ProverConfig}; +use scroll_zkvm_types::{ + proof::OpenVmEvmProof, + public_inputs::{ForkName, MultiVersionPublicInputs}, }; -use scroll_zkvm_types::{proof::OpenVmEvmProof, public_inputs::ForkName}; use std::str::FromStr; fn preset_bundle() -> BundleTaskGenerator { BundleTaskGenerator::from_batch_tasks(&preset_batch_multiple()) } +fn preset_bundle_validium() -> BundleTaskGenerator { + BundleTaskGenerator::from_batch_tasks(&[preset_batch_validium()]) +} + #[test] fn print_vks() -> eyre::Result<()> { #[derive(Default, Debug, serde::Serialize)] @@ -163,3 +165,36 @@ fn e2e() -> eyre::Result<()> { Ok(()) } + +#[test] +fn test_execute_validium() -> eyre::Result<()> { + BundleProverTester::setup(true)?; + + let version = testing_version_validium(); + + let mut chunk_prover = ChunkProverTester::load_prover(false)?; + let mut batch_prover = BatchProverTester::load_prover(false)?; + let mut bundle_prover = BundleProverTester::load_prover(true)?; + + let mut task = preset_bundle_validium(); + let wit = task.get_or_build_witness()?; + let metadata = metadata_from_bundle_witnesses(&wit)?; + let expected_pi_hash = metadata.pi_hash_by_version(version); + + let proof = + task.get_or_build_proof(&mut bundle_prover, &mut batch_prover, &mut chunk_prover)?; + let evm_proof: OpenVmEvmProof = proof.into_evm_proof().unwrap().into(); + let observed_instances = &evm_proof.user_public_values; + for (i, (&expected, &observed)) in expected_pi_hash + .iter() + .zip(observed_instances.iter()) + .enumerate() + { + assert_eq!( + expected, observed, + "pi inconsistent at index {i}: expected={expected}, observed={observed:?}" + ); + } + + Ok(()) +} diff --git a/crates/integration/tests/chunk_circuit.rs b/crates/integration/tests/chunk_circuit.rs index 97e4a803..1a6b132f 100644 --- a/crates/integration/tests/chunk_circuit.rs +++ b/crates/integration/tests/chunk_circuit.rs @@ -11,9 +11,9 @@ use scroll_zkvm_integration::{ }, utils::metadata_from_chunk_witnesses, }; -use scroll_zkvm_prover::utils::vm::ExecutionResult; +use scroll_zkvm_prover::utils::{read_json, vm::ExecutionResult}; use scroll_zkvm_types::chunk::{ChunkWitness, SecretKey}; -use scroll_zkvm_types::public_inputs::ForkName; +use scroll_zkvm_types::public_inputs::Version; use std::env; use std::path::Path; @@ -73,8 +73,7 @@ fn test_execute() -> eyre::Result<()> { #[test] fn test_execute_validium() -> eyre::Result<()> { - ChunkProverTester::setup()?; - let prover = ChunkProverTester::load_prover(false)?; + ChunkProverTester::setup(true)?; let base_dir = Path::new(PATH_TESTDATA).join("validium"); @@ -86,15 +85,17 @@ fn test_execute_validium() -> eyre::Result<()> { let validium_txs: Vec = read_json(base_dir.join(format!("{blk}_validium_txs.json")))?; + let version = Version::validium_v1(); let witness = ChunkWitness::new_validium( + version.as_version_byte(), &[block_witness], B256::ZERO, - ForkName::EuclidV2, + version.fork, vec![validium_txs], secret_key.clone(), ); - exec_chunk(&prover, &witness)?; + exec_chunk(&witness)?; } Ok(()) } @@ -108,6 +109,7 @@ fn test_autofill_trie_nodes() -> eyre::Result<()> { let mut template_wit = get_witness_from_env_or_builder(&mut preset_chunk())?; template_wit.blocks.truncate(1); let wit = ChunkWitness::new_scroll( + template_wit.version, &template_wit.blocks, template_wit.prev_msg_queue_hash, template_wit.fork_name, diff --git a/crates/types/base/src/lib.rs b/crates/types/base/src/lib.rs index 23727b7d..758b2118 100644 --- a/crates/types/base/src/lib.rs +++ b/crates/types/base/src/lib.rs @@ -1,4 +1,9 @@ pub mod aggregation; + pub mod fork_name; + pub mod public_inputs; + pub mod utils; + +pub mod version; diff --git a/crates/types/base/src/public_inputs.rs b/crates/types/base/src/public_inputs.rs index 5fabb3b5..03a0dda4 100644 --- a/crates/types/base/src/public_inputs.rs +++ b/crates/types/base/src/public_inputs.rs @@ -3,7 +3,8 @@ use alloy_primitives::B256; pub mod batch; pub mod bundle; pub mod chunk; -pub use crate::fork_name::ForkName; + +pub use crate::{fork_name::ForkName, version::Version}; /// Defines behaviour to be implemented by types representing the public-input values of a circuit. pub trait PublicInputs { @@ -18,16 +19,20 @@ pub trait PublicInputs { /// helper trait to extend PublicInputs pub trait MultiVersionPublicInputs { fn pi_hash_by_fork(&self, fork_name: ForkName) -> B256; - fn validate(&self, prev_pi: &Self, fork_name: ForkName); + fn pi_hash_by_version(&self, version: Version) -> B256; + fn validate(&self, prev_pi: &Self, version: Version); } -impl PublicInputs for (T, ForkName) { +impl PublicInputs for (T, Version) { fn pi_hash(&self) -> B256 { - self.0.pi_hash_by_fork(self.1) + self.0.pi_hash_by_version(self.1) } fn validate(&self, prev_pi: &Self) { - assert_eq!(self.1, prev_pi.1); + // version remains unchanged. + assert_eq!(self.1.as_version_byte(), prev_pi.1.as_version_byte()); + + // perform inner validation. self.0.validate(&prev_pi.0, self.1) } } diff --git a/crates/types/base/src/public_inputs/batch.rs b/crates/types/base/src/public_inputs/batch.rs index be93c409..85f944b0 100644 --- a/crates/types/base/src/public_inputs/batch.rs +++ b/crates/types/base/src/public_inputs/batch.rs @@ -3,6 +3,7 @@ use alloy_primitives::B256; use crate::{ public_inputs::{ForkName, MultiVersionPublicInputs}, utils::keccak256, + version::{Domain, STFVersion, Version}, }; /// Represents public-input values for a batch. @@ -95,18 +96,41 @@ impl BatchInfo { .collect::>(), ) } + + /// Public input hash for a batch (feynman or da-codec@v8). + /// + /// Unchanged from euclid-v2. + fn pi_hash_feynman(&self) -> B256 { + self.pi_hash_euclidv2() + } + + /// Public input hash for a L3 validium @ v1. + /// + /// Unchanged from Scroll feynman. + fn pi_hash_validium_v1(&self) -> B256 { + self.pi_hash_feynman() + } } -pub type VersionedBatchInfo = (BatchInfo, ForkName); +pub type VersionedBatchInfo = (BatchInfo, Version); impl MultiVersionPublicInputs for BatchInfo { fn pi_hash_by_fork(&self, fork_name: ForkName) -> B256 { match fork_name { ForkName::EuclidV1 => self.pi_hash_euclidv1(), ForkName::EuclidV2 => self.pi_hash_euclidv2(), - ForkName::Feynman => { - // Feynman fork uses the same hash as EuclidV2 - self.pi_hash_euclidv2() + ForkName::Feynman => self.pi_hash_feynman(), + } + } + + fn pi_hash_by_version(&self, version: Version) -> B256 { + match (version.domain, version.stf_version) { + (Domain::Scroll, STFVersion::V6) => self.pi_hash_by_fork(ForkName::EuclidV1), + (Domain::Scroll, STFVersion::V7) => self.pi_hash_by_fork(ForkName::EuclidV2), + (Domain::Scroll, STFVersion::V8) => self.pi_hash_by_fork(ForkName::Feynman), + (Domain::Validium, STFVersion::V1) => self.pi_hash_validium_v1(), + (domain, stf_version) => { + unreachable!("unsupported version=({domain:?}, {stf_version:?})") } } } @@ -117,13 +141,13 @@ impl MultiVersionPublicInputs for BatchInfo { /// - state roots MUST be chained /// - batch hashes MUST be chained /// - L1 msg queue hashes MUST be chained - fn validate(&self, prev_pi: &Self, fork_name: ForkName) { + fn validate(&self, prev_pi: &Self, version: Version) { assert_eq!(self.chain_id, prev_pi.chain_id); assert_eq!(self.parent_state_root, prev_pi.state_root); assert_eq!(self.parent_batch_hash, prev_pi.batch_hash); assert_eq!(self.prev_msg_queue_hash, prev_pi.post_msg_queue_hash); - if fork_name == ForkName::EuclidV1 { + if version.fork == ForkName::EuclidV1 { assert_eq!(self.prev_msg_queue_hash, B256::ZERO); assert_eq!(prev_pi.prev_msg_queue_hash, B256::ZERO); assert_eq!(self.post_msg_queue_hash, B256::ZERO); diff --git a/crates/types/base/src/public_inputs/bundle.rs b/crates/types/base/src/public_inputs/bundle.rs index 928e08e5..18d4ffae 100644 --- a/crates/types/base/src/public_inputs/bundle.rs +++ b/crates/types/base/src/public_inputs/bundle.rs @@ -3,6 +3,7 @@ use alloy_primitives::B256; use crate::{ public_inputs::{ForkName, MultiVersionPublicInputs}, utils::keccak256, + version::{Domain, STFVersion, Version}, }; /// Represents fields required to compute the public-inputs digest of a bundle. @@ -102,6 +103,22 @@ impl BundleInfo { keccak256(pi) } + pub fn pi_hash_versioned(&self, version: Version, pi: &[u8]) -> B256 { + let version_byte = version.as_version_byte(); + keccak256( + std::iter::empty() + .chain(B256::left_padding_from(&version_byte.to_be_bytes()).as_slice()) + .chain(pi) + .cloned() + .collect::>(), + ) + } + + pub fn pi_validium_v1(&self) -> Vec { + // TODO: PI for Validium is TBD. + self.pi_euclidv2() + } + pub fn pi_hash(&self, fork_name: ForkName) -> B256 { match fork_name { ForkName::EuclidV1 => self.pi_hash_euclidv1(), @@ -111,7 +128,7 @@ impl BundleInfo { } } -pub type VersionedBundleInfo = (BundleInfo, ForkName); +pub type VersionedBundleInfo = (BundleInfo, Version); impl MultiVersionPublicInputs for BundleInfo { fn pi_hash_by_fork(&self, fork_name: ForkName) -> B256 { @@ -122,7 +139,21 @@ impl MultiVersionPublicInputs for BundleInfo { } } - fn validate(&self, _prev_pi: &Self, _fork_name: ForkName) { + fn pi_hash_by_version(&self, version: Version) -> B256 { + match (version.domain, version.stf_version) { + (Domain::Scroll, STFVersion::V6) => self.pi_hash_euclidv1(), + (Domain::Scroll, STFVersion::V7) => self.pi_hash_euclidv2(), + (Domain::Scroll, STFVersion::V8) => self.pi_hash_feynman(), + (Domain::Validium, STFVersion::V1) => { + self.pi_hash_versioned(version, self.pi_validium_v1().as_slice()) + } + (domain, stf_version) => { + unreachable!("unsupported version=({domain:?}, {stf_version:?})") + } + } + } + + fn validate(&self, _prev_pi: &Self, _version: Version) { unreachable!("bundle is the last layer and is not aggregated by any other circuit"); } } diff --git a/crates/types/base/src/public_inputs/chunk.rs b/crates/types/base/src/public_inputs/chunk.rs index fbb3f952..a89d5352 100644 --- a/crates/types/base/src/public_inputs/chunk.rs +++ b/crates/types/base/src/public_inputs/chunk.rs @@ -1,6 +1,7 @@ use crate::{ public_inputs::{ForkName, MultiVersionPublicInputs}, utils::keccak256, + version::{Domain, STFVersion, Version}, }; use alloy_primitives::{B256, U256}; @@ -126,6 +127,12 @@ pub struct ChunkInfo { /// The block contexts of the blocks in the chunk. #[rkyv()] pub block_ctxs: Vec, + /// The blockhash of the last block in the previous chunk. + #[rkyv()] + pub prev_blockhash: B256, + /// The blockhash of the last block in the current chunk. + #[rkyv()] + pub post_blockhash: B256, } impl ChunkInfo { @@ -188,9 +195,49 @@ impl ChunkInfo { .collect::>(), ) } + + /// Public input hash for a given chunk for L3 validium @ v1: + /// + /// keccak( + /// chain id || + /// prev state root || + /// post state root || + /// withdraw root || + /// tx data digest || + /// prev msg queue hash || + /// post msg queue hash || + /// initial block number || + /// block_ctx for block_ctx in block_ctxs || + /// prev blockhash || + /// post blockhash + /// ) + pub fn pi_hash_validium_v1(&self) -> B256 { + keccak256( + std::iter::empty() + .chain(&self.chain_id.to_be_bytes()) + .chain(self.prev_state_root.as_slice()) + .chain(self.post_state_root.as_slice()) + .chain(self.withdraw_root.as_slice()) + .chain(self.tx_data_digest.as_slice()) + .chain(self.prev_msg_queue_hash.as_slice()) + .chain(self.post_msg_queue_hash.as_slice()) + .chain(&self.initial_block_number.to_be_bytes()) + .chain( + self.block_ctxs + .iter() + .flat_map(|block_ctx| block_ctx.to_bytes()) + .collect::>() + .as_slice(), + ) + .chain(self.prev_blockhash.as_slice()) + .chain(self.post_blockhash.as_slice()) + .cloned() + .collect::>(), + ) + } } -pub type VersionedChunkInfo = (ChunkInfo, ForkName); +pub type VersionedChunkInfo = (ChunkInfo, Version); impl MultiVersionPublicInputs for ChunkInfo { /// Compute the public input hash for the chunk. @@ -208,22 +255,48 @@ impl MultiVersionPublicInputs for ChunkInfo { } } + /// Compute the public input hash for the chunk given the version tuple. + fn pi_hash_by_version(&self, version: Version) -> B256 { + match (version.domain, version.stf_version) { + (Domain::Scroll, STFVersion::V6) => self.pi_hash_by_fork(ForkName::EuclidV1), + (Domain::Scroll, STFVersion::V7) => self.pi_hash_by_fork(ForkName::EuclidV2), + (Domain::Scroll, STFVersion::V8) => self.pi_hash_by_fork(ForkName::Feynman), + (Domain::Validium, STFVersion::V1) => self.pi_hash_validium_v1(), + (domain, stf_version) => { + unreachable!("unsupported version=({domain:?}, {stf_version:?})") + } + } + } + /// Validate public inputs between 2 contiguous chunks. /// /// - chain id MUST match /// - state roots MUST be chained /// - L1 msg queue hash MUST be chained - fn validate(&self, prev_pi: &Self, fork_name: ForkName) { + /// + /// Furthermore, for validiums we must also chain the blockhashes. + fn validate(&self, prev_pi: &Self, version: Version) { assert_eq!(self.chain_id, prev_pi.chain_id); assert_eq!(self.prev_state_root, prev_pi.post_state_root); assert_eq!(self.prev_msg_queue_hash, prev_pi.post_msg_queue_hash); // message queue hash is used only after euclidv2 (da-codec@v7) - if fork_name == ForkName::EuclidV1 { + if version.fork == ForkName::EuclidV1 { assert_eq!(self.prev_msg_queue_hash, B256::ZERO); assert_eq!(prev_pi.prev_msg_queue_hash, B256::ZERO); assert_eq!(self.post_msg_queue_hash, B256::ZERO); assert_eq!(prev_pi.post_msg_queue_hash, B256::ZERO); } + + // blockhash is unused for scroll domain. + if version.domain == Domain::Scroll { + assert_eq!(self.prev_blockhash, B256::ZERO); + assert_eq!(self.post_blockhash, B256::ZERO); + } + + // blockhash chaining must be validated for validiums. + if version.domain == Domain::Validium { + assert_eq!(self.prev_blockhash, prev_pi.post_blockhash); + } } } diff --git a/crates/types/base/src/version.rs b/crates/types/base/src/version.rs new file mode 100644 index 00000000..2eb0a1cb --- /dev/null +++ b/crates/types/base/src/version.rs @@ -0,0 +1,175 @@ +//! Module includes various types and logic pertaining to the versioning system under Scroll's +//! proving system. +//! +//! In order to identify the appropriate EVM fork logic and codec version for the encoded data, we +//! make use of a versioning system specified by the tuple `(domain,stf_version)`. +//! +//! The [`Domain`] indicates the execution of "what" are we proving? +//! +//! The [`STFVersion`] indicates an incremental version used within that domain. +//! +//! The tuple `(domain,stf_version)` maps to a unique tuple `(fork,codec)` that tells us which EVM fork +//! logic and codec logic must be utilised to decode data and execute transactions that are being +//! proven. +//! +//! The version is a single byte that encodes the tuple `(domain,stf_version)` such that: +//! +//! | bit index | purpose | +//! |-----------|-------------| +//! | 0..=1 | domain | +//! | 2..=7 | stf_version | + +use crate::public_inputs::ForkName; + +/// Protocol `domain` in the protocol=(domain,version) tuple. +/// +/// Domain is represented using 2 bits, i.e. we can support at the most 4 domains as per the latest +/// codec. +#[derive(Clone, Copy, Debug, PartialEq)] +pub enum Domain { + /// Domain used for Scroll. + Scroll = 0, + /// Domain used for L3 validiums running on L2 Scroll. + Validium = 1, +} + +impl From for Domain { + fn from(value: u8) -> Self { + match value { + 0 => Self::Scroll, + 1 => Self::Validium, + value => unreachable!("unsupported domain={value}"), + } + } +} + +/// The state-transition-function's incremental version. +#[derive(Clone, Copy, Debug)] +pub enum STFVersion { + /// Validium@v1. + V1 = 1, + /// Scroll@v6. + V6 = 6, + /// Scroll@v7. + V7 = 7, + /// Scroll@v8. + V8 = 8, +} + +impl From for STFVersion { + fn from(value: u8) -> Self { + match value { + 1 => Self::V1, + 6 => Self::V6, + 7 => Self::V7, + 8 => Self::V8, + value => unreachable!("unsupported stf-version={value}"), + } + } +} + +/// The codec version. +#[derive(Clone, Copy)] +pub enum Codec { + /// da-codec@v6. + V6, + /// da-codec@v7. + V7, + /// da-codec@v8. + V8, + /// da-codec@v9. + V9, +} + +/// The number of bits used for [`STFVersion`]. +const N_BITS_STF_VERSION: u8 = 6; + +/// Mask and get the [`STFVersion`] from the version byte. +const MASK_STF_VERSION: u8 = 0b00111111; + +/// A fully parsed version that includes all necessary identifiers. +#[derive(Clone, Copy)] +pub struct Version { + /// Domain. + pub domain: Domain, + /// STF-version. + pub stf_version: STFVersion, + /// EVM fork name. + pub fork: ForkName, + /// DA-codec version. + pub codec: Codec, +} + +impl Version { + pub const fn as_version_byte(&self) -> u8 { + ((self.domain as u8) << N_BITS_STF_VERSION) + (self.stf_version as u8) + } + + pub const fn euclid_v1() -> Self { + Self { + domain: Domain::Scroll, + stf_version: STFVersion::V6, + fork: ForkName::EuclidV1, + codec: Codec::V6, + } + } + + pub const fn euclid_v2() -> Self { + Self { + domain: Domain::Scroll, + stf_version: STFVersion::V7, + fork: ForkName::EuclidV2, + codec: Codec::V7, + } + } + + pub const fn feynman() -> Self { + Self { + domain: Domain::Scroll, + stf_version: STFVersion::V8, + fork: ForkName::Feynman, + codec: Codec::V8, + } + } + + pub const fn validium_v1() -> Self { + Self { + domain: Domain::Validium, + stf_version: STFVersion::V1, + fork: ForkName::EuclidV2, + // TODO: update to feynman once latest testdata is obtained. + codec: Codec::V9, + } + } + + pub fn is_validium(&self) -> bool { + self.domain == Domain::Validium + } +} + +impl Default for Version { + fn default() -> Self { + Self::feynman() + } +} + +impl From for Version { + fn from(value: u8) -> Self { + let domain = Domain::from(value >> N_BITS_STF_VERSION); + let stf_version = STFVersion::from(value & MASK_STF_VERSION); + + match (domain, stf_version) { + (Domain::Scroll, STFVersion::V6) => Self::euclid_v1(), + (Domain::Scroll, STFVersion::V7) => Self::euclid_v2(), + (Domain::Scroll, STFVersion::V8) => Self::feynman(), + (Domain::Validium, STFVersion::V1) => Self::validium_v1(), + (domain, stf_version) => { + unreachable!("unsupported version=({domain:?}, {stf_version:?})") + } + } + } +} + +/// Version byte for Validium @ v1. +pub const VALIDIUM_V1: u8 = + ((Domain::Validium as u8) << N_BITS_STF_VERSION) + (STFVersion::V1 as u8); diff --git a/crates/types/batch/src/builder/mod.rs b/crates/types/batch/src/builder/mod.rs index 503b00df..822ea3f9 100644 --- a/crates/types/batch/src/builder/mod.rs +++ b/crates/types/batch/src/builder/mod.rs @@ -7,6 +7,8 @@ pub use v7::BatchInfoBuilderV7; pub mod v8; pub use v8::BatchInfoBuilderV8; +pub mod validium; + use types_base::public_inputs::{batch::BatchInfo, chunk::ChunkInfo}; use crate::{BatchHeader, BatchHeaderV6, BatchHeaderV7, BatchHeaderV8, Bytes48, payload::Payload}; diff --git a/crates/types/batch/src/builder/validium.rs b/crates/types/batch/src/builder/validium.rs new file mode 100644 index 00000000..7e4f4318 --- /dev/null +++ b/crates/types/batch/src/builder/validium.rs @@ -0,0 +1,52 @@ +use types_base::public_inputs::{batch::BatchInfo, chunk::ChunkInfo}; + +use crate::{ + header::{BatchHeader, ValidiumBatchHeader, validium::BatchHeaderValidium}, + payload::validium::{ValidiumEnvelopeV1, ValidiumPayloadV1}, +}; + +pub struct ValidiumBuilderArgs { + pub header: BatchHeaderValidium, + pub chunk_infos: Vec, + pub batch_bytes: Vec, +} + +impl ValidiumBuilderArgs { + pub fn new( + header: BatchHeaderValidium, + chunk_infos: Vec, + batch_bytes: Vec, + ) -> Self { + Self { + header, + chunk_infos, + batch_bytes, + } + } +} + +pub struct ValidiumBatchInfoBuilder; + +impl ValidiumBatchInfoBuilder { + pub fn build(args: ValidiumBuilderArgs) -> BatchInfo { + let envelope = ValidiumEnvelopeV1::from_bytes(args.batch_bytes.as_slice()); + let payload = ValidiumPayloadV1::from_envelope(&envelope); + + // Validate payload (batch data). + let (first_chunk, last_chunk) = payload.validate(&args.header, args.chunk_infos.as_slice()); + + // Additionally check that the batch's commitment field is set correctly. + assert_eq!(last_chunk.post_blockhash.to_vec(), args.header.commitment()); + + BatchInfo { + parent_state_root: first_chunk.prev_state_root, + parent_batch_hash: args.header.parent_batch_hash(), + state_root: last_chunk.post_state_root, + batch_hash: args.header.batch_hash(), + chain_id: last_chunk.chain_id, + withdraw_root: last_chunk.withdraw_root, + prev_msg_queue_hash: first_chunk.prev_msg_queue_hash, + post_msg_queue_hash: last_chunk.post_msg_queue_hash, + } + } +} diff --git a/crates/types/batch/src/header/mod.rs b/crates/types/batch/src/header/mod.rs index 84c368e0..1c8b8f04 100644 --- a/crates/types/batch/src/header/mod.rs +++ b/crates/types/batch/src/header/mod.rs @@ -6,6 +6,8 @@ pub mod v7; pub mod v8; +pub mod validium; + pub trait BatchHeader { /// The DA-codec version for the batch header. fn version(&self) -> u8; @@ -23,6 +25,11 @@ pub trait BatchHeader { fn blob_versioned_hash(&self) -> B256; } +pub trait ValidiumBatchHeader: BatchHeader { + /// The commitment attached to the batch header. + fn commitment(&self) -> Vec; +} + /// Reference header indicate the version of batch header base on which batch hash /// should be calculated. #[derive( @@ -42,4 +49,6 @@ pub enum ReferenceHeader { V7(v7::BatchHeaderV7), /// Represents DA-codec v8. V8(v8::BatchHeaderV8), + /// Represents batch header utilised in L3 validium. + Validium(validium::BatchHeaderValidium), } diff --git a/crates/types/batch/src/header/validium.rs b/crates/types/batch/src/header/validium.rs new file mode 100644 index 00000000..3cb54565 --- /dev/null +++ b/crates/types/batch/src/header/validium.rs @@ -0,0 +1,146 @@ +use alloy_primitives::B256; +use types_base::utils::keccak256; + +use super::{BatchHeader, ValidiumBatchHeader}; + +/// Batch header used in L3 validium. +#[derive( + Clone, + Copy, + Debug, + rkyv::Archive, + rkyv::Deserialize, + rkyv::Serialize, + serde::Deserialize, + serde::Serialize, +)] +#[rkyv(derive(Debug))] +pub enum BatchHeaderValidium { + /// L3 validium @ v1 batch header. + V1(BatchHeaderValidiumV1), +} + +/// Represents the batch header summarising a L3 validium batch. +#[derive( + Clone, + Copy, + Debug, + Default, + rkyv::Archive, + rkyv::Deserialize, + rkyv::Serialize, + serde::Deserialize, + serde::Serialize, +)] +#[rkyv(derive(Debug))] +pub struct BatchHeaderValidiumV1 { + /// The DA-codec version for the batch. + #[rkyv()] + pub version: u8, + /// The index of the batch + #[rkyv()] + pub batch_index: u64, + /// The parent batch hash + #[rkyv()] + pub parent_batch_hash: B256, + /// The state root after applying the batch. + #[rkyv()] + pub post_state_root: B256, + /// The withdraw root post the batch. + #[rkyv()] + pub withdraw_root: B256, + /// A commitment that binds the batch to its payload. It also serves provability based on the + /// finalised L2 data. + /// + /// We utilise the last L3 block's blockhash as commitment. + #[rkyv()] + pub commitment: B256, +} + +impl ValidiumBatchHeader for BatchHeaderValidium { + fn commitment(&self) -> Vec { + match self { + Self::V1(header) => header.commitment(), + } + } +} + +impl ValidiumBatchHeader for BatchHeaderValidiumV1 { + fn commitment(&self) -> Vec { + self.commitment.to_vec() + } +} + +impl BatchHeader for BatchHeaderValidium { + fn version(&self) -> u8 { + match self { + Self::V1(header) => header.version(), + } + } + + fn index(&self) -> u64 { + match self { + Self::V1(header) => header.index(), + } + } + + fn parent_batch_hash(&self) -> B256 { + match self { + Self::V1(header) => header.parent_batch_hash(), + } + } + + fn batch_hash(&self) -> B256 { + match self { + Self::V1(header) => header.batch_hash(), + } + } + + fn blob_versioned_hash(&self) -> B256 { + match self { + Self::V1(header) => header.blob_versioned_hash(), + } + } +} + +impl BatchHeader for BatchHeaderValidiumV1 { + fn version(&self) -> u8 { + self.version + } + + fn index(&self) -> u64 { + self.batch_index + } + + fn parent_batch_hash(&self) -> B256 { + self.parent_batch_hash + } + + /// Batch hash for Validium batch header v1: + /// + /// keccak( + /// version || + /// batch index || + /// parent batch hash || + /// post state root || + /// withdraw root || + /// commitment + /// ) + fn batch_hash(&self) -> B256 { + keccak256( + std::iter::empty() + .chain(vec![self.version].as_slice()) + .chain(self.batch_index.to_be_bytes().as_slice()) + .chain(self.parent_batch_hash.as_slice()) + .chain(self.post_state_root.as_slice()) + .chain(self.withdraw_root.as_slice()) + .chain(self.commitment.as_slice()) + .cloned() + .collect::>(), + ) + } + + fn blob_versioned_hash(&self) -> B256 { + B256::default() + } +} diff --git a/crates/types/batch/src/lib.rs b/crates/types/batch/src/lib.rs index c9c38dca..72be3988 100644 --- a/crates/types/batch/src/lib.rs +++ b/crates/types/batch/src/lib.rs @@ -4,6 +4,7 @@ pub use header::{ v6::{ArchivedBatchHeaderV6, BatchHeaderV6}, v7::{ArchivedBatchHeaderV7, BatchHeaderV7}, v8::{ArchivedBatchHeaderV8, BatchHeaderV8}, + validium::{BatchHeaderValidium, BatchHeaderValidiumV1}, }; mod payload; diff --git a/crates/types/batch/src/payload/mod.rs b/crates/types/batch/src/payload/mod.rs index 11b6e59f..88d58986 100644 --- a/crates/types/batch/src/payload/mod.rs +++ b/crates/types/batch/src/payload/mod.rs @@ -9,6 +9,8 @@ pub mod v7; pub mod v8; +pub mod validium; + /// The number data bytes we pack each BLS12-381 scalar into. The most-significant byte is 0. pub const N_DATA_BYTES_PER_COEFFICIENT: usize = 31; @@ -29,9 +31,9 @@ pub const DA_CODEC_VERSION_V7: u8 = 7; pub const DA_CODEC_VERSION_V8: u8 = 8; pub trait Envelope { - fn from_slice(blob_bytes: &[u8]) -> Self; + fn from_slice(bytes: &[u8]) -> Self; - fn challenge_digest(&self, blob_versioned_hash: B256) -> B256; + fn challenge_digest(&self, versioned_hash: B256) -> B256; } pub trait Payload { diff --git a/crates/types/batch/src/payload/v7.rs b/crates/types/batch/src/payload/v7.rs index ed1beb34..44252ebc 100644 --- a/crates/types/batch/src/payload/v7.rs +++ b/crates/types/batch/src/payload/v7.rs @@ -94,11 +94,11 @@ impl super::Envelope for GenericEnvelopeV7 { + /// The original envelope bytes supplied. + /// + /// Caching just for re-use later in challenge digest computation. + #[allow(dead_code)] + pub envelope_bytes: Vec, + /// The [`Version`][version] byte as per new versioning system. + /// + /// [version]: types_base::version::Version + pub version: u8, + /// A single byte boolean flag (value is 0 or 1) to denote whether or not the following + /// bytes represent a batch in its zstd-encoded or raw form. + pub is_encoded: u8, + /// The unpadded bytes that can be decoded to the [`ValidiumPayload`]. + pub unpadded_bytes: Vec, +} + +pub struct ValidiumPayload { + /// The [`Version`][version] byte as per new versioning system. + /// + /// [version]: types_base::version::Version + pub version: u8, + /// Message queue hash at the end of the previous validium batch. + pub prev_msg_queue_hash: B256, + /// Message queue hash at the end of the current validium batch. + pub post_msg_queue_hash: B256, + /// The block number of the first block in the validium batch. + pub initial_block_number: u64, + /// The number of blocks in the validium batch. + pub num_blocks: u16, + /// The block contexts of each block in the validium batch. + pub block_contexts: Vec, + /// The L3 tx data flattened over every tx in every block in the batch. + pub tx_data: Vec, +} + +impl ValidiumEnvelope { + pub fn from_bytes(bytes: &[u8]) -> Self { + // Check the version of the batch. + let version = bytes[0]; + assert_eq!(version, VERSION); + + // Calculate the unpadded size of the encoded payload. + let unpadded_size = + (bytes[1] as usize) * 256 * 256 + (bytes[2] as usize) * 256 + bytes[3] as usize; + + // Whether the envelope represents encoded payload or raw payload. + // + // Is a boolean. + let is_encoded = bytes[4]; + assert!(is_encoded <= 1); + + // The padded bytes are all 0s. + for &padded_byte in bytes.iter().skip(5 + unpadded_size) { + assert_eq!(padded_byte, 0); + } + + Self { + version, + is_encoded, + unpadded_bytes: bytes[5..(5 + unpadded_size)].to_vec(), + envelope_bytes: bytes.to_vec(), + } + } +} + +impl ValidiumPayload { + pub fn from_envelope(envelope: &ValidiumEnvelope) -> Self { + // Conditionally decode depending on the flag set in the envelope. + let payload_bytes = if envelope.is_encoded & 1 == 1 { + vm_zstd::process(&envelope.unpadded_bytes) + .expect("zstd decode should succeed") + .decoded_data + } else { + envelope.unpadded_bytes.to_vec() + }; + + // Sanity check on the payload size. + assert!(payload_bytes.len() >= INDEX_BLOCK_CTX); + let num_blocks = u16::from_be_bytes( + payload_bytes[INDEX_NUM_BLOCKS..INDEX_BLOCK_CTX] + .try_into() + .expect("should not fail"), + ); + assert!(payload_bytes.len() >= INDEX_BLOCK_CTX + ((num_blocks as usize) * SIZE_BLOCK_CTX)); + + // Deserialize the other fields. + let prev_msg_queue_hash = + B256::from_slice(&payload_bytes[INDEX_PREV_MSG_QUEUE_HASH..INDEX_POST_MSG_QUEUE_HASH]); + let post_msg_queue_hash = + B256::from_slice(&payload_bytes[INDEX_POST_MSG_QUEUE_HASH..INDEX_L2_BLOCK_NUM]); + let initial_block_number = u64::from_be_bytes( + payload_bytes[INDEX_L2_BLOCK_NUM..INDEX_NUM_BLOCKS] + .try_into() + .expect("should not fail"), + ); + + // Deserialize block contexts depending on the number of blocks in the batch. + let mut block_contexts = Vec::with_capacity(num_blocks as usize); + for i in 0..num_blocks { + let start = (i as usize) * SIZE_BLOCK_CTX + INDEX_BLOCK_CTX; + block_contexts.push(BlockContextV2::from( + &payload_bytes[start..(start + SIZE_BLOCK_CTX)], + )); + } + + // All remaining bytes are flattened L2 txs. + let tx_data = + payload_bytes[INDEX_BLOCK_CTX + ((num_blocks as usize) * SIZE_BLOCK_CTX)..].to_vec(); + + Self { + version: envelope.version, + prev_msg_queue_hash, + post_msg_queue_hash, + initial_block_number, + num_blocks, + block_contexts, + tx_data, + } + } + + pub fn validate<'a>( + &self, + header: &BatchHeaderValidium, + chunk_infos: &'a [ChunkInfo], + ) -> (&'a ChunkInfo, &'a ChunkInfo) { + // Get the first and last chunks' info, to construct the batch info. + let (first_chunk, last_chunk) = ( + chunk_infos.first().expect("at least one chunk in batch"), + chunk_infos.last().expect("at least one chunk in batch"), + ); + + // version from payload is what's present in the on-chain batch header + assert_eq!(self.version, header.version()); + + // number of blocks in the batch + assert_eq!( + usize::from(self.num_blocks), + chunk_infos + .iter() + .flat_map(|chunk_info| chunk_info.block_ctxs.as_slice()) + .count() + ); + assert_eq!(usize::from(self.num_blocks), self.block_contexts.len()); + + // the block number of the first block in the batch + assert_eq!(self.initial_block_number, first_chunk.initial_block_number); + + // prev message queue hash + assert_eq!( + self.prev_msg_queue_hash.0, + first_chunk.prev_msg_queue_hash.0 + ); + + // post message queue hash + assert_eq!(self.post_msg_queue_hash.0, last_chunk.post_msg_queue_hash.0); + + // for each chunk, the tx_data_digest, i.e. keccak digest of the rlp-encoded L2 tx bytes + // flattened over every tx in the chunk, should be re-computed and matched against the + // public input of the chunk-circuit. + // + // first check that the total size of rlp-encoded tx data flattened over all txs in the + // chunk is in fact the size available from the payload. + assert_eq!( + u64::try_from(self.tx_data.len()).expect("len(tx-data) is u64"), + chunk_infos + .iter() + .map(|chunk_info| chunk_info.tx_data_length) + .sum::(), + ); + let mut index: usize = 0; + for chunk_info in chunk_infos.iter() { + let chunk_size = chunk_info.tx_data_length as usize; + let chunk_tx_data_digest = + keccak256(&self.tx_data.as_slice()[index..(index + chunk_size)]); + assert_eq!(chunk_tx_data_digest.0, chunk_info.tx_data_digest.0); + index += chunk_size; + } + + // for each block in the batch, check that the block context matches what's provided as + // witness. + for (block_ctx, witness_block_ctx) in self.block_contexts.iter().zip( + chunk_infos + .iter() + .flat_map(|chunk_info| chunk_info.block_ctxs.as_slice()), + ) { + assert_eq!(block_ctx, witness_block_ctx); + } + + (first_chunk, last_chunk) + } +} + +pub type ValidiumEnvelopeV1 = ValidiumEnvelope<{ VALIDIUM_V1 }>; + +pub type ValidiumPayloadV1 = ValidiumPayload<{ VALIDIUM_V1 }>; diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index 76f83b64..2523772a 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -7,6 +7,7 @@ use crate::{ builder::{ BatchInfoBuilder, BatchInfoBuilderV6, BatchInfoBuilderV7, BatchInfoBuilderV8, BuilderArgsV6, BuilderArgsV7, BuilderArgsV8, + validium::{ValidiumBatchInfoBuilder, ValidiumBuilderArgs}, }, header::ReferenceHeader, }; @@ -69,6 +70,9 @@ pub struct PointEvalWitness { )] #[rkyv(derive(Debug))] pub struct BatchWitness { + /// The version byte as per [version][types_base::version]. + #[rkyv()] + pub version: u8, /// Flattened root proofs from all chunks in the batch. #[rkyv()] pub chunk_proofs: Vec, @@ -78,8 +82,11 @@ pub struct BatchWitness { /// Blob bytes. #[rkyv()] pub blob_bytes: Vec, - /// Witness for point evaluation - pub point_eval_witness: PointEvalWitness, + /// Witness for point evaluation. + /// + /// Optional field as some domains (for eg. Validium) may not utilise EIP-4844 for DA, + /// in case of which there is no point-eval witness. + pub point_eval_witness: Option, /// Header for reference. #[rkyv()] pub reference_header: ReferenceHeader, @@ -96,7 +103,7 @@ impl ProofCarryingWitness for BatchWitness { impl From<&BatchWitness> for BatchInfo { fn from(witness: &BatchWitness) -> Self { - let chunk_infos: Vec = witness.chunk_infos.to_vec(); + let chunk_infos = witness.chunk_infos.to_vec(); match &witness.reference_header { ReferenceHeader::V6(header) => { @@ -110,25 +117,36 @@ impl From<&BatchWitness> for BatchInfo { BatchInfoBuilderV6::build(args) } ReferenceHeader::V7(header) => { + let point_eval_witness = witness + .point_eval_witness + .as_ref() + .expect("point_eval_witness missing for header::v7"); let args = BuilderArgsV7 { header: *header, chunk_infos, blob_bytes: witness.blob_bytes.to_vec(), - kzg_commitment: Some(witness.point_eval_witness.kzg_commitment), - kzg_proof: Some(witness.point_eval_witness.kzg_proof), + kzg_commitment: Some(point_eval_witness.kzg_commitment), + kzg_proof: Some(point_eval_witness.kzg_proof), }; BatchInfoBuilderV7::build(args) } ReferenceHeader::V8(header) => { + let point_eval_witness = witness + .point_eval_witness + .as_ref() + .expect("point_eval_witness missing for header::v8"); let args = BuilderArgsV8 { header: *header, chunk_infos, blob_bytes: witness.blob_bytes.to_vec(), - kzg_commitment: Some(witness.point_eval_witness.kzg_commitment), - kzg_proof: Some(witness.point_eval_witness.kzg_proof), + kzg_commitment: Some(point_eval_witness.kzg_commitment), + kzg_proof: Some(point_eval_witness.kzg_proof), }; BatchInfoBuilderV8::build(args) } + ReferenceHeader::Validium(header) => ValidiumBatchInfoBuilder::build( + ValidiumBuilderArgs::new(*header, chunk_infos, witness.blob_bytes.to_vec()), + ), } } } diff --git a/crates/types/bundle/src/witness.rs b/crates/types/bundle/src/witness.rs index 0d97f4e5..5e89cdad 100644 --- a/crates/types/bundle/src/witness.rs +++ b/crates/types/bundle/src/witness.rs @@ -16,6 +16,9 @@ use types_base::{ )] #[rkyv(derive(Debug))] pub struct BundleWitness { + /// The version byte as per [version][types_base::version]. + #[rkyv()] + pub version: u8, /// Batch proofs being aggregated in the bundle. #[rkyv()] pub batch_proofs: Vec, diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index 6c0a4207..0e4ced95 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -72,6 +72,8 @@ pub fn execute(witness: ChunkWitness) -> Result { prev_msg_queue_hash: witness.prev_msg_queue_hash, post_msg_queue_hash, block_ctxs: blocks.iter().map(block_to_context).collect(), + prev_blockhash: B256::default(), + post_blockhash: B256::default(), }; // println!("chunk_info = {}", chunk_info); diff --git a/crates/types/chunk/src/types.rs b/crates/types/chunk/src/types.rs index a22b3707..30c8f295 100644 --- a/crates/types/chunk/src/types.rs +++ b/crates/types/chunk/src/types.rs @@ -205,7 +205,7 @@ impl BlockExt for RecoveredBlock { if let Some((txs, secret_key)) = validium_txs { for (validium_tx, tx_in_block) in txs.iter().zip_eq(self.l1_txs_iter()) { - match validium::decrypt(&validium_tx, secret_key) { + match validium::decrypt(validium_tx, secret_key) { Ok(decrypted) => { assert_eq!(decrypted, *tx_in_block); } diff --git a/crates/types/chunk/src/types/validium.rs b/crates/types/chunk/src/types/validium.rs index ade303ec..32b4e849 100644 --- a/crates/types/chunk/src/types/validium.rs +++ b/crates/types/chunk/src/types/validium.rs @@ -66,7 +66,7 @@ fn decrypt_data(data: &Bytes, secret_key: &SecretKey) -> Result, /// The on-chain rolling L1 message queue hash before enqueueing any L1 msg tx from the chunk. @@ -65,14 +68,16 @@ pub struct ChunkDetails { impl ChunkWitness { pub fn new_scroll( + version: u8, blocks: &[BlockWitness], prev_msg_queue_hash: B256, fork_name: ForkName, ) -> Self { - Self::new(blocks, prev_msg_queue_hash, fork_name, None) + Self::new(version, blocks, prev_msg_queue_hash, fork_name, None) } pub fn new_validium( + version: u8, blocks: &[BlockWitness], prev_msg_queue_hash: B256, fork_name: ForkName, @@ -80,6 +85,7 @@ impl ChunkWitness { secret_key: SecretKey, ) -> Self { Self::new( + version, blocks, prev_msg_queue_hash, fork_name, @@ -91,6 +97,7 @@ impl ChunkWitness { } pub fn new( + version: u8, blocks: &[BlockWitness], prev_msg_queue_hash: B256, fork_name: ForkName, @@ -129,6 +136,7 @@ impl ChunkWitness { .collect(); Self { + version, blocks, prev_msg_queue_hash, fork_name, @@ -153,6 +161,10 @@ impl ChunkWitness { total_gas_used, } } + + pub fn version(&self) -> Version { + Version::from(self.version) + } } impl TryFrom for ChunkInfo { From b9465b41fd77cd5fac7a487be11fb2f17d5c23ad Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Wed, 3 Sep 2025 19:38:19 +0800 Subject: [PATCH 48/84] clean --- Cargo.lock | 451 +++++++++------------------------- crates/prover/Cargo.toml | 2 +- crates/types/chunk/Cargo.toml | 2 +- 3 files changed, 117 insertions(+), 338 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7b2ada02..d6e44831 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2481,7 +2481,7 @@ dependencies = [ "rand_core 0.6.4", "rayon", "serde", - "serde_arrays 0.1.0", + "serde_arrays", "sha2 0.10.9", "static_assertions", "subtle", @@ -2509,7 +2509,7 @@ dependencies = [ "rand_core 0.6.4", "rayon", "serde", - "serde_arrays 0.1.0", + "serde_arrays", "sha2 0.10.9", "static_assertions", "subtle", @@ -2856,15 +2856,6 @@ dependencies = [ "either", ] -[[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" @@ -2976,20 +2967,6 @@ dependencies = [ "sha3-asm", ] -[[package]] -name = "kzg-rs" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9201effeea3fcc93b587904ae2df9ce97e433184b9d6d299e9ebc9830a546636" -dependencies = [ - "ff 0.13.1", - "hex", - "serde_arrays 0.2.0", - "sha2 0.10.9", - "sp1_bls12_381", - "spin", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -3805,8 +3782,8 @@ dependencies = [ "openvm-poseidon2-air", "openvm-stark-backend", "openvm-stark-sdk", - "p3-baby-bear 0.1.0", - "p3-field 0.1.0", + "p3-baby-bear", + "p3-field", "rand 0.8.5", "rustc-hash 2.1.1", "serde", @@ -3886,15 +3863,15 @@ dependencies = [ "openvm-cuda-common", "openvm-stark-backend", "openvm-stark-sdk", - "p3-baby-bear 0.1.0", + "p3-baby-bear", "p3-commit", - "p3-dft 0.1.0", - "p3-field 0.1.0", + "p3-dft", + "p3-field", "p3-fri", - "p3-matrix 0.1.0", + "p3-matrix", "p3-merkle-tree", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-symmetric", + "p3-util", "rustc-hash 2.1.1", "serde", "serde_json", @@ -4193,7 +4170,7 @@ dependencies = [ "openvm-rv32im-transpiler", "openvm-stark-backend", "openvm-stark-sdk", - "p3-field 0.1.0", + "p3-field", "rand 0.8.5", "serde", "static_assertions", @@ -4247,10 +4224,10 @@ dependencies = [ "openvm-native-compiler-derive", "openvm-stark-backend", "openvm-stark-sdk", - "p3-dft 0.1.0", + "p3-dft", "p3-fri", "p3-merkle-tree", - "p3-symmetric 0.1.0", + "p3-symmetric", "rand 0.8.5", "serde", "serde_json", @@ -4266,7 +4243,7 @@ source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f736 dependencies = [ "openvm-instructions", "openvm-transpiler", - "p3-field 0.1.0", + "p3-field", ] [[package]] @@ -4411,9 +4388,9 @@ dependencies = [ "openvm-stark-backend", "openvm-stark-sdk", "p3-monty-31", - "p3-poseidon2 0.1.0", + "p3-poseidon2", "p3-poseidon2-air", - "p3-symmetric 0.1.0", + "p3-symmetric", "rand 0.8.5", "zkhash", ] @@ -4468,7 +4445,7 @@ version = "1.4.0-rc.4" source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" dependencies = [ "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "p3-field 0.1.0", + "p3-field", "strum_macros 0.26.4", ] @@ -4478,7 +4455,7 @@ version = "1.4.0" source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?branch=main)", - "p3-field 0.1.0", + "p3-field", "strum_macros 0.26.4", ] @@ -4645,11 +4622,11 @@ dependencies = [ "p3-air", "p3-challenger", "p3-commit", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", "p3-uni-stark", - "p3-util 0.1.0", + "p3-util", "rayon", "rustc-hash 2.1.1", "serde", @@ -4671,18 +4648,18 @@ dependencies = [ "metrics-tracing-context", "metrics-util", "openvm-stark-backend", - "p3-baby-bear 0.1.0", + "p3-baby-bear", "p3-blake3", "p3-bn254-fr", - "p3-dft 0.1.0", + "p3-dft", "p3-fri", "p3-goldilocks", "p3-keccak", "p3-koala-bear", "p3-merkle-tree", "p3-poseidon", - "p3-poseidon2 0.1.0", - "p3-symmetric 0.1.0", + "p3-poseidon2", + "p3-symmetric", "rand 0.8.5", "serde", "serde_json", @@ -4762,8 +4739,8 @@ name = "p3-air" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field 0.1.0", - "p3-matrix 0.1.0", + "p3-field", + "p3-matrix", ] [[package]] @@ -4771,26 +4748,11 @@ name = "p3-baby-bear" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field 0.1.0", - "p3-mds 0.1.0", + "p3-field", + "p3-mds", "p3-monty-31", - "p3-poseidon2 0.1.0", - "p3-symmetric 0.1.0", - "rand 0.8.5", - "serde", -] - -[[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 0.2.3-succinct", - "p3-mds 0.2.3-succinct", - "p3-poseidon2 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", + "p3-poseidon2", + "p3-symmetric", "rand 0.8.5", "serde", ] @@ -4801,8 +4763,8 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "blake3", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-symmetric", + "p3-util", ] [[package]] @@ -4813,9 +4775,9 @@ dependencies = [ "ff 0.13.1", "halo2curves", "num-bigint 0.4.6", - "p3-field 0.1.0", - "p3-poseidon2 0.1.0", - "p3-symmetric 0.1.0", + "p3-field", + "p3-poseidon2", + "p3-symmetric", "rand 0.8.5", "serde", ] @@ -4825,10 +4787,10 @@ name = "p3-challenger" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", "tracing", ] @@ -4839,10 +4801,10 @@ source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62c dependencies = [ "itertools 0.14.0", "p3-challenger", - "p3-dft 0.1.0", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-util 0.1.0", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-util", "serde", ] @@ -4852,23 +4814,10 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", - "tracing", -] - -[[package]] -name = "p3-dft" -version = "0.2.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46414daedd796f1eefcdc1811c0484e4bced5729486b6eaba9521c572c76761a" -dependencies = [ - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", "tracing", ] @@ -4882,27 +4831,13 @@ dependencies = [ "num-integer", "num-traits", "nums", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", + "p3-maybe-rayon", + "p3-util", "rand 0.8.5", "serde", "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 0.2.3-succinct", - "rand 0.8.5", - "serde", -] - [[package]] name = "p3-fri" version = "0.1.0" @@ -4911,12 +4846,12 @@ dependencies = [ "itertools 0.14.0", "p3-challenger", "p3-commit", - "p3-dft 0.1.0", - "p3-field 0.1.0", + "p3-dft", + "p3-field", "p3-interpolation", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", "rand 0.8.5", "serde", "tracing", @@ -4928,13 +4863,13 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "num-bigint 0.4.6", - "p3-dft 0.1.0", - "p3-field 0.1.0", - "p3-mds 0.1.0", + "p3-dft", + "p3-field", + "p3-mds", "p3-poseidon", - "p3-poseidon2 0.1.0", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-poseidon2", + "p3-symmetric", + "p3-util", "rand 0.8.5", "serde", ] @@ -4944,10 +4879,10 @@ name = "p3-interpolation" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", ] [[package]] @@ -4956,9 +4891,9 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-field 0.1.0", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-symmetric", + "p3-util", "tiny-keccak", ] @@ -4968,10 +4903,10 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "p3-air", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", "rand 0.8.5", "tracing", ] @@ -4981,11 +4916,11 @@ name = "p3-koala-bear" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field 0.1.0", - "p3-mds 0.1.0", + "p3-field", + "p3-mds", "p3-monty-31", - "p3-poseidon2 0.1.0", - "p3-symmetric 0.1.0", + "p3-poseidon2", + "p3-symmetric", "rand 0.8.5", "serde", ] @@ -4996,30 +4931,15 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-field 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-maybe-rayon", + "p3-util", "rand 0.8.5", "serde", "tracing", "transpose", ] -[[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 0.2.3-succinct", - "p3-maybe-rayon 0.2.3-succinct", - "p3-util 0.2.3-succinct", - "rand 0.8.5", - "serde", - "tracing", -] - [[package]] name = "p3-maybe-rayon" version = "0.1.0" @@ -5028,38 +4948,17 @@ dependencies = [ "rayon", ] -[[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.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-dft 0.1.0", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", - "rand 0.8.5", -] - -[[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 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-matrix 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", - "p3-util 0.2.3-succinct", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", "rand 0.8.5", ] @@ -5070,11 +4969,11 @@ source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62c dependencies = [ "itertools 0.14.0", "p3-commit", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", "rand 0.8.5", "serde", "tracing", @@ -5087,14 +4986,14 @@ source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62c dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", - "p3-dft 0.1.0", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-mds 0.1.0", - "p3-poseidon2 0.1.0", - "p3-symmetric 0.1.0", - "p3-util 0.1.0", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "p3-util", "rand 0.8.5", "serde", "tracing", @@ -5106,9 +5005,9 @@ name = "p3-poseidon" version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ - "p3-field 0.1.0", - "p3-mds 0.1.0", - "p3-symmetric 0.1.0", + "p3-field", + "p3-mds", + "p3-symmetric", "rand 0.8.5", ] @@ -5118,24 +5017,10 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "gcd", - "p3-field 0.1.0", - "p3-mds 0.1.0", - "p3-symmetric 0.1.0", - "rand 0.8.5", -] - -[[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 0.2.3-succinct", - "p3-mds 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", + "p3-field", + "p3-mds", + "p3-symmetric", "rand 0.8.5", - "serde", ] [[package]] @@ -5144,11 +5029,11 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "p3-air", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-poseidon2 0.1.0", - "p3-util 0.1.0", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-poseidon2", + "p3-util", "rand 0.8.5", "tikv-jemallocator", "tracing", @@ -5160,18 +5045,7 @@ version = "0.1.0" source = "git+https://github.com/Plonky3/Plonky3.git?rev=539bbc84085efb609f4f62cb03cf49588388abdb#539bbc84085efb609f4f62cb03cf49588388abdb" dependencies = [ "itertools 0.14.0", - "p3-field 0.1.0", - "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 0.2.3-succinct", + "p3-field", "serde", ] @@ -5184,11 +5058,11 @@ dependencies = [ "p3-air", "p3-challenger", "p3-commit", - "p3-dft 0.1.0", - "p3-field 0.1.0", - "p3-matrix 0.1.0", - "p3-maybe-rayon 0.1.0", - "p3-util 0.1.0", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", "serde", "tracing", ] @@ -5201,15 +5075,6 @@ dependencies = [ "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.22.0" @@ -6522,27 +6387,6 @@ dependencies = [ "sha2 0.10.9", ] -[[package]] -name = "revm-precompile" -version = "21.0.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v74#774616019e9562b12cbe1c3f1cdd110793f8084c" -dependencies = [ - "ark-bls12-381", - "ark-bn254", - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "aurora-engine-modexp", - "cfg-if", - "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", - "kzg-rs", - "libsecp256k1", - "once_cell", - "revm-primitives 19.1.0", - "ripemd", - "sha2 0.10.9", -] - [[package]] name = "revm-precompile" version = "25.0.0" @@ -6580,15 +6424,6 @@ dependencies = [ "serde", ] -[[package]] -name = "revm-primitives" -version = "19.1.0" -source = "git+https://github.com/scroll-tech/revm?branch=feat%2Freth-v74#774616019e9562b12cbe1c3f1cdd110793f8084c" -dependencies = [ - "alloy-primitives", - "num_enum", -] - [[package]] name = "revm-primitives" version = "20.1.0" @@ -7224,7 +7059,6 @@ dependencies = [ "alloy-sol-types", "ecies", "itertools 0.14.0", - "revm-precompile 21.0.0", "rkyv", "sbv-core", "sbv-helpers", @@ -7397,15 +7231,6 @@ dependencies = [ "serde", ] -[[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_derive" version = "1.0.219" @@ -7639,52 +7464,6 @@ dependencies = [ "snark-verifier", ] -[[package]] -name = "sp1-lib" -version = "5.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1fe81b6f87134f9170cb642f948ae41e0ee1cd3785e0cb665add5b67106d1a" -dependencies = [ - "bincode 1.3.3", - "serde", - "sp1-primitives", -] - -[[package]] -name = "sp1-primitives" -version = "5.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dddd8d022840c1c500e0d7f82e9b9cf080b7dabd469f06b394010e6a594f692b" -dependencies = [ - "bincode 1.3.3", - "blake3", - "cfg-if", - "hex", - "lazy_static", - "num-bigint 0.4.6", - "p3-baby-bear 0.2.3-succinct", - "p3-field 0.2.3-succinct", - "p3-poseidon2 0.2.3-succinct", - "p3-symmetric 0.2.3-succinct", - "serde", - "sha2 0.10.9", -] - -[[package]] -name = "sp1_bls12_381" -version = "0.8.0-sp1-5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac255e1704ebcdeec5e02f6a0ebc4d2e9e6b802161938330b6810c13a610c583" -dependencies = [ - "cfg-if", - "ff 0.13.1", - "group 0.13.0", - "pairing 0.23.0", - "rand_core 0.6.4", - "sp1-lib", - "subtle", -] - [[package]] name = "spin" version = "0.9.8" diff --git a/crates/prover/Cargo.toml b/crates/prover/Cargo.toml index 0aba1465..01262aa4 100644 --- a/crates/prover/Cargo.toml +++ b/crates/prover/Cargo.toml @@ -25,7 +25,7 @@ hex.workspace = true serde = "1.0" serde_json = "1.0" serde_stacker = "0.1" -thiserror = "2.0" +thiserror.workspace = true toml = "0.8" cudarc = { version = "0.9", optional = true } diff --git a/crates/types/chunk/Cargo.toml b/crates/types/chunk/Cargo.toml index ecb51e94..b184445d 100644 --- a/crates/types/chunk/Cargo.toml +++ b/crates/types/chunk/Cargo.toml @@ -12,7 +12,7 @@ alloy-primitives = { workspace = true, features = ["native-keccak"] } alloy-sol-types.workspace = true ecies.workspace = true itertools.workspace = true -revm-precompile = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v74", default-features=false, features = ["kzg-rs", "libsecp256k1"] } +#revm-precompile = { git = "https://github.com/scroll-tech/revm", branch = "feat/reth-v74", default-features=false, features = ["kzg-rs", "libsecp256k1"] } rkyv.workspace = true sbv-helpers.workspace = true sbv-core = { workspace = true } From 2e79639244d328b93d4a10a9376967fb03e2bb14 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 4 Sep 2025 09:38:58 +0800 Subject: [PATCH 49/84] unify openvm to v1.4.0 --- Cargo.lock | 472 ++++++------------ Cargo.toml | 54 +- .../circuits/chunk-circuit/.cargo/config.toml | 4 +- 3 files changed, 183 insertions(+), 347 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d6e44831..0af8bb39 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -381,7 +381,7 @@ dependencies = [ "alloy-rlp", "alloy-serde 1.0.24", "alloy-sol-types", - "itertools 0.13.0", + "itertools 0.14.0", "serde", "serde_json", "serde_with", @@ -1433,7 +1433,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -1998,7 +1998,7 @@ dependencies = [ [[package]] name = "encoder-standard" version = "0.1.0" -source = "git+https://github.com/scroll-tech/da-codec#cddc263e5ef69917b925bbdba3be36503612d044" +source = "git+https://github.com/scroll-tech/da-codec#b4cce5c5d17845fc6f4f6ec422d559470a09dca9" dependencies = [ "zstd", ] @@ -2075,7 +2075,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.52.0", ] [[package]] @@ -2932,7 +2932,7 @@ dependencies = [ [[package]] name = "k256" version = "0.13.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "ecdsa", "elliptic-curve", @@ -2940,11 +2940,11 @@ dependencies = [ "hex-literal", "num-bigint 0.4.6", "once_cell", - "openvm 1.4.0-rc.4", - "openvm-algebra-guest 1.4.0-rc.4", - "openvm-algebra-moduli-macros 1.4.0-rc.4", - "openvm-ecc-guest 1.4.0-rc.4", - "openvm-ecc-sw-macros 1.4.0-rc.4", + "openvm", + "openvm-algebra-guest", + "openvm-algebra-moduli-macros", + "openvm-ecc-guest", + "openvm-ecc-sw-macros", "serde", ] @@ -3493,36 +3493,23 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openvm" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" +version = "1.4.0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "bytemuck", "getrandom 0.2.16", "getrandom 0.3.3", "num-bigint 0.4.6", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "openvm-platform 1.4.0-rc.4", - "openvm-rv32im-guest 1.4.0-rc.4", - "serde", -] - -[[package]] -name = "openvm" -version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" -dependencies = [ - "bytemuck", - "num-bigint 0.4.6", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?branch=main)", - "openvm-platform 1.4.0", - "openvm-rv32im-guest 1.4.0", + "openvm-custom-insn", + "openvm-platform", + "openvm-rv32im-guest", "serde", ] [[package]] name = "openvm-algebra-circuit" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -3551,78 +3538,40 @@ dependencies = [ "strum 0.26.3", ] -[[package]] -name = "openvm-algebra-complex-macros" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" -dependencies = [ - "openvm-macros-common 1.4.0-rc.4", - "quote", - "syn 2.0.106", -] - [[package]] name = "openvm-algebra-complex-macros" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ - "openvm-macros-common 1.4.0", + "openvm-macros-common", "quote", "syn 2.0.106", ] -[[package]] -name = "openvm-algebra-guest" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" -dependencies = [ - "halo2curves-axiom", - "num-bigint 0.4.6", - "once_cell", - "openvm-algebra-complex-macros 1.4.0-rc.4", - "openvm-algebra-moduli-macros 1.4.0-rc.4", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "openvm-rv32im-guest 1.4.0-rc.4", - "serde-big-array", - "strum_macros 0.26.4", -] - [[package]] name = "openvm-algebra-guest" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "halo2curves-axiom", "num-bigint 0.4.6", "once_cell", - "openvm-algebra-complex-macros 1.4.0", - "openvm-algebra-moduli-macros 1.4.0", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?branch=main)", - "openvm-rv32im-guest 1.4.0", + "openvm-algebra-complex-macros", + "openvm-algebra-moduli-macros", + "openvm-custom-insn", + "openvm-rv32im-guest", "serde-big-array", "strum_macros 0.26.4", ] -[[package]] -name = "openvm-algebra-moduli-macros" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" -dependencies = [ - "num-bigint 0.4.6", - "num-prime", - "openvm-macros-common 1.4.0-rc.4", - "quote", - "syn 2.0.106", -] - [[package]] name = "openvm-algebra-moduli-macros" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "num-bigint 0.4.6", "num-prime", - "openvm-macros-common 1.4.0", + "openvm-macros-common", "quote", "syn 2.0.106", ] @@ -3630,9 +3579,9 @@ dependencies = [ [[package]] name = "openvm-algebra-transpiler" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ - "openvm-algebra-guest 1.4.0", + "openvm-algebra-guest", "openvm-instructions", "openvm-instructions-derive", "openvm-stark-backend", @@ -3644,7 +3593,7 @@ dependencies = [ [[package]] name = "openvm-benchmarks-prove" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "clap", "derive_more 1.0.0", @@ -3671,7 +3620,7 @@ dependencies = [ [[package]] name = "openvm-benchmarks-utils" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "cargo_metadata 0.18.1", "clap", @@ -3686,7 +3635,7 @@ dependencies = [ [[package]] name = "openvm-bigint-circuit" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -3709,30 +3658,21 @@ dependencies = [ "serde", ] -[[package]] -name = "openvm-bigint-guest" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" -dependencies = [ - "openvm-platform 1.4.0-rc.4", - "strum_macros 0.26.4", -] - [[package]] name = "openvm-bigint-guest" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ - "openvm-platform 1.4.0", + "openvm-platform", "strum_macros 0.26.4", ] [[package]] name = "openvm-bigint-transpiler" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ - "openvm-bigint-guest 1.4.0", + "openvm-bigint-guest", "openvm-instructions", "openvm-instructions-derive", "openvm-rv32im-transpiler", @@ -3745,11 +3685,11 @@ dependencies = [ [[package]] name = "openvm-build" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "cargo_metadata 0.18.1", "eyre", - "openvm-platform 1.4.0", + "openvm-platform", "serde", "serde_json", ] @@ -3757,7 +3697,7 @@ dependencies = [ [[package]] name = "openvm-circuit" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "backtrace", "cfg-if", @@ -3796,7 +3736,7 @@ dependencies = [ [[package]] name = "openvm-circuit-derive" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "itertools 0.14.0", "proc-macro2", @@ -3807,7 +3747,7 @@ dependencies = [ [[package]] name = "openvm-circuit-primitives" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "derive-new 0.6.0", "itertools 0.14.0", @@ -3825,7 +3765,7 @@ dependencies = [ [[package]] name = "openvm-circuit-primitives-derive" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "itertools 0.14.0", "quote", @@ -3835,7 +3775,7 @@ dependencies = [ [[package]] name = "openvm-continuations" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "derivative", "openvm-circuit", @@ -3904,17 +3844,7 @@ dependencies = [ [[package]] name = "openvm-custom-insn" version = "0.1.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "openvm-custom-insn" -version = "0.1.0" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "proc-macro2", "quote", @@ -3924,7 +3854,7 @@ dependencies = [ [[package]] name = "openvm-ecc-circuit" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -3953,60 +3883,31 @@ dependencies = [ "strum 0.26.3", ] -[[package]] -name = "openvm-ecc-guest" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" -dependencies = [ - "ecdsa", - "elliptic-curve", - "group 0.13.0", - "halo2curves-axiom", - "once_cell", - "openvm 1.4.0-rc.4", - "openvm-algebra-guest 1.4.0-rc.4", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "openvm-ecc-sw-macros 1.4.0-rc.4", - "openvm-rv32im-guest 1.4.0-rc.4", - "serde", - "strum_macros 0.26.4", -] - [[package]] name = "openvm-ecc-guest" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "ecdsa", "elliptic-curve", "group 0.13.0", "halo2curves-axiom", "once_cell", - "openvm 1.4.0", - "openvm-algebra-guest 1.4.0", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?branch=main)", - "openvm-ecc-sw-macros 1.4.0", - "openvm-rv32im-guest 1.4.0", + "openvm", + "openvm-algebra-guest", + "openvm-custom-insn", + "openvm-ecc-sw-macros", + "openvm-rv32im-guest", "serde", "strum_macros 0.26.4", ] -[[package]] -name = "openvm-ecc-sw-macros" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" -dependencies = [ - "openvm-macros-common 1.4.0-rc.4", - "quote", - "syn 2.0.106", -] - [[package]] name = "openvm-ecc-sw-macros" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ - "openvm-macros-common 1.4.0", + "openvm-macros-common", "quote", "syn 2.0.106", ] @@ -4014,9 +3915,9 @@ dependencies = [ [[package]] name = "openvm-ecc-transpiler" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ - "openvm-ecc-guest 1.4.0", + "openvm-ecc-guest", "openvm-instructions", "openvm-instructions-derive", "openvm-stark-backend", @@ -4028,7 +3929,7 @@ dependencies = [ [[package]] name = "openvm-instructions" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "backtrace", "derive-new 0.6.0", @@ -4045,7 +3946,7 @@ dependencies = [ [[package]] name = "openvm-instructions-derive" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "quote", "syn 2.0.106", @@ -4054,7 +3955,7 @@ dependencies = [ [[package]] name = "openvm-keccak256-circuit" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4079,48 +3980,32 @@ dependencies = [ "tiny-keccak", ] -[[package]] -name = "openvm-keccak256-guest" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" -dependencies = [ - "openvm-platform 1.4.0-rc.4", -] - [[package]] name = "openvm-keccak256-guest" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ - "openvm-platform 1.4.0", + "openvm-platform", ] [[package]] name = "openvm-keccak256-transpiler" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-keccak256-guest 1.4.0", + "openvm-keccak256-guest", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", "strum 0.26.3", ] -[[package]] -name = "openvm-macros-common" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" -dependencies = [ - "syn 2.0.106", -] - [[package]] name = "openvm-macros-common" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "syn 2.0.106", ] @@ -4128,7 +4013,7 @@ dependencies = [ [[package]] name = "openvm-mod-circuit-builder" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "cuda-runtime-sys", "itertools 0.14.0", @@ -4149,7 +4034,7 @@ dependencies = [ [[package]] name = "openvm-native-circuit" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4180,7 +4065,7 @@ dependencies = [ [[package]] name = "openvm-native-compiler" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "backtrace", "itertools 0.14.0", @@ -4203,7 +4088,7 @@ dependencies = [ [[package]] name = "openvm-native-compiler-derive" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "quote", "syn 2.0.106", @@ -4212,7 +4097,7 @@ dependencies = [ [[package]] name = "openvm-native-recursion" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "cfg-if", "itertools 0.14.0", @@ -4239,7 +4124,7 @@ dependencies = [ [[package]] name = "openvm-native-transpiler" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "openvm-instructions", "openvm-transpiler", @@ -4248,8 +4133,8 @@ dependencies = [ [[package]] name = "openvm-pairing" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" +version = "1.4.0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "group 0.13.0", "halo2curves-axiom", @@ -4257,16 +4142,16 @@ dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", - "openvm 1.4.0-rc.4", - "openvm-algebra-complex-macros 1.4.0-rc.4", - "openvm-algebra-guest 1.4.0-rc.4", - "openvm-algebra-moduli-macros 1.4.0-rc.4", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "openvm-ecc-guest 1.4.0-rc.4", - "openvm-ecc-sw-macros 1.4.0-rc.4", - "openvm-pairing-guest 1.4.0-rc.4", - "openvm-platform 1.4.0-rc.4", - "openvm-rv32im-guest 1.4.0-rc.4", + "openvm", + "openvm-algebra-complex-macros", + "openvm-algebra-guest", + "openvm-algebra-moduli-macros", + "openvm-custom-insn", + "openvm-ecc-guest", + "openvm-ecc-sw-macros", + "openvm-pairing-guest", + "openvm-platform", + "openvm-rv32im-guest", "rand 0.8.5", "serde", ] @@ -4274,7 +4159,7 @@ dependencies = [ [[package]] name = "openvm-pairing-circuit" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4289,10 +4174,10 @@ dependencies = [ "openvm-circuit-primitives", "openvm-cuda-backend", "openvm-ecc-circuit", - "openvm-ecc-guest 1.4.0", + "openvm-ecc-guest", "openvm-instructions", "openvm-mod-circuit-builder", - "openvm-pairing-guest 1.4.0", + "openvm-pairing-guest", "openvm-pairing-transpiler", "openvm-rv32im-circuit", "openvm-stark-backend", @@ -4302,31 +4187,10 @@ dependencies = [ "strum 0.26.3", ] -[[package]] -name = "openvm-pairing-guest" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" -dependencies = [ - "halo2curves-axiom", - "hex-literal", - "itertools 0.14.0", - "lazy_static", - "num-bigint 0.4.6", - "num-traits", - "openvm 1.4.0-rc.4", - "openvm-algebra-guest 1.4.0-rc.4", - "openvm-algebra-moduli-macros 1.4.0-rc.4", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "openvm-ecc-guest 1.4.0-rc.4", - "rand 0.8.5", - "serde", - "strum_macros 0.26.4", -] - [[package]] name = "openvm-pairing-guest" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "halo2curves-axiom", "hex-literal", @@ -4334,11 +4198,11 @@ dependencies = [ "lazy_static", "num-bigint 0.4.6", "num-traits", - "openvm 1.4.0", - "openvm-algebra-guest 1.4.0", - "openvm-algebra-moduli-macros 1.4.0", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?branch=main)", - "openvm-ecc-guest 1.4.0", + "openvm", + "openvm-algebra-guest", + "openvm-algebra-moduli-macros", + "openvm-custom-insn", + "openvm-ecc-guest", "rand 0.8.5", "serde", "strum_macros 0.26.4", @@ -4347,40 +4211,30 @@ dependencies = [ [[package]] name = "openvm-pairing-transpiler" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "openvm-instructions", - "openvm-pairing-guest 1.4.0", + "openvm-pairing-guest", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", "strum 0.26.3", ] -[[package]] -name = "openvm-platform" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" -dependencies = [ - "libm", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "openvm-rv32im-guest 1.4.0-rc.4", -] - [[package]] name = "openvm-platform" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "libm", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?branch=main)", - "openvm-rv32im-guest 1.4.0", + "openvm-custom-insn", + "openvm-rv32im-guest", ] [[package]] name = "openvm-poseidon2-air" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "derivative", "lazy_static", @@ -4398,7 +4252,7 @@ dependencies = [ [[package]] name = "openvm-rv32-adapters" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "derive-new 0.6.0", "itertools 0.14.0", @@ -4415,7 +4269,7 @@ dependencies = [ [[package]] name = "openvm-rv32im-circuit" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4439,22 +4293,12 @@ dependencies = [ "strum 0.26.3", ] -[[package]] -name = "openvm-rv32im-guest" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" -dependencies = [ - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "p3-field", - "strum_macros 0.26.4", -] - [[package]] name = "openvm-rv32im-guest" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?branch=main)", + "openvm-custom-insn", "p3-field", "strum_macros 0.26.4", ] @@ -4462,11 +4306,11 @@ dependencies = [ [[package]] name = "openvm-rv32im-transpiler" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-rv32im-guest 1.4.0", + "openvm-rv32im-guest", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4478,7 +4322,7 @@ dependencies = [ [[package]] name = "openvm-sdk" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "bitcode", "bon", @@ -4492,7 +4336,7 @@ dependencies = [ "itertools 0.14.0", "metrics", "num-bigint 0.4.6", - "openvm 1.4.0", + "openvm", "openvm-algebra-circuit", "openvm-algebra-transpiler", "openvm-bigint-circuit", @@ -4534,17 +4378,17 @@ dependencies = [ [[package]] name = "openvm-sha2" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" +version = "1.4.0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ - "openvm-sha256-guest 1.4.0-rc.4", + "openvm-sha256-guest", "sha2 0.10.9", ] [[package]] name = "openvm-sha256-air" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "openvm-circuit-primitives", "openvm-stark-backend", @@ -4555,7 +4399,7 @@ dependencies = [ [[package]] name = "openvm-sha256-circuit" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4578,30 +4422,22 @@ dependencies = [ "strum 0.26.3", ] -[[package]] -name = "openvm-sha256-guest" -version = "1.4.0-rc.4" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" -dependencies = [ - "openvm-platform 1.4.0-rc.4", -] - [[package]] name = "openvm-sha256-guest" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ - "openvm-platform 1.4.0", + "openvm-platform", ] [[package]] name = "openvm-sha256-transpiler" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "openvm-instructions", "openvm-instructions-derive", - "openvm-sha256-guest 1.4.0", + "openvm-sha256-guest", "openvm-stark-backend", "openvm-transpiler", "rrs-lib", @@ -4674,12 +4510,12 @@ dependencies = [ [[package]] name = "openvm-transpiler" version = "1.4.0" -source = "git+https://github.com/openvm-org/openvm.git?branch=main#39ee587f0f73646e3753cb2aa5f34885d4efffe0" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "elf", "eyre", "openvm-instructions", - "openvm-platform 1.4.0", + "openvm-platform", "openvm-stark-backend", "rrs-lib", "rustc-demangle", @@ -4719,18 +4555,18 @@ dependencies = [ [[package]] name = "p256" version = "0.13.2" -source = "git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97#51d0aa69694fd33def3c433e48228a5675e4fd97" +source = "git+https://github.com/openvm-org/openvm.git?tag=v1.4.0#39ee587f0f73646e3753cb2aa5f34885d4efffe0" dependencies = [ "ecdsa", "elliptic-curve", "ff 0.13.1", "hex-literal", "num-bigint 0.4.6", - "openvm 1.4.0-rc.4", - "openvm-algebra-guest 1.4.0-rc.4", - "openvm-algebra-moduli-macros 1.4.0-rc.4", - "openvm-ecc-guest 1.4.0-rc.4", - "openvm-ecc-sw-macros 1.4.0-rc.4", + "openvm", + "openvm-algebra-guest", + "openvm-algebra-moduli-macros", + "openvm-ecc-guest", + "openvm-ecc-sw-macros", "serde", ] @@ -6437,7 +6273,7 @@ dependencies = [ [[package]] name = "revm-scroll" version = "0.1.0" -source = "git+https://github.com/scroll-tech/scroll-revm#720ee7802e5ad695ac1f8699bbab9c9f2424417f" +source = "git+https://github.com/scroll-tech/scroll-revm#59d400f1a0b616d7b97a24da1cb5b8dcb8006f4b" dependencies = [ "auto_impl", "enumn", @@ -6638,7 +6474,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.60.2", + "windows-sys 0.52.0", ] [[package]] @@ -6668,7 +6504,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "sbv-core" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#b01386033edf72289d86d0cce17717c248441e5e" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#1c3bc46dbd487e788e5782755a694249a57e060d" dependencies = [ "cfg-if", "itertools 0.14.0", @@ -6685,7 +6521,7 @@ dependencies = [ [[package]] name = "sbv-helpers" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#b01386033edf72289d86d0cce17717c248441e5e" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#1c3bc46dbd487e788e5782755a694249a57e060d" dependencies = [ "tracing", ] @@ -6693,7 +6529,7 @@ dependencies = [ [[package]] name = "sbv-kv" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#b01386033edf72289d86d0cce17717c248441e5e" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#1c3bc46dbd487e788e5782755a694249a57e060d" dependencies = [ "auto_impl", "hashbrown 0.15.5", @@ -6703,9 +6539,9 @@ dependencies = [ [[package]] name = "sbv-precompile" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#b01386033edf72289d86d0cce17717c248441e5e" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#1c3bc46dbd487e788e5782755a694249a57e060d" dependencies = [ - "openvm-ecc-guest 1.4.0-rc.4", + "openvm-ecc-guest", "openvm-pairing", "openvm-sha2", "sbv-primitives", @@ -6714,7 +6550,7 @@ dependencies = [ [[package]] name = "sbv-primitives" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#b01386033edf72289d86d0cce17717c248441e5e" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#1c3bc46dbd487e788e5782755a694249a57e060d" dependencies = [ "alloy-consensus", "alloy-eips 1.0.24", @@ -6751,7 +6587,7 @@ dependencies = [ [[package]] name = "sbv-trie" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#b01386033edf72289d86d0cce17717c248441e5e" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#1c3bc46dbd487e788e5782755a694249a57e060d" dependencies = [ "alloy-rlp", "alloy-trie", @@ -6861,12 +6697,12 @@ version = "0.6.0" dependencies = [ "alloy-primitives", "bincode 2.0.1", - "openvm 1.4.0-rc.4", - "openvm-algebra-guest 1.4.0-rc.4", - "openvm-ecc-guest 1.4.0-rc.4", - "openvm-keccak256-guest 1.4.0-rc.4", + "openvm", + "openvm-algebra-guest", + "openvm-ecc-guest", + "openvm-keccak256-guest", "openvm-pairing", - "openvm-sha256-guest 1.4.0-rc.4", + "openvm-sha256-guest", "scroll-zkvm-types-batch", "scroll-zkvm-types-circuit", ] @@ -6898,8 +6734,8 @@ version = "0.6.0" dependencies = [ "alloy-primitives", "bincode 2.0.1", - "openvm 1.4.0-rc.4", - "openvm-keccak256-guest 1.4.0-rc.4", + "openvm", + "openvm-keccak256-guest", "scroll-zkvm-types-bundle", "scroll-zkvm-types-circuit", ] @@ -6910,18 +6746,18 @@ version = "0.6.0" dependencies = [ "bincode 2.0.1", "ecies", - "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "openvm 1.4.0-rc.4", - "openvm-algebra-complex-macros 1.4.0-rc.4", - "openvm-algebra-guest 1.4.0-rc.4", - "openvm-bigint-guest 1.4.0-rc.4", - "openvm-ecc-guest 1.4.0-rc.4", - "openvm-keccak256-guest 1.4.0-rc.4", + "k256 0.13.4 (git+https://github.com/openvm-org/openvm.git?tag=v1.4.0)", + "openvm", + "openvm-algebra-complex-macros", + "openvm-algebra-guest", + "openvm-bigint-guest", + "openvm-ecc-guest", + "openvm-keccak256-guest", "openvm-pairing", - "openvm-pairing-guest 1.4.0-rc.4", - "openvm-rv32im-guest 1.4.0-rc.4", + "openvm-pairing-guest", + "openvm-rv32im-guest", "openvm-sha2", - "p256 0.13.2 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", + "p256 0.13.2 (git+https://github.com/openvm-org/openvm.git?tag=v1.4.0)", "sbv-precompile", "scroll-zkvm-types-chunk", "scroll-zkvm-types-circuit", @@ -7030,12 +6866,12 @@ dependencies = [ "c-kzg", "halo2curves-axiom", "itertools 0.14.0", - "openvm 1.4.0-rc.4", - "openvm-ecc-guest 1.4.0-rc.4", + "openvm", + "openvm-ecc-guest", "openvm-pairing", - "openvm-pairing-guest 1.4.0-rc.4", + "openvm-pairing-guest", "openvm-sha2", - "openvm-sha256-guest 1.4.0-rc.4", + "openvm-sha256-guest", "rkyv", "scroll-zkvm-types-base", "serde", @@ -7075,9 +6911,9 @@ dependencies = [ "alloy-primitives", "getrandom 0.2.16", "itertools 0.14.0", - "openvm 1.4.0-rc.4", - "openvm-custom-insn 0.1.0 (git+https://github.com/openvm-org/openvm.git?rev=51d0aa69694fd33def3c433e48228a5675e4fd97)", - "openvm-rv32im-guest 1.4.0-rc.4", + "openvm", + "openvm-custom-insn", + "openvm-rv32im-guest", "rkyv", "scroll-zkvm-types-base", "serde", @@ -7496,7 +7332,7 @@ dependencies = [ "cfg-if", "libc", "psm", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -7646,7 +7482,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 145f5bcb..9781e278 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,35 +26,35 @@ version = "0.6.0" [workspace.dependencies] # openvm guest libs -openvm = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97" } -openvm-algebra-complex-macros = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } -openvm-custom-insn = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } -openvm-sha2 = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97" } -openvm-sha256-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } -openvm-p256 = { git = "https://github.com/openvm-org/openvm.git", package = "p256", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", features = ["std"] } -openvm-k256 = { git = "https://github.com/openvm-org/openvm.git", package = "k256", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", features = ["std"] } -openvm-pairing = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97" } -openvm-keccak256-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } -openvm-algebra-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } -openvm-ecc-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } -openvm-bigint-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } -openvm-pairing-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } -openvm-rv32im-guest = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97", default-features = false } +openvm = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0" } +openvm-algebra-complex-macros = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-custom-insn = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-sha2 = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0" } +openvm-sha256-guest = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-p256 = { git = "https://github.com/openvm-org/openvm.git", package = "p256", tag = "v1.4.0", features = ["std"] } +openvm-k256 = { git = "https://github.com/openvm-org/openvm.git", package = "k256", tag = "v1.4.0", features = ["std"] } +openvm-pairing = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0" } +openvm-keccak256-guest = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-algebra-guest = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-ecc-guest = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-bigint-guest = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-pairing-guest = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-rv32im-guest = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } # openvm host libs -openvm-benchmarks-prove = { git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false } -openvm-benchmarks-utils = { git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false } -openvm-build = { git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false } -openvm-circuit = { git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false } -openvm-continuations = { git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false } -openvm-instructions ={ git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false } -openvm-native-circuit = { git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false } -openvm-native-compiler = { git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false } -openvm-native-recursion = { git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false } -openvm-native-transpiler = { git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false } -openvm-rv32im-transpiler = { git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false } -openvm-sdk = { git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false, features = ["parallel", "evm-prove","legacy-v1-3"] } -openvm-transpiler = { git = "https://github.com/openvm-org/openvm.git", branch = "main", default-features = false } +openvm-benchmarks-prove = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-benchmarks-utils = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-build = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-circuit = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-continuations = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-instructions ={ git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-native-circuit = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-native-compiler = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-native-recursion = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-native-transpiler = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-rv32im-transpiler = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } +openvm-sdk = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false, features = ["parallel", "evm-prove","legacy-v1-3"] } +openvm-transpiler = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0", default-features = false } # more openvm related libs openvm-stark-sdk = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.2.0" } diff --git a/crates/circuits/chunk-circuit/.cargo/config.toml b/crates/circuits/chunk-circuit/.cargo/config.toml index 5a34042c..e161dcaf 100644 --- a/crates/circuits/chunk-circuit/.cargo/config.toml +++ b/crates/circuits/chunk-circuit/.cargo/config.toml @@ -1,3 +1,3 @@ [patch.crates-io] -k256 = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97" } -p256 = { git = "https://github.com/openvm-org/openvm.git", rev = "51d0aa69694fd33def3c433e48228a5675e4fd97" } +k256 = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0" } +p256 = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.0" } From 7f93b24467d887c41f26661880d36ded8348d437 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 4 Sep 2025 09:57:42 +0800 Subject: [PATCH 50/84] add old feynman witness structs --- crates/integration/src/testers/batch.rs | 6 ++- crates/integration/src/testers/bundle.rs | 6 ++- crates/integration/src/testers/chunk.rs | 7 ++-- crates/types/batch/src/lib.rs | 4 +- crates/types/batch/src/witness.rs | 47 +++++++++++++++++++----- crates/types/bundle/src/lib.rs | 2 +- crates/types/bundle/src/witness.rs | 28 ++++++++++++-- 7 files changed, 77 insertions(+), 23 deletions(-) diff --git a/crates/integration/src/testers/batch.rs b/crates/integration/src/testers/batch.rs index 231d06fb..cf49772b 100644 --- a/crates/integration/src/testers/batch.rs +++ b/crates/integration/src/testers/batch.rs @@ -1,6 +1,6 @@ use scroll_zkvm_prover::Prover; use scroll_zkvm_types::{ - batch::{BatchHeader, BatchInfo, BatchWitness, ReferenceHeader}, + batch::{BatchHeader, BatchInfo, BatchWitness, LegacyBatchWitness, ReferenceHeader}, chunk::ChunkInfo, proof::ProofEnum, public_inputs::{ForkName, Version}, @@ -25,7 +25,9 @@ impl PartialProvingTask for BatchWitness { } fn legacy_rkyv_archive(&self) -> eyre::Result> { - Ok(rkyv::to_bytes::(self)?.to_vec()) + let witness_legacy = LegacyBatchWitness::from(self.clone()); + let bytes = rkyv::to_bytes::(&witness_legacy)?; + Ok(bytes.to_vec()) } fn fork_name(&self) -> ForkName { diff --git a/crates/integration/src/testers/bundle.rs b/crates/integration/src/testers/bundle.rs index 1e7795f7..3f320477 100644 --- a/crates/integration/src/testers/bundle.rs +++ b/crates/integration/src/testers/bundle.rs @@ -1,6 +1,6 @@ use scroll_zkvm_types::{ batch::BatchInfo, - bundle::{BundleInfo, BundleWitness}, + bundle::{BundleInfo, BundleWitness, LegacyBundleWitness}, proof::ProofEnum, public_inputs::ForkName, }; @@ -24,7 +24,9 @@ impl PartialProvingTask for BundleWitness { } fn legacy_rkyv_archive(&self) -> eyre::Result> { - Ok(rkyv::to_bytes::(self)?.to_vec()) + let witness_legacy = LegacyBundleWitness::from(self.clone()); + let bytes = rkyv::to_bytes::(&witness_legacy)?; + Ok(bytes.to_vec()) } fn fork_name(&self) -> ForkName { diff --git a/crates/integration/src/testers/chunk.rs b/crates/integration/src/testers/chunk.rs index 8b3323f7..60483310 100644 --- a/crates/integration/src/testers/chunk.rs +++ b/crates/integration/src/testers/chunk.rs @@ -64,10 +64,9 @@ impl PartialProvingTask for ChunkWitness { } fn legacy_rkyv_archive(&self) -> eyre::Result> { - Ok( - rkyv::to_bytes::(&LegacyChunkWitness::from(self.clone()))? - .to_vec(), - ) + let witness_legacy = LegacyChunkWitness::from(self.clone()); + let bytes = rkyv::to_bytes::(&witness_legacy)?; + Ok(bytes.to_vec()) } fn fork_name(&self) -> ForkName { diff --git a/crates/types/batch/src/lib.rs b/crates/types/batch/src/lib.rs index 72be3988..5b21108c 100644 --- a/crates/types/batch/src/lib.rs +++ b/crates/types/batch/src/lib.rs @@ -19,4 +19,6 @@ mod blob_consistency; mod builder; mod witness; -pub use witness::{ArchivedBatchWitness, BatchWitness, Bytes48, PointEvalWitness}; +pub use witness::{ + ArchivedLegacyBatchWitness, BatchWitness, Bytes48, LegacyBatchWitness, PointEvalWitness, +}; diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index 2523772a..f720f89f 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -58,6 +58,28 @@ pub struct PointEvalWitness { pub kzg_proof: Bytes48, } +/// Witness to the batch circuit. +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +pub struct BatchWitness { + /// The version byte as per [version][types_base::version]. + pub version: u8, + /// Flattened root proofs from all chunks in the batch. + pub chunk_proofs: Vec, + /// Chunk infos. + pub chunk_infos: Vec, + /// Blob bytes. + pub blob_bytes: Vec, + /// Witness for point evaluation. + /// + /// Optional field as some domains (for eg. Validium) may not utilise EIP-4844 for DA, + /// in case of which there is no point-eval witness. + pub point_eval_witness: Option, + /// Header for reference. + pub reference_header: ReferenceHeader, + /// The code version specify the chain spec + pub fork_name: ForkName, +} + /// Witness to the batch circuit. #[derive( Clone, @@ -69,10 +91,7 @@ pub struct PointEvalWitness { serde::Serialize, )] #[rkyv(derive(Debug))] -pub struct BatchWitness { - /// The version byte as per [version][types_base::version]. - #[rkyv()] - pub version: u8, +pub struct LegacyBatchWitness { /// Flattened root proofs from all chunks in the batch. #[rkyv()] pub chunk_proofs: Vec, @@ -82,11 +101,8 @@ pub struct BatchWitness { /// Blob bytes. #[rkyv()] pub blob_bytes: Vec, - /// Witness for point evaluation. - /// - /// Optional field as some domains (for eg. Validium) may not utilise EIP-4844 for DA, - /// in case of which there is no point-eval witness. - pub point_eval_witness: Option, + /// Witness for point evaluation + pub point_eval_witness: PointEvalWitness, /// Header for reference. #[rkyv()] pub reference_header: ReferenceHeader, @@ -95,6 +111,19 @@ pub struct BatchWitness { pub fork_name: ForkName, } +impl From for LegacyBatchWitness { + fn from(value: BatchWitness) -> Self { + Self { + chunk_proofs: value.chunk_proofs, + chunk_infos: value.chunk_infos, + blob_bytes: value.blob_bytes, + point_eval_witness: value.point_eval_witness.expect("should not be none"), + reference_header: value.reference_header, + fork_name: value.fork_name, + } + } +} + impl ProofCarryingWitness for BatchWitness { fn get_proofs(&self) -> Vec { self.chunk_proofs.clone() diff --git a/crates/types/bundle/src/lib.rs b/crates/types/bundle/src/lib.rs index 6688df56..622170a7 100644 --- a/crates/types/bundle/src/lib.rs +++ b/crates/types/bundle/src/lib.rs @@ -1,2 +1,2 @@ mod witness; -pub use witness::{ArchivedBundleWitness, BundleWitness}; +pub use witness::{ArchivedLegacyBundleWitness, BundleWitness, LegacyBundleWitness}; diff --git a/crates/types/bundle/src/witness.rs b/crates/types/bundle/src/witness.rs index 5e89cdad..76c53a68 100644 --- a/crates/types/bundle/src/witness.rs +++ b/crates/types/bundle/src/witness.rs @@ -4,6 +4,19 @@ use types_base::{ public_inputs::{batch::BatchInfo, bundle::BundleInfo}, }; +/// The witness for the bundle circuit. +#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] +pub struct BundleWitness { + /// The version byte as per [version][types_base::version]. + pub version: u8, + /// Batch proofs being aggregated in the bundle. + pub batch_proofs: Vec, + /// Public-input values for the corresponding batch proofs. + pub batch_infos: Vec, + /// The code version specify the chain spec + pub fork_name: ForkName, +} + /// The witness for the bundle circuit. #[derive( Clone, @@ -15,10 +28,7 @@ use types_base::{ serde::Serialize, )] #[rkyv(derive(Debug))] -pub struct BundleWitness { - /// The version byte as per [version][types_base::version]. - #[rkyv()] - pub version: u8, +pub struct LegacyBundleWitness { /// Batch proofs being aggregated in the bundle. #[rkyv()] pub batch_proofs: Vec, @@ -30,6 +40,16 @@ pub struct BundleWitness { pub fork_name: ForkName, } +impl From for LegacyBundleWitness { + fn from(value: BundleWitness) -> Self { + Self { + batch_proofs: value.batch_proofs, + batch_infos: value.batch_infos, + fork_name: value.fork_name, + } + } +} + impl ProofCarryingWitness for BundleWitness { fn get_proofs(&self) -> Vec { self.batch_proofs.clone() From e481a6b6c44a84b431d8c619a9e710477fcc3cc3 Mon Sep 17 00:00:00 2001 From: Velaciela Date: Thu, 4 Sep 2025 10:07:41 +0800 Subject: [PATCH 51/84] fix gpu --- crates/integration/src/bin/chunk-benchmark.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/integration/src/bin/chunk-benchmark.rs b/crates/integration/src/bin/chunk-benchmark.rs index 6c195eee..c9e1abc3 100644 --- a/crates/integration/src/bin/chunk-benchmark.rs +++ b/crates/integration/src/bin/chunk-benchmark.rs @@ -12,7 +12,7 @@ use openvm_benchmarks_prove::util::BenchmarkCli; use openvm_benchmarks_utils::build_elf; use openvm_circuit::openvm_stark_sdk::bench::run_with_metric_collection; use openvm_sdk::StdIn; -use openvm_sdk::config::{SdkVmConfig, SdkVmCpuBuilder}; +use openvm_sdk::config::{SdkVmConfig, SdkVmBuilder}; use scroll_zkvm_integration::testers::chunk::{ ChunkProverTester, get_witness_from_env_or_builder, preset_chunk, }; @@ -56,6 +56,6 @@ fn main() -> eyre::Result<()> { wit.write_guest_input(&mut stdin)?; run_with_metric_collection("OUTPUT_PATH", || { - args.bench_from_exe::("chunk-circuit", app_vm_config, elf, stdin) + args.bench_from_exe::("chunk-circuit", app_vm_config, elf, stdin) }) } From 73bbfe70ef22e65f6148ba7765ab606919b37a73 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 4 Sep 2025 10:17:23 +0800 Subject: [PATCH 52/84] fix --- crates/types/base/src/public_inputs/chunk.rs | 59 +++++++++++++++++--- crates/types/batch/src/witness.rs | 10 +++- 2 files changed, 59 insertions(+), 10 deletions(-) diff --git a/crates/types/base/src/public_inputs/chunk.rs b/crates/types/base/src/public_inputs/chunk.rs index a89d5352..cc79914e 100644 --- a/crates/types/base/src/public_inputs/chunk.rs +++ b/crates/types/base/src/public_inputs/chunk.rs @@ -80,6 +80,39 @@ impl BlockContextV2 { } } +/// Represents header-like information for the chunk. +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub struct ChunkInfo { + /// The EIP-155 chain ID for all txs in the chunk. + pub chain_id: u64, + /// The state root before applying the chunk. + pub prev_state_root: B256, + /// The state root after applying the chunk. + pub post_state_root: B256, + /// The withdrawals root after applying the chunk. + pub withdraw_root: B256, + /// Digest of L1 message txs force included in the chunk. + /// It is a legacy field and can be omitted in new defination + #[serde(default)] + pub data_hash: B256, + /// Digest of L2 tx data flattened over all L2 txs in the chunk. + pub tx_data_digest: B256, + /// The L1 msg queue hash at the end of the previous chunk. + pub prev_msg_queue_hash: B256, + /// The L1 msg queue hash at the end of the current chunk. + pub post_msg_queue_hash: B256, + /// The length of rlp encoded L2 tx bytes flattened over all L2 txs in the chunk. + pub tx_data_length: u64, + /// The block number of the first block in the chunk. + pub initial_block_number: u64, + /// The block contexts of the blocks in the chunk. + pub block_ctxs: Vec, + /// The blockhash of the last block in the previous chunk. + pub prev_blockhash: B256, + /// The blockhash of the last block in the current chunk. + pub post_blockhash: B256, +} + /// Represents header-like information for the chunk. #[derive( Debug, @@ -91,7 +124,7 @@ impl BlockContextV2 { serde::Serialize, )] #[rkyv(derive(Debug))] -pub struct ChunkInfo { +pub struct LegacyChunkInfo { /// The EIP-155 chain ID for all txs in the chunk. #[rkyv()] pub chain_id: u64, @@ -127,12 +160,24 @@ pub struct ChunkInfo { /// The block contexts of the blocks in the chunk. #[rkyv()] pub block_ctxs: Vec, - /// The blockhash of the last block in the previous chunk. - #[rkyv()] - pub prev_blockhash: B256, - /// The blockhash of the last block in the current chunk. - #[rkyv()] - pub post_blockhash: B256, +} + +impl From for LegacyChunkInfo { + fn from(value: ChunkInfo) -> Self { + Self { + chain_id: value.chain_id, + prev_state_root: value.prev_state_root, + post_state_root: value.post_state_root, + withdraw_root: value.withdraw_root, + data_hash: value.data_hash, + tx_data_digest: value.tx_data_digest, + prev_msg_queue_hash: value.prev_msg_queue_hash, + post_msg_queue_hash: value.post_msg_queue_hash, + tx_data_length: value.tx_data_length, + initial_block_number: value.initial_block_number, + block_ctxs: value.block_ctxs, + } + } } impl ChunkInfo { diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index f720f89f..e4f8bbd3 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -1,6 +1,10 @@ use types_base::{ aggregation::{AggregationInput, ProofCarryingWitness}, - public_inputs::{ForkName, batch::BatchInfo, chunk::ChunkInfo}, + public_inputs::{ + ForkName, + batch::BatchInfo, + chunk::{ChunkInfo, LegacyChunkInfo}, + }, }; use crate::{ @@ -97,7 +101,7 @@ pub struct LegacyBatchWitness { pub chunk_proofs: Vec, /// Chunk infos. #[rkyv()] - pub chunk_infos: Vec, + pub chunk_infos: Vec, /// Blob bytes. #[rkyv()] pub blob_bytes: Vec, @@ -115,7 +119,7 @@ impl From for LegacyBatchWitness { fn from(value: BatchWitness) -> Self { Self { chunk_proofs: value.chunk_proofs, - chunk_infos: value.chunk_infos, + chunk_infos: value.chunk_infos.into_iter().map(|c| c.into()).collect(), blob_bytes: value.blob_bytes, point_eval_witness: value.point_eval_witness.expect("should not be none"), reference_header: value.reference_header, From 5824aaf55850c9e9eba7092bc9d3d52acd16071f Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 4 Sep 2025 10:25:57 +0800 Subject: [PATCH 53/84] move blob_consistency/types.rs --- .../batch/src/blob_consistency/openvm.rs | 37 ------------------ .../types/batch/src/blob_consistency/types.rs | 38 +++++++++++++++++++ 2 files changed, 38 insertions(+), 37 deletions(-) create mode 100644 crates/types/batch/src/blob_consistency/types.rs diff --git a/crates/types/batch/src/blob_consistency/openvm.rs b/crates/types/batch/src/blob_consistency/openvm.rs index 92d370ac..e4a1f6df 100644 --- a/crates/types/batch/src/blob_consistency/openvm.rs +++ b/crates/types/batch/src/blob_consistency/openvm.rs @@ -55,43 +55,6 @@ static KZG_G2_SETUP: LazyLock = LazyLock::new(|| { /// The version for KZG as per EIP-4844. const VERSIONED_HASH_VERSION_KZG: u8 = 1; -/// Helper trait that provides functionality to convert the given type from native to the desired intrinsic type -pub trait ToIntrinsic { - /// The desired intrinsic type - type IntrinsicType; - - /// Convert the given type from native to the desired intrinsic type - fn to_intrinsic(&self) -> Self::IntrinsicType; -} - -impl ToIntrinsic for Bls12_381_Fq { - type IntrinsicType = Fp; - - fn to_intrinsic(&self) -> Self::IntrinsicType { - let bytes = self.to_bytes(); - Fp::from_le_bytes_unchecked(&bytes) - } -} - -impl ToIntrinsic for Bls12_381_G1 { - type IntrinsicType = G1Affine; - - fn to_intrinsic(&self) -> Self::IntrinsicType { - G1Affine::from_xy_unchecked(self.x.to_intrinsic(), self.y.to_intrinsic()) - } -} - -impl ToIntrinsic for Bls12_381_G2 { - type IntrinsicType = G2Affine; - - fn to_intrinsic(&self) -> Self::IntrinsicType { - G2Affine::from_xy_unchecked( - Fp2::new(self.x.c0.to_intrinsic(), self.x.c1.to_intrinsic()), - Fp2::new(self.y.c0.to_intrinsic(), self.y.c1.to_intrinsic()), - ) - } -} - /// Verify KZG `proof` that `P(z) == y` where `P` is the EIP-4844 blob polynomial in its evaluation /// form, and `commitment` is the KZG commitment to the polynomial `P`. /// diff --git a/crates/types/batch/src/blob_consistency/types.rs b/crates/types/batch/src/blob_consistency/types.rs new file mode 100644 index 00000000..68f6924e --- /dev/null +++ b/crates/types/batch/src/blob_consistency/types.rs @@ -0,0 +1,38 @@ + + +/// Helper trait that provides functionality to convert the given type from native to the desired intrinsic type +pub trait ToIntrinsic { + /// The desired intrinsic type + type IntrinsicType; + + /// Convert the given type from native to the desired intrinsic type + fn to_intrinsic(&self) -> Self::IntrinsicType; +} + +impl ToIntrinsic for Bls12_381_Fq { + type IntrinsicType = Fp; + + fn to_intrinsic(&self) -> Self::IntrinsicType { + let bytes = self.to_bytes(); + Fp::from_le_bytes_unchecked(&bytes) + } +} + +impl ToIntrinsic for Bls12_381_G1 { + type IntrinsicType = G1Affine; + + fn to_intrinsic(&self) -> Self::IntrinsicType { + G1Affine::from_xy_unchecked(self.x.to_intrinsic(), self.y.to_intrinsic()) + } +} + +impl ToIntrinsic for Bls12_381_G2 { + type IntrinsicType = G2Affine; + + fn to_intrinsic(&self) -> Self::IntrinsicType { + G2Affine::from_xy_unchecked( + Fp2::new(self.x.c0.to_intrinsic(), self.x.c1.to_intrinsic()), + Fp2::new(self.y.c0.to_intrinsic(), self.y.c1.to_intrinsic()), + ) + } +} \ No newline at end of file From 928cd437a148f77348c5ac500ab8756493263cb2 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 4 Sep 2025 10:30:17 +0800 Subject: [PATCH 54/84] fix --- Cargo.lock | 1 + crates/types/batch/Cargo.toml | 1 + crates/types/batch/src/blob_consistency/mod.rs | 6 ++++-- crates/types/batch/src/blob_consistency/openvm.rs | 9 +++++---- crates/types/batch/src/blob_consistency/types.rs | 9 +++++++-- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0af8bb39..55d12fbf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6867,6 +6867,7 @@ dependencies = [ "halo2curves-axiom", "itertools 0.14.0", "openvm", + "openvm-algebra-guest", "openvm-ecc-guest", "openvm-pairing", "openvm-pairing-guest", diff --git a/crates/types/batch/Cargo.toml b/crates/types/batch/Cargo.toml index bced00ba..3e0ed250 100644 --- a/crates/types/batch/Cargo.toml +++ b/crates/types/batch/Cargo.toml @@ -17,6 +17,7 @@ vm-zstd = { workspace = true } types-base = { path = "../base", package = "scroll-zkvm-types-base" } openvm = { workspace = true, features = ["std"] } +openvm-algebra-guest = { workspace = true } openvm-ecc-guest = { workspace = true, features = ["halo2curves"] } openvm-pairing-guest = { workspace = true, features = ["halo2curves"] } openvm-pairing = { workspace = true, features = ["bls12_381", "halo2curves"] } diff --git a/crates/types/batch/src/blob_consistency/mod.rs b/crates/types/batch/src/blob_consistency/mod.rs index 9757f51a..a6498d47 100644 --- a/crates/types/batch/src/blob_consistency/mod.rs +++ b/crates/types/batch/src/blob_consistency/mod.rs @@ -4,9 +4,11 @@ use openvm_pairing::bls12_381::Scalar; mod constants; mod openvm; -pub use openvm::point_evaluation; +mod types; -pub use openvm::{ToIntrinsic, kzg_to_versioned_hash, verify_kzg_proof}; +pub use openvm::point_evaluation; +pub use openvm::{kzg_to_versioned_hash, verify_kzg_proof}; +pub use types::ToIntrinsic; // Number of bytes in a u256. pub const N_BYTES_U256: usize = 32; diff --git a/crates/types/batch/src/blob_consistency/openvm.rs b/crates/types/batch/src/blob_consistency/openvm.rs index e4a1f6df..e5d44356 100644 --- a/crates/types/batch/src/blob_consistency/openvm.rs +++ b/crates/types/batch/src/blob_consistency/openvm.rs @@ -3,14 +3,13 @@ use std::sync::LazyLock; use algebra::{Field, IntMod}; use alloy_primitives::U256; -use halo2curves_axiom::bls12_381::{ - Fq as Bls12_381_Fq, G1Affine as Bls12_381_G1, G2Affine as Bls12_381_G2, -}; +use halo2curves_axiom::bls12_381::G2Affine as Bls12_381_G2; use itertools::Itertools; use openvm_ecc_guest::{AffinePoint, CyclicGroup, msm, weierstrass::WeierstrassPoint}; -use openvm_pairing::bls12_381::{Bls12_381, Fp, Fp2, G1Affine, G2Affine, Scalar}; +use openvm_pairing::bls12_381::{Bls12_381, G1Affine, G2Affine, Scalar}; use openvm_pairing_guest::{algebra, pairing::PairingCheck}; +use super::types::ToIntrinsic; use crate::blob_consistency::constants::KZG_G2_SETUP_BYTES; use super::{BLOB_WIDTH, LOG_BLOB_WIDTH}; @@ -147,6 +146,8 @@ fn interpolate(z: &Scalar, coefficients: &[Scalar; BLOB_WIDTH]) -> Scalar { mod test { use super::*; + use halo2curves_axiom::bls12_381::G1Affine as Bls12_381_G1; + #[test] fn test_kzg_compute_proof_verify() { use c_kzg::{Blob, Bytes32, Bytes48}; diff --git a/crates/types/batch/src/blob_consistency/types.rs b/crates/types/batch/src/blob_consistency/types.rs index 68f6924e..afac5090 100644 --- a/crates/types/batch/src/blob_consistency/types.rs +++ b/crates/types/batch/src/blob_consistency/types.rs @@ -1,4 +1,9 @@ - +use halo2curves_axiom::bls12_381::{ + Fq as Bls12_381_Fq, G1Affine as Bls12_381_G1, G2Affine as Bls12_381_G2, +}; +use openvm_algebra_guest::IntMod; +use openvm_ecc_guest::weierstrass::WeierstrassPoint; +use openvm_pairing::bls12_381::{Fp, Fp2, G1Affine, G2Affine}; /// Helper trait that provides functionality to convert the given type from native to the desired intrinsic type pub trait ToIntrinsic { @@ -35,4 +40,4 @@ impl ToIntrinsic for Bls12_381_G2 { Fp2::new(self.y.c0.to_intrinsic(), self.y.c1.to_intrinsic()), ) } -} \ No newline at end of file +} From 0886897fe30160f5301c24db9bc6725e057083c9 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 4 Sep 2025 11:03:01 +0800 Subject: [PATCH 55/84] minor improvements --- crates/prover/src/utils/mod.rs | 23 +++++++++++++++++ crates/types/base/src/public_inputs/chunk.rs | 27 ++++++++++++++++++++ crates/types/chunk/src/execute.rs | 2 +- crates/types/circuit/Cargo.toml | 3 --- 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/crates/prover/src/utils/mod.rs b/crates/prover/src/utils/mod.rs index f021a9e7..43778539 100644 --- a/crates/prover/src/utils/mod.rs +++ b/crates/prover/src/utils/mod.rs @@ -70,6 +70,29 @@ pub fn write>(path: P, data: &[u8]) -> Result<(), Error> { Ok(std::fs::write(path, data)?) } +pub fn save_stdin_as_json(stdin: &openvm_sdk::StdIn, filename: &str) { + // dump stdin to file + let mut json: serde_json::Value = serde_json::from_str("{\"input\":[]}").unwrap(); + let json_input = json["input"].as_array_mut().unwrap(); + for item in &stdin.buffer { + use openvm_stark_sdk::openvm_stark_backend::p3_field::PrimeField32; + let mut bytes: Vec = vec![0x02]; + for f in item { + let u32_bytes = f.as_canonical_u32().to_le_bytes(); + bytes.extend_from_slice(&u32_bytes); + } + json_input.push(serde_json::Value::String(format!( + "0x{}", + hex::encode(bytes) + ))); + } + if let Err(e) = std::fs::write(&filename, serde_json::to_string_pretty(&json).unwrap()) { + tracing::warn!("Failed to write stdin to {}: {}", filename, e); + } else { + tracing::info!("Wrote stdin to {}", filename); + } +} + pub mod base64 { use base64::prelude::*; use serde::{Deserialize, Deserializer, Serialize, Serializer}; diff --git a/crates/types/base/src/public_inputs/chunk.rs b/crates/types/base/src/public_inputs/chunk.rs index cc79914e..90aa8db8 100644 --- a/crates/types/base/src/public_inputs/chunk.rs +++ b/crates/types/base/src/public_inputs/chunk.rs @@ -161,6 +161,33 @@ pub struct LegacyChunkInfo { #[rkyv()] pub block_ctxs: Vec, } +impl std::fmt::Display for ChunkInfo { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + // Create a wrapper struct that implements Debug + struct DisplayWrapper<'a>(&'a ChunkInfo); + + impl<'a> std::fmt::Debug for DisplayWrapper<'a> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("ChunkInfo") + .field("chain_id", &self.0.chain_id) + .field("prev_state_root", &self.0.prev_state_root) + .field("post_state_root", &self.0.post_state_root) + .field("withdraw_root", &self.0.withdraw_root) + .field("data_hash", &self.0.data_hash) + .field("tx_data_digest", &self.0.tx_data_digest) + .field("prev_msg_queue_hash", &self.0.prev_msg_queue_hash) + .field("post_msg_queue_hash", &self.0.post_msg_queue_hash) + .field("tx_data_length", &self.0.tx_data_length) + .field("initial_block_number", &self.0.initial_block_number) + .field("block_ctxs", &"") + .finish() + } + } + + // Use the Debug implementation with pretty formatting + write!(f, "{:#?}", DisplayWrapper(self)) + } +} impl From for LegacyChunkInfo { fn from(value: ChunkInfo) -> Self { diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index 0e4ced95..553ce7e0 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -76,7 +76,7 @@ pub fn execute(witness: ChunkWitness) -> Result { post_blockhash: B256::default(), }; - // println!("chunk_info = {}", chunk_info); + println!("chunk_info = {}", chunk_info); Ok(chunk_info) } diff --git a/crates/types/circuit/Cargo.toml b/crates/types/circuit/Cargo.toml index 218cd082..c308070e 100644 --- a/crates/types/circuit/Cargo.toml +++ b/crates/types/circuit/Cargo.toml @@ -10,10 +10,7 @@ version.workspace = true [dependencies] scroll-zkvm-types-base.workspace = true alloy-primitives.workspace = true -rkyv.workspace = true -serde.workspace = true openvm = { workspace = true, features = ["std"] } openvm-rv32im-guest.workspace = true openvm-custom-insn.workspace = true itertools.workspace = true -getrandom = { version = "0.2", features = ["custom"] } From 8f269c6f4b7e7377cdd85f3fe8270c48c5607034 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 4 Sep 2025 11:03:24 +0800 Subject: [PATCH 56/84] clean --- Cargo.lock | 3 --- 1 file changed, 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 55d12fbf..569276b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6910,14 +6910,11 @@ name = "scroll-zkvm-types-circuit" version = "0.6.0" dependencies = [ "alloy-primitives", - "getrandom 0.2.16", "itertools 0.14.0", "openvm", "openvm-custom-insn", "openvm-rv32im-guest", - "rkyv", "scroll-zkvm-types-base", - "serde", ] [[package]] From 963a18139a55973efb4649c8cc0099c1ad85f0a8 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 4 Sep 2025 11:05:28 +0800 Subject: [PATCH 57/84] fmt --- crates/integration/src/bin/chunk-benchmark.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/integration/src/bin/chunk-benchmark.rs b/crates/integration/src/bin/chunk-benchmark.rs index c9e1abc3..abf5256b 100644 --- a/crates/integration/src/bin/chunk-benchmark.rs +++ b/crates/integration/src/bin/chunk-benchmark.rs @@ -12,7 +12,7 @@ use openvm_benchmarks_prove::util::BenchmarkCli; use openvm_benchmarks_utils::build_elf; use openvm_circuit::openvm_stark_sdk::bench::run_with_metric_collection; use openvm_sdk::StdIn; -use openvm_sdk::config::{SdkVmConfig, SdkVmBuilder}; +use openvm_sdk::config::{SdkVmBuilder, SdkVmConfig}; use scroll_zkvm_integration::testers::chunk::{ ChunkProverTester, get_witness_from_env_or_builder, preset_chunk, }; From c5e5ac89db8552264f97f7e1c991abd0f5556095 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 4 Sep 2025 12:50:06 +0800 Subject: [PATCH 58/84] better logging --- crates/prover/src/prover/mod.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/crates/prover/src/prover/mod.rs b/crates/prover/src/prover/mod.rs index e96f46a3..ac01df88 100644 --- a/crates/prover/src/prover/mod.rs +++ b/crates/prover/src/prover/mod.rs @@ -194,9 +194,14 @@ impl Prover { let prover = self.get_prover_mut()?; let proof = prover.prove(stdin); let proving_time_mills = t.elapsed().as_millis() as u64; - let prove_speed = - (total_cycles as f32 / 1_000_000.0f32) / (proving_time_mills as f32 / 1000.0f32); // MHz - tracing::info!("{} proving speed: {:.2}MHz", self.prover_name, prove_speed); + let proving_time_s = proving_time_mills as f32 / 1000.0f32; + let prove_speed = (total_cycles as f32 / 1_000_000.0f32) / proving_time_s; // MHz + tracing::info!( + "{} proving speed: {:.2}MHz, cycles: {total_cycles}, time: {:.2}s", + self.prover_name, + prove_speed, + proving_time_s + ); let proof = proof.map_err(|e| Error::GenProof(e.to_string()))?; let stat = StarkProofStat { total_cycles, From df579e5dc41913d00dc2246e07b14f202edb81f4 Mon Sep 17 00:00:00 2001 From: Velaciela Date: Thu, 4 Sep 2025 12:53:21 +0800 Subject: [PATCH 59/84] commits --- crates/circuits/batch-circuit/batch_exe_commit.rs | 2 +- crates/circuits/bundle-circuit/bundle_exe_commit.rs | 2 +- crates/circuits/chunk-circuit/chunk_exe_commit.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/circuits/batch-circuit/batch_exe_commit.rs b/crates/circuits/batch-circuit/batch_exe_commit.rs index 8fc44852..140ad9af 100644 --- a/crates/circuits/batch-circuit/batch_exe_commit.rs +++ b/crates/circuits/batch-circuit/batch_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1035786594, 1303498991, 980566745, 555563793, 1189696157, 1358373261, 1652120310, 573029938]; +pub const COMMIT: [u32; 8] = [472346136, 271742254, 135123519, 1790499705, 1874605551, 1474548354, 196433460, 1496008469]; diff --git a/crates/circuits/bundle-circuit/bundle_exe_commit.rs b/crates/circuits/bundle-circuit/bundle_exe_commit.rs index 7d64c403..ac0d2135 100644 --- a/crates/circuits/bundle-circuit/bundle_exe_commit.rs +++ b/crates/circuits/bundle-circuit/bundle_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1405004965, 893408229, 845512488, 631859947, 1666417312, 975133313, 610996457, 1270337891]; +pub const COMMIT: [u32; 8] = [1554275956, 205982622, 1328216782, 169679608, 408300136, 1567790612, 1500387395, 1112660052]; diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index b0fcb185..1fb78393 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [530940478, 1113081054, 162458416, 863505408, 1784674020, 738811261, 841509867, 279682691]; +pub const COMMIT: [u32; 8] = [1509184083, 1659572139, 1973911372, 221209124, 202025000, 1698501572, 1634706653, 706771663]; From 0153837c4bc895ba3565e43f5271bc309d13dcab Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Fri, 5 Sep 2025 20:56:11 +0800 Subject: [PATCH 60/84] add feature=host for types crate --- Cargo.lock | 4 +- crates/integration/src/utils/mod.rs | 14 ++++--- crates/prover/src/utils/mod.rs | 3 +- crates/types/Cargo.toml | 5 +-- crates/types/batch/Cargo.toml | 6 ++- crates/types/batch/src/builder/mod.rs | 7 ++-- crates/types/batch/src/builder/v7.rs | 11 +++--- crates/types/batch/src/lib.rs | 5 ++- crates/types/batch/src/utils.rs | 55 ++++++++++++++++++++++++++ crates/types/batch/src/witness.rs | 20 ++++++---- crates/types/chunk/Cargo.toml | 2 +- crates/types/src/utils.rs | 57 +-------------------------- 12 files changed, 100 insertions(+), 89 deletions(-) create mode 100644 crates/types/batch/src/utils.rs diff --git a/Cargo.lock b/Cargo.lock index 569276b3..1c0b6a58 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6832,7 +6832,6 @@ dependencies = [ "alloy-primitives", "base64", "bincode 1.3.3", - "c-kzg", "openvm-native-recursion", "openvm-sdk", "openvm-stark-sdk", @@ -6862,7 +6861,6 @@ name = "scroll-zkvm-types-batch" version = "0.6.0" dependencies = [ "alloy-primitives", - "bincode 2.0.1", "c-kzg", "halo2curves-axiom", "itertools 0.14.0", @@ -6872,8 +6870,8 @@ dependencies = [ "openvm-pairing", "openvm-pairing-guest", "openvm-sha2", - "openvm-sha256-guest", "rkyv", + "sbv-primitives", "scroll-zkvm-types-base", "serde", "vm-zstd", diff --git a/crates/integration/src/utils/mod.rs b/crates/integration/src/utils/mod.rs index 4e3cc0c1..d7a9d5f3 100644 --- a/crates/integration/src/utils/mod.rs +++ b/crates/integration/src/utils/mod.rs @@ -4,10 +4,11 @@ use sbv_primitives::{ B256, types::{BlockWitness, eips::Encodable2718}, }; +use scroll_zkvm_types::batch::build_point_eval_witness; use scroll_zkvm_types::{ batch::{ BatchHeader, BatchHeaderV6, BatchHeaderV7, BatchHeaderValidium, BatchHeaderValidiumV1, - BatchInfo, BatchWitness, PointEvalWitness, ReferenceHeader, + BatchInfo, BatchWitness, ReferenceHeader, }, bundle::{BundleInfo, BundleWitness}, chunk::{ChunkInfo, ChunkWitness}, @@ -219,7 +220,7 @@ pub fn build_batch_witnesses( let kzg_commitment = point_eval::blob_to_kzg_commitment(&kzg_blob); let blob_versioned_hash = point_eval::get_versioned_hash(&kzg_commitment); - // primage = keccak(payload) + blob_versioned_hash + // preimage = keccak(payload) + blob_versioned_hash let challenge_preimage = if testing_hardfork() >= ForkName::EuclidV2 { let mut challenge_preimage = keccak256(&blob_bytes).to_vec(); challenge_preimage.extend(blob_versioned_hash.0); @@ -326,16 +327,17 @@ pub fn build_batch_witnesses( }) .collect::>(); + let point_eval_witness = build_point_eval_witness( + *kzg_commitment.to_bytes().as_ref(), + *kzg_proof.to_bytes().as_ref(), + ); Ok(BatchWitness { version: version.as_version_byte(), chunk_proofs, chunk_infos, reference_header, blob_bytes, - point_eval_witness: Some(PointEvalWitness { - kzg_commitment: *kzg_commitment.to_bytes().as_ref(), - kzg_proof: *kzg_proof.to_bytes().as_ref(), - }), + point_eval_witness: Some(point_eval_witness), fork_name: version.fork, }) } diff --git a/crates/prover/src/utils/mod.rs b/crates/prover/src/utils/mod.rs index 43778539..ddc48a04 100644 --- a/crates/prover/src/utils/mod.rs +++ b/crates/prover/src/utils/mod.rs @@ -70,6 +70,7 @@ pub fn write>(path: P, data: &[u8]) -> Result<(), Error> { Ok(std::fs::write(path, data)?) } +/// Dump stdin using same json format as `cargo openvm` cli. pub fn save_stdin_as_json(stdin: &openvm_sdk::StdIn, filename: &str) { // dump stdin to file let mut json: serde_json::Value = serde_json::from_str("{\"input\":[]}").unwrap(); @@ -86,7 +87,7 @@ pub fn save_stdin_as_json(stdin: &openvm_sdk::StdIn, filename: &str) { hex::encode(bytes) ))); } - if let Err(e) = std::fs::write(&filename, serde_json::to_string_pretty(&json).unwrap()) { + if let Err(e) = std::fs::write(filename, serde_json::to_string_pretty(&json).unwrap()) { tracing::warn!("Failed to write stdin to {}: {}", filename, e); } else { tracing::info!("Wrote stdin to {}", filename); diff --git a/crates/types/Cargo.toml b/crates/types/Cargo.toml index a8abefbd..9a063d42 100644 --- a/crates/types/Cargo.toml +++ b/crates/types/Cargo.toml @@ -9,8 +9,8 @@ version.workspace = true [dependencies] types-base = { path = "base", package = "scroll-zkvm-types-base" } -types-chunk = { path = "chunk", package = "scroll-zkvm-types-chunk", features = ["scroll-compress-ratio"] } -types-batch = { path = "batch", package = "scroll-zkvm-types-batch" } +types-chunk = { path = "chunk", package = "scroll-zkvm-types-chunk", features = ["host"] } +types-batch = { path = "batch", package = "scroll-zkvm-types-batch", features = ["host"] } types-bundle = { path = "bundle", package = "scroll-zkvm-types-bundle" } openvm-sdk = { workspace = true } @@ -23,4 +23,3 @@ sbv-primitives.workspace = true serde.workspace = true base64.workspace = true bincode_v1.workspace = true -c-kzg.workspace = true diff --git a/crates/types/batch/Cargo.toml b/crates/types/batch/Cargo.toml index 3e0ed250..108d0c5b 100644 --- a/crates/types/batch/Cargo.toml +++ b/crates/types/batch/Cargo.toml @@ -9,7 +9,6 @@ version.workspace = true [dependencies] alloy-primitives = { workspace = true } -bincode = { workspace = true } rkyv.workspace = true serde.workspace = true itertools.workspace = true @@ -22,11 +21,14 @@ openvm-ecc-guest = { workspace = true, features = ["halo2curves"] } openvm-pairing-guest = { workspace = true, features = ["halo2curves"] } openvm-pairing = { workspace = true, features = ["bls12_381", "halo2curves"] } openvm-sha2.workspace = true -openvm-sha256-guest.workspace = true halo2curves-axiom = "0.7.0" +sbv-primitives = { workspace = true, optional = true } +c-kzg = { workspace = true, optional = true } + [features] default = [] +host = ["dep:sbv-primitives", "dep:c-kzg"] [dev-dependencies] c-kzg = { workspace = true } diff --git a/crates/types/batch/src/builder/mod.rs b/crates/types/batch/src/builder/mod.rs index 822ea3f9..591eef27 100644 --- a/crates/types/batch/src/builder/mod.rs +++ b/crates/types/batch/src/builder/mod.rs @@ -11,14 +11,15 @@ pub mod validium; use types_base::public_inputs::{batch::BatchInfo, chunk::ChunkInfo}; -use crate::{BatchHeader, BatchHeaderV6, BatchHeaderV7, BatchHeaderV8, Bytes48, payload::Payload}; +use crate::{ + BatchHeader, BatchHeaderV6, BatchHeaderV7, BatchHeaderV8, PointEvalWitness, payload::Payload, +}; pub struct BuilderArgs { pub header: Header, pub chunk_infos: Vec, pub blob_bytes: Vec, - pub kzg_commitment: Option, - pub kzg_proof: Option, + pub point_eval_witness: Option, } pub type BuilderArgsV6 = BuilderArgs; diff --git a/crates/types/batch/src/builder/v7.rs b/crates/types/batch/src/builder/v7.rs index 8fd3dc2b..78556df3 100644 --- a/crates/types/batch/src/builder/v7.rs +++ b/crates/types/batch/src/builder/v7.rs @@ -47,12 +47,11 @@ impl super::BatchInfoBuilder for GenericBatchInfoBuilderV7

{ let (challenge, evaluation) = blob_poly.evaluate(challenge_digest); // Verify that the KZG commitment does in fact match the on-chain versioned hash. - let kzg_commitment = args - .kzg_commitment - .expect("batch v7 onwards must have kzg commitment"); - let kzg_proof = args - .kzg_proof - .expect("batch v7 onwards must have kzg proof"); + let point_eval_witness = args + .point_eval_witness + .expect("batch v7 onwards must have kzg witness"); + let kzg_commitment = point_eval_witness.kzg_commitment; + let kzg_proof = point_eval_witness.kzg_proof; assert_eq!( kzg_to_versioned_hash(&kzg_commitment), args.header.blob_versioned_hash(), diff --git a/crates/types/batch/src/lib.rs b/crates/types/batch/src/lib.rs index 5b21108c..1e9c38be 100644 --- a/crates/types/batch/src/lib.rs +++ b/crates/types/batch/src/lib.rs @@ -15,10 +15,13 @@ pub use payload::{ v8::{EnvelopeV8, PayloadV8}, }; -mod blob_consistency; +pub mod blob_consistency; mod builder; mod witness; pub use witness::{ ArchivedLegacyBatchWitness, BatchWitness, Bytes48, LegacyBatchWitness, PointEvalWitness, + build_point_eval_witness, }; + +pub mod utils; diff --git a/crates/types/batch/src/utils.rs b/crates/types/batch/src/utils.rs new file mode 100644 index 00000000..c15cdba0 --- /dev/null +++ b/crates/types/batch/src/utils.rs @@ -0,0 +1,55 @@ +#[cfg(feature = "host")] +pub mod point_eval { + use crate::blob_consistency::kzg_to_versioned_hash; + + use c_kzg; + use sbv_primitives::{B256 as H256, U256, types::eips::eip4844::BLS_MODULUS}; + + /// Given the blob-envelope, translate it to a fixed size EIP-4844 blob. + /// + /// For every 32-bytes chunk in the blob, the most-significant byte is set to 0 while the other + /// 31 bytes are copied from the provided blob-envelope. + pub fn to_blob(envelope_bytes: &[u8]) -> c_kzg::Blob { + let mut blob_bytes = [0u8; c_kzg::BYTES_PER_BLOB]; + + assert!( + envelope_bytes.len() + <= c_kzg::FIELD_ELEMENTS_PER_BLOB * (c_kzg::BYTES_PER_FIELD_ELEMENT - 1), + "too many bytes in blob envelope", + ); + + for (i, &byte) in envelope_bytes.iter().enumerate() { + blob_bytes[(i / 31) * 32 + 1 + (i % 31)] = byte; + } + + c_kzg::Blob::new(blob_bytes) + } + + /// Get the KZG commitment from an EIP-4844 blob. + pub fn blob_to_kzg_commitment(blob: &c_kzg::Blob) -> c_kzg::KzgCommitment { + c_kzg::ethereum_kzg_settings(0) + .blob_to_kzg_commitment(blob) + .expect("blob to kzg commitment should succeed") + } + + /// Get the EIP-4844 versioned hash from the KZG commitment. + pub fn get_versioned_hash(commitment: &c_kzg::KzgCommitment) -> H256 { + H256::new(kzg_to_versioned_hash(commitment.to_bytes().as_slice())) + } + + /// Get x for kzg proof from challenge hash + pub fn get_x_from_challenge(challenge: H256) -> U256 { + U256::from_be_bytes(challenge.0) % BLS_MODULUS + } + + /// Generate KZG proof and evaluation given the blob (polynomial) and a random challenge. + pub fn get_kzg_proof(blob: &c_kzg::Blob, challenge: H256) -> (c_kzg::KzgProof, U256) { + let challenge = get_x_from_challenge(challenge); + + let (proof, y) = c_kzg::ethereum_kzg_settings(0) + .compute_kzg_proof(blob, &c_kzg::Bytes32::new(challenge.to_be_bytes())) + .expect("kzg proof should succeed"); + + (proof, U256::from_be_slice(y.as_slice())) + } +} diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index e4f8bbd3..83c506a6 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -62,6 +62,13 @@ pub struct PointEvalWitness { pub kzg_proof: Bytes48, } +pub fn build_point_eval_witness(kzg_commitment: Bytes48, kzg_proof: Bytes48) -> PointEvalWitness { + PointEvalWitness { + kzg_commitment, + kzg_proof, + } +} + /// Witness to the batch circuit. #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] pub struct BatchWitness { @@ -106,6 +113,7 @@ pub struct LegacyBatchWitness { #[rkyv()] pub blob_bytes: Vec, /// Witness for point evaluation + #[rkyv()] pub point_eval_witness: PointEvalWitness, /// Header for reference. #[rkyv()] @@ -117,11 +125,12 @@ pub struct LegacyBatchWitness { impl From for LegacyBatchWitness { fn from(value: BatchWitness) -> Self { + let point_eval_witness = value.point_eval_witness.expect("should not be none"); Self { chunk_proofs: value.chunk_proofs, chunk_infos: value.chunk_infos.into_iter().map(|c| c.into()).collect(), blob_bytes: value.blob_bytes, - point_eval_witness: value.point_eval_witness.expect("should not be none"), + point_eval_witness, reference_header: value.reference_header, fork_name: value.fork_name, } @@ -144,8 +153,7 @@ impl From<&BatchWitness> for BatchInfo { header: *header, chunk_infos, blob_bytes: witness.blob_bytes.to_vec(), - kzg_commitment: None, - kzg_proof: None, + point_eval_witness: None, }; BatchInfoBuilderV6::build(args) } @@ -158,8 +166,7 @@ impl From<&BatchWitness> for BatchInfo { header: *header, chunk_infos, blob_bytes: witness.blob_bytes.to_vec(), - kzg_commitment: Some(point_eval_witness.kzg_commitment), - kzg_proof: Some(point_eval_witness.kzg_proof), + point_eval_witness: Some(point_eval_witness.clone()), }; BatchInfoBuilderV7::build(args) } @@ -172,8 +179,7 @@ impl From<&BatchWitness> for BatchInfo { header: *header, chunk_infos, blob_bytes: witness.blob_bytes.to_vec(), - kzg_commitment: Some(point_eval_witness.kzg_commitment), - kzg_proof: Some(point_eval_witness.kzg_proof), + point_eval_witness: Some(point_eval_witness.clone()), }; BatchInfoBuilderV8::build(args) } diff --git a/crates/types/chunk/Cargo.toml b/crates/types/chunk/Cargo.toml index b184445d..e512e19e 100644 --- a/crates/types/chunk/Cargo.toml +++ b/crates/types/chunk/Cargo.toml @@ -24,6 +24,6 @@ types-base = { path = "../base", package = "scroll-zkvm-types-base"} [features] default = [] -# should be enabled at host +host = ["scroll-compress-ratio"] scroll-compress-ratio = ["sbv-primitives/scroll-compress-ratio"] openvm = ["sbv-core/scroll-openvm"] diff --git a/crates/types/src/utils.rs b/crates/types/src/utils.rs index 4e0af5be..b84bb347 100644 --- a/crates/types/src/utils.rs +++ b/crates/types/src/utils.rs @@ -66,60 +66,5 @@ pub mod serialize_vk { } pub mod point_eval { - use super::sha256_rv32; - use c_kzg; - use sbv_primitives::{B256 as H256, U256, types::eips::eip4844::BLS_MODULUS}; - - /// Given the blob-envelope, translate it to a fixed size EIP-4844 blob. - /// - /// For every 32-bytes chunk in the blob, the most-significant byte is set to 0 while the other - /// 31 bytes are copied from the provided blob-envelope. - pub fn to_blob(envelope_bytes: &[u8]) -> c_kzg::Blob { - let mut blob_bytes = [0u8; c_kzg::BYTES_PER_BLOB]; - - assert!( - envelope_bytes.len() - <= c_kzg::FIELD_ELEMENTS_PER_BLOB * (c_kzg::BYTES_PER_FIELD_ELEMENT - 1), - "too many bytes in blob envelope", - ); - - for (i, &byte) in envelope_bytes.iter().enumerate() { - blob_bytes[(i / 31) * 32 + 1 + (i % 31)] = byte; - } - - c_kzg::Blob::new(blob_bytes) - } - - /// Get the KZG commitment from an EIP-4844 blob. - pub fn blob_to_kzg_commitment(blob: &c_kzg::Blob) -> c_kzg::KzgCommitment { - c_kzg::ethereum_kzg_settings(0) - .blob_to_kzg_commitment(blob) - .expect("blob to kzg commitment should succeed") - } - - /// The version for KZG as per EIP-4844. - const VERSIONED_HASH_VERSION_KZG: u8 = 1; - - /// Get the EIP-4844 versioned hash from the KZG commitment. - pub fn get_versioned_hash(commitment: &c_kzg::KzgCommitment) -> H256 { - let mut hash: [u8; 32] = sha256_rv32(commitment.to_bytes().as_slice()).into(); - hash[0] = VERSIONED_HASH_VERSION_KZG; - H256::new(hash) - } - - /// Get x for kzg proof from challenge hash - pub fn get_x_from_challenge(challenge: H256) -> U256 { - U256::from_be_bytes(challenge.0) % BLS_MODULUS - } - - /// Generate KZG proof and evaluation given the blob (polynomial) and a random challenge. - pub fn get_kzg_proof(blob: &c_kzg::Blob, challenge: H256) -> (c_kzg::KzgProof, U256) { - let challenge = get_x_from_challenge(challenge); - - let (proof, y) = c_kzg::ethereum_kzg_settings(0) - .compute_kzg_proof(blob, &c_kzg::Bytes32::new(challenge.to_be_bytes())) - .expect("kzg proof should succeed"); - - (proof, U256::from_be_slice(y.as_slice())) - } + pub use types_batch::utils::point_eval::*; } From d386e213645edc8297c9f520ea8caa3659bd7cf9 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Fri, 5 Sep 2025 21:57:52 +0800 Subject: [PATCH 61/84] fix merge --- crates/integration/src/utils/mod.rs | 4 ++- crates/types/batch/src/witness.rs | 50 +++++++++++++++-------------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/crates/integration/src/utils/mod.rs b/crates/integration/src/utils/mod.rs index f3b0194d..d7a9d5f3 100644 --- a/crates/integration/src/utils/mod.rs +++ b/crates/integration/src/utils/mod.rs @@ -6,9 +6,10 @@ use sbv_primitives::{ }; use scroll_zkvm_types::batch::build_point_eval_witness; use scroll_zkvm_types::{ - batch::{BatchHeader, BatchHeaderV6, BatchHeaderV7, BatchInfo, BatchWitness, ReferenceHeader}, + batch::{ BatchHeader, BatchHeaderV6, BatchHeaderV7, BatchHeaderValidium, BatchHeaderValidiumV1, BatchInfo, BatchWitness, ReferenceHeader, + }, bundle::{BundleInfo, BundleWitness}, chunk::{ChunkInfo, ChunkWitness}, public_inputs::{ForkName, MultiVersionPublicInputs}, @@ -361,6 +362,7 @@ pub fn build_batch_witnesses_validium( chunk_digests.push(keccak256(&tx_bytes)); payload_bytes.extend(tx_bytes); (meta_chunk_sizes, chunk_digests, payload_bytes) + }, ); // sanity check, verify the correction of execute diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index 0f1c7826..df1772fe 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -76,35 +76,35 @@ pub struct LegacyPointEvalWitness { pub kzg_proof: Bytes48, } -pub fn build_point_eval_witness(kzg_commitment: Bytes48, kzg_proof: Bytes48) -> PointEvalWitness { - PointEvalWitness { - kzg_commitment, - kzg_proof, +impl From for LegacyPointEvalWitness { + fn from(value: PointEvalWitness) -> Self { + Self { + kzg_commitment: build_point(value.kzg_commitment_x, value.kzg_commitment_y) + .unwrap() + .to_compressed_be(), + kzg_proof: build_point(value.kzg_proof_x, value.kzg_proof_y) + .unwrap() + .to_compressed_be(), + } } } -/// Witness to the batch circuit. -#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] -pub struct BatchWitness { - /// The version byte as per [version][types_base::version]. - pub version: u8, - /// Flattened root proofs from all chunks in the batch. - pub chunk_proofs: Vec, - /// Chunk infos. - pub chunk_infos: Vec, - /// Blob bytes. - pub blob_bytes: Vec, - /// Witness for point evaluation. - /// - /// Optional field as some domains (for eg. Validium) may not utilise EIP-4844 for DA, - /// in case of which there is no point-eval witness. - pub point_eval_witness: Option, - /// Header for reference. - pub reference_header: ReferenceHeader, - /// The code version specify the chain spec - pub fork_name: ForkName, +pub fn build_point_eval_witness(kzg_commitment: Bytes48, kzg_proof: Bytes48) -> PointEvalWitness { + use halo2curves_axiom::bls12_381::G1Affine; + let kzg_commitment = G1Affine::from_compressed_be(&kzg_commitment).expect("invalid"); + let kzg_proof = G1Affine::from_compressed_be(&kzg_proof).expect("invalid"); + PointEvalWitness { + kzg_commitment_x: kzg_commitment.x.to_bytes_be(), + kzg_commitment_y: kzg_commitment.y.to_bytes_be(), + kzg_proof_x: kzg_proof.x.to_bytes_be(), + kzg_proof_y: kzg_proof.y.to_bytes_be(), + } } +#[allow(dead_code)] +pub fn build_intrinsic_point( + x: Bytes48, + y: Bytes48, ) -> Option { use openvm_algebra_guest::IntMod; use openvm_ecc_guest::weierstrass::WeierstrassPoint; @@ -124,6 +124,8 @@ pub fn build_point(x: Bytes48, y: Bytes48) -> Option, /// Chunk infos. From d9aad74172f6e47658c9a1197c73962679cc94c3 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Fri, 5 Sep 2025 22:02:04 +0800 Subject: [PATCH 62/84] sanity check for blob --- crates/types/batch/src/builder/v7.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/crates/types/batch/src/builder/v7.rs b/crates/types/batch/src/builder/v7.rs index ca081c36..73ed00be 100644 --- a/crates/types/batch/src/builder/v7.rs +++ b/crates/types/batch/src/builder/v7.rs @@ -29,6 +29,16 @@ fn verify_blob_versioned_hash( challenge_digest: B256, witness: PointEvalWitness, ) { + #[cfg(feature = "host")] + { + use crate::utils::point_eval; + let kzg_blob = point_eval::to_blob(&blob_bytes); + let kzg_commitment = point_eval::blob_to_kzg_commitment(&kzg_blob); + assert_eq!( + point_eval::get_versioned_hash(&kzg_commitment), + blob_versioned_hash + ); + } let blob_poly = BlobPolynomial::new(blob_bytes); // Barycentric evaluation of blob polynomial. let (challenge, evaluation) = blob_poly.evaluate(challenge_digest); From a94b3a619726d599c67849543fdb33f0e6afbac6 Mon Sep 17 00:00:00 2001 From: Rohit Narurkar Date: Mon, 8 Sep 2025 11:14:14 +0100 Subject: [PATCH 63/84] test: more data (feynman) for validium --- crates/integration/src/testers/batch.rs | 14 ++- crates/integration/src/testers/chunk.rs | 12 +- .../testdata/validium/witnesses/347.json | 87 +++++++++++++ .../validium/witnesses/347_validium_txs.json | 21 ++++ .../testdata/validium/witnesses/348.json | 79 ++++++++++++ .../validium/witnesses/348_validium_txs.json | 1 + .../testdata/validium/witnesses/349.json | 41 +++++++ .../validium/witnesses/349_validium_txs.json | 1 + .../testdata/validium/witnesses/350.json | 41 +++++++ .../validium/witnesses/350_validium_txs.json | 1 + .../testdata/validium/witnesses/351.json | 41 +++++++ .../validium/witnesses/351_validium_txs.json | 1 + .../testdata/validium/witnesses/352.json | 111 +++++++++++++++++ .../validium/witnesses/352_validium_txs.json | 1 + .../testdata/validium/witnesses/353.json | 41 +++++++ .../validium/witnesses/353_validium_txs.json | 1 + .../testdata/validium/witnesses/354.json | 41 +++++++ .../validium/witnesses/354_validium_txs.json | 1 + .../testdata/validium/witnesses/355.json | 41 +++++++ .../validium/witnesses/355_validium_txs.json | 1 + .../testdata/validium/witnesses/356.json | 41 +++++++ .../validium/witnesses/356_validium_txs.json | 1 + .../testdata/validium/witnesses/357.json | 41 +++++++ .../validium/witnesses/357_validium_txs.json | 1 + .../testdata/validium/witnesses/358.json | 41 +++++++ .../validium/witnesses/358_validium_txs.json | 1 + .../testdata/validium/witnesses/359.json | 41 +++++++ .../validium/witnesses/359_validium_txs.json | 1 + .../testdata/validium/witnesses/360.json | 41 +++++++ .../validium/witnesses/360_validium_txs.json | 1 + .../testdata/validium/witnesses/361.json | 41 +++++++ .../validium/witnesses/361_validium_txs.json | 1 + .../testdata/validium/witnesses/362.json | 41 +++++++ .../validium/witnesses/362_validium_txs.json | 1 + .../testdata/validium/witnesses/363.json | 41 +++++++ .../validium/witnesses/363_validium_txs.json | 1 + .../testdata/validium/witnesses/364.json | 41 +++++++ .../validium/witnesses/364_validium_txs.json | 1 + .../testdata/validium/witnesses/365.json | 41 +++++++ .../validium/witnesses/365_validium_txs.json | 1 + .../testdata/validium/witnesses/366.json | 41 +++++++ .../validium/witnesses/366_validium_txs.json | 1 + .../testdata/validium/witnesses/367.json | 87 +++++++++++++ .../validium/witnesses/367_validium_txs.json | 21 ++++ .../testdata/validium/witnesses/368.json | 78 ++++++++++++ .../validium/witnesses/368_validium_txs.json | 1 + .../testdata/validium/witnesses/369.json | 114 ++++++++++++++++++ .../validium/witnesses/369_validium_txs.json | 1 + .../testdata/validium/witnesses/370.json | 41 +++++++ .../validium/witnesses/370_validium_txs.json | 1 + .../testdata/validium/witnesses/371.json | 41 +++++++ .../validium/witnesses/371_validium_txs.json | 1 + .../testdata/validium/witnesses/372.json | 41 +++++++ .../validium/witnesses/372_validium_txs.json | 1 + .../testdata/validium/witnesses/373.json | 41 +++++++ .../validium/witnesses/373_validium_txs.json | 1 + .../testdata/validium/witnesses/374.json | 41 +++++++ .../validium/witnesses/374_validium_txs.json | 1 + .../testdata/validium/witnesses/375.json | 41 +++++++ .../validium/witnesses/375_validium_txs.json | 1 + .../testdata/validium/witnesses/376.json | 41 +++++++ .../validium/witnesses/376_validium_txs.json | 1 + .../testdata/validium/witnesses/377.json | 41 +++++++ .../validium/witnesses/377_validium_txs.json | 1 + .../testdata/validium/witnesses/378.json | 41 +++++++ .../validium/witnesses/378_validium_txs.json | 1 + .../testdata/validium/witnesses/379.json | 41 +++++++ .../validium/witnesses/379_validium_txs.json | 1 + .../testdata/validium/witnesses/380.json | 41 +++++++ .../validium/witnesses/380_validium_txs.json | 1 + .../testdata/validium/witnesses/381.json | 41 +++++++ .../validium/witnesses/381_validium_txs.json | 1 + .../testdata/validium/witnesses/382.json | 41 +++++++ .../validium/witnesses/382_validium_txs.json | 1 + .../testdata/validium/witnesses/383.json | 41 +++++++ .../validium/witnesses/383_validium_txs.json | 1 + .../testdata/validium/witnesses/384.json | 41 +++++++ .../validium/witnesses/384_validium_txs.json | 1 + .../testdata/validium/witnesses/385.json | 41 +++++++ .../validium/witnesses/385_validium_txs.json | 1 + .../testdata/validium/witnesses/386.json | 41 +++++++ .../validium/witnesses/386_validium_txs.json | 1 + .../testdata/validium/witnesses/387.json | 41 +++++++ .../validium/witnesses/387_validium_txs.json | 1 + .../testdata/validium/witnesses/388.json | 41 +++++++ .../validium/witnesses/388_validium_txs.json | 1 + .../testdata/validium/witnesses/389.json | 41 +++++++ .../validium/witnesses/389_validium_txs.json | 1 + .../testdata/validium/witnesses/390.json | 41 +++++++ .../validium/witnesses/390_validium_txs.json | 1 + .../testdata/validium/witnesses/391.json | 41 +++++++ .../validium/witnesses/391_validium_txs.json | 1 + .../testdata/validium/witnesses/392.json | 41 +++++++ .../validium/witnesses/392_validium_txs.json | 1 + .../testdata/validium/witnesses/393.json | 41 +++++++ .../validium/witnesses/393_validium_txs.json | 1 + .../testdata/validium/witnesses/394.json | 41 +++++++ .../validium/witnesses/394_validium_txs.json | 1 + .../testdata/validium/witnesses/395.json | 41 +++++++ .../validium/witnesses/395_validium_txs.json | 1 + .../testdata/validium/witnesses/396.json | 41 +++++++ .../validium/witnesses/396_validium_txs.json | 1 + .../testdata/validium/witnesses/397.json | 89 ++++++++++++++ .../validium/witnesses/397_validium_txs.json | 21 ++++ crates/integration/tests/bundle_circuit.rs | 2 +- crates/types/base/src/version.rs | 3 +- crates/types/batch/src/builder/v7.rs | 2 +- 107 files changed, 2579 insertions(+), 14 deletions(-) create mode 100644 crates/integration/testdata/validium/witnesses/347.json create mode 100644 crates/integration/testdata/validium/witnesses/347_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/348.json create mode 100644 crates/integration/testdata/validium/witnesses/348_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/349.json create mode 100644 crates/integration/testdata/validium/witnesses/349_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/350.json create mode 100644 crates/integration/testdata/validium/witnesses/350_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/351.json create mode 100644 crates/integration/testdata/validium/witnesses/351_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/352.json create mode 100644 crates/integration/testdata/validium/witnesses/352_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/353.json create mode 100644 crates/integration/testdata/validium/witnesses/353_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/354.json create mode 100644 crates/integration/testdata/validium/witnesses/354_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/355.json create mode 100644 crates/integration/testdata/validium/witnesses/355_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/356.json create mode 100644 crates/integration/testdata/validium/witnesses/356_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/357.json create mode 100644 crates/integration/testdata/validium/witnesses/357_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/358.json create mode 100644 crates/integration/testdata/validium/witnesses/358_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/359.json create mode 100644 crates/integration/testdata/validium/witnesses/359_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/360.json create mode 100644 crates/integration/testdata/validium/witnesses/360_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/361.json create mode 100644 crates/integration/testdata/validium/witnesses/361_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/362.json create mode 100644 crates/integration/testdata/validium/witnesses/362_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/363.json create mode 100644 crates/integration/testdata/validium/witnesses/363_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/364.json create mode 100644 crates/integration/testdata/validium/witnesses/364_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/365.json create mode 100644 crates/integration/testdata/validium/witnesses/365_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/366.json create mode 100644 crates/integration/testdata/validium/witnesses/366_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/367.json create mode 100644 crates/integration/testdata/validium/witnesses/367_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/368.json create mode 100644 crates/integration/testdata/validium/witnesses/368_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/369.json create mode 100644 crates/integration/testdata/validium/witnesses/369_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/370.json create mode 100644 crates/integration/testdata/validium/witnesses/370_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/371.json create mode 100644 crates/integration/testdata/validium/witnesses/371_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/372.json create mode 100644 crates/integration/testdata/validium/witnesses/372_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/373.json create mode 100644 crates/integration/testdata/validium/witnesses/373_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/374.json create mode 100644 crates/integration/testdata/validium/witnesses/374_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/375.json create mode 100644 crates/integration/testdata/validium/witnesses/375_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/376.json create mode 100644 crates/integration/testdata/validium/witnesses/376_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/377.json create mode 100644 crates/integration/testdata/validium/witnesses/377_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/378.json create mode 100644 crates/integration/testdata/validium/witnesses/378_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/379.json create mode 100644 crates/integration/testdata/validium/witnesses/379_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/380.json create mode 100644 crates/integration/testdata/validium/witnesses/380_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/381.json create mode 100644 crates/integration/testdata/validium/witnesses/381_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/382.json create mode 100644 crates/integration/testdata/validium/witnesses/382_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/383.json create mode 100644 crates/integration/testdata/validium/witnesses/383_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/384.json create mode 100644 crates/integration/testdata/validium/witnesses/384_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/385.json create mode 100644 crates/integration/testdata/validium/witnesses/385_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/386.json create mode 100644 crates/integration/testdata/validium/witnesses/386_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/387.json create mode 100644 crates/integration/testdata/validium/witnesses/387_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/388.json create mode 100644 crates/integration/testdata/validium/witnesses/388_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/389.json create mode 100644 crates/integration/testdata/validium/witnesses/389_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/390.json create mode 100644 crates/integration/testdata/validium/witnesses/390_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/391.json create mode 100644 crates/integration/testdata/validium/witnesses/391_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/392.json create mode 100644 crates/integration/testdata/validium/witnesses/392_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/393.json create mode 100644 crates/integration/testdata/validium/witnesses/393_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/394.json create mode 100644 crates/integration/testdata/validium/witnesses/394_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/395.json create mode 100644 crates/integration/testdata/validium/witnesses/395_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/396.json create mode 100644 crates/integration/testdata/validium/witnesses/396_validium_txs.json create mode 100644 crates/integration/testdata/validium/witnesses/397.json create mode 100644 crates/integration/testdata/validium/witnesses/397_validium_txs.json diff --git a/crates/integration/src/testers/batch.rs b/crates/integration/src/testers/batch.rs index cf49772b..1494f3a9 100644 --- a/crates/integration/src/testers/batch.rs +++ b/crates/integration/src/testers/batch.rs @@ -204,8 +204,18 @@ pub fn preset_batch() -> BatchTaskGenerator { BatchTaskGenerator::from_chunk_tasks(&preset_chunk_multiple(), None) } -pub fn preset_batch_validium() -> BatchTaskGenerator { - BatchTaskGenerator::from_chunk_tasks(&[preset_chunk_validium()], None) +pub fn preset_batch_validium() -> Vec { + let validium_chunks = preset_chunk_validium(); + assert_eq!(validium_chunks.len(), 5); + create_canonical_tasks( + [ + &validium_chunks[0..=1], + &validium_chunks[2..=3], + &validium_chunks[4..=4], + ] + .into_iter(), + ) + .expect("must succeed for preset collection") } /// preset examples for multiple task diff --git a/crates/integration/src/testers/chunk.rs b/crates/integration/src/testers/chunk.rs index 60483310..076ea64b 100644 --- a/crates/integration/src/testers/chunk.rs +++ b/crates/integration/src/testers/chunk.rs @@ -268,12 +268,8 @@ pub fn preset_chunk_multiple() -> Vec { .clone() } -pub fn preset_chunk_validium() -> ChunkTaskGenerator { - let block_range = 1141071..=1141071; - - ChunkTaskGenerator { - version: Version::validium_v1(), - block_range: block_range.collect(), - ..Default::default() - } +pub fn preset_chunk_validium() -> Vec { + let block_range = vec![347..=355, 356..=360, 361..=370, 371..=375, 376..=397]; + create_canonical_tasks(Version::validium_v1(), block_range.into_iter()) + .expect("must succeed for preset collection") } diff --git a/crates/integration/testdata/validium/witnesses/347.json b/crates/integration/testdata/validium/witnesses/347.json new file mode 100644 index 00000000..ca1d9f35 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/347.json @@ -0,0 +1,87 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x618406701876bd364f61957d37acbd564fa3ccbb70862f6404357c0a448b5bf2", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0x20354c5b94162df1610e91b01c6d871e8fa7171533cfc55da76e31c89e31398d", + "transactions_root": "0x6cd2676f5e27667eb305c3cec721673497431682db49caf13d8e66733a049efc", + "receipts_root": "0x55ba0a39597a57f7f92f28f24186b427b6f56b3353bfe9e82e2a050c6ed2b3a8", + "withdrawals_root": null, + "logs_bloom": "0x00000800000000040000000000000000000000000000000000000000000200000000000000000000000000000000008000000000000000000000002000000000000000000000000000000008000000000000000001000000000000800000000000000000820100400000000000000800000000000000000000000018000000010000000000000000000040000040018000000000000000000000000000000000000000200000400000800000000000200000000010000000040400000000100000000002000000000000000000000008000000000000000000001000000020000000000000000000000800000000000000000000000008000000000008000002", + "difficulty": "0x1", + "number": 347, + "gas_limit": 14249627, + "gas_used": 155443, + "timestamp": 1757324356, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0x3aa1cc5b789a3658d8fc9a7ba42529ae38b67ff5cb9820576f7d358ccd1ed839", + "transactions": [ + { + "TxL1Message": { + "hash": "0xbbca21975276ee293d2cdd03017f10e924d6b8a9538b24ed6289f7ebb558be31", + "transaction": { + "queueIndex": "0x2", + "gas": "0xf4240", + "to": "0xdf45f4790e20509959fccc0d09245b216abdaa37", + "value": "0x0", + "sender": "0xfeea7a92fd46c25a475829f1975876ba48c13ceb", + "input": "0x8ef1332e000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562000000000000000000000000694c7feee8bdad3c5d58dcbeb3da08b122ff27760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c100000000000000000000000038cb00e044d3cdd3c9f90b7efde61ef62e38fdf3000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a49000000000000000000000000cf360f1fc8763a38e3e1a19947bceb9f764a7a7c000000000000000000000000aaa2a36dc9ae3574cc5bd08b3564867b0b2ed0f3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } + } + ], + "withdrawals": null, + "states": [ + "0xf869a020d0af77d4edcb78fd0b68acfe8ba4cf68a24a92bc8bf96c5509705ef4e46850b846f8440280a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594694c7feee8bdad3c5d58dcbeb3da08b122ff2776", + "0xf8518080a0d63199be30002d209b2f07b14a70e3fe0cb3fb6ffab8894ae69079d6f747d4288080808080808080a0b64fc9bf76504f04c8d79528469ff1e23699181fc953f8a8705f587ceca728258080808080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf869a020273fbce982163432756c92acee04339663618b2ba6c989cf2ee90aab28543fb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0caba68b9ba765c98004e8d5779c8d5eaf818e1d9636baa33514f64ef8715311e", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da06c258420ecb7425e276762f87510f4cf397fdb7be6994fe6ebe936501184941ca025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca020b4e61f0f83a8a39276c010a3bfa54d1a5ed0430cd118b35acf3138d559a0c6a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594ba4e99daabe85a80e366159bee6941555d7fa0e8", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a049c95d9582a1e6be0c9c609507b1fda5379a0d2edf7d24b18ce1bd9eb91633c580", + "0xf90171a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a06621121d694ad95726a2ca5b4fa3899cd98b16f6c3b73ae3aada05ea5741d49ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da065b99b0e1ebde1beb7bb2dc0b4d4c04d600bbb073caf99eceb18c06e954de956a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0e8a5ca5edfa3d0d8c857d7ea092a7a8e40c9ee47772373dd48730f6d6551a57f808080a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf842a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a09ff6f1a8aeba2ef44a0d974d8fa4abfa205f7094c475b53a076fe3f91baf5c37", + "0xf888a02087efc2b625c18816a35848616c5247a1da19c01d39f8106c1cdd496db5a52ab865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a0e2c1e7bad536abb915bab1edd416369b5a0d053251e015e3c7a275278b7cffb8a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d4819594d159188ae0eef57b221b6574313e35ed5cd4dcc5", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a05e1ab6c9eaffab5f501021323994149fd4290ca143e8c177e96e2522ba427d4fa0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf869a020a42a2312e58fde1ddba031d86ec9c2484386e302494241b82105397dc57ffcb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0c71c22298afad00443f07657a352641692a5ceb76f68c840a260bfd2bb6f2384", + "0xf90131a0415be64c3141b9cb7f779484ffc834917ca6cdc6dd10fef37b0e4d164dc1d32980a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da516180a05eef6aa39e018e7c9637fbf622855472d6d53e72612f48335319823aadb210a4a0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0939172a011c8caaf28524062e8ab21adfc61eb1ba52a97975b568a93e36e44a2a041dbaa07b1c2a073bfb7f06bfc17ae4fd67c629ea47a483d2f2893d55fd628cb8080a0d0cde8f5e35f8fd34db5007b3f32055bedb90f4e557d74e3206949e751b5c8aaa077964a3d51ca6d84c97526434e96ca68d015f6fcb056fc8b25424f56b0b7b86f80808080", + "0xf869a0202b9f197aaaffc90ca95aedca97fb61342c8426f9d501e6940d5c6ca4e63417b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xf89180808080a0b01dff3b495f178dacb3fe51da4d0d71edfe15751ebdc8c8b99ce95dc096abd580a08a9ece6c0581b29f0258010eafe9948e411a5ac9b232c410b3f1977dd44f341e808080a046ff8d1293b06f4b10fbe90a84a44209419abd752f53b044e8e394f9aa715c8380a04a423fad8dd11a1f506cfef42cc6df790a0ed3260768ec28a681b6a35a6a29ff80808080", + "0xf85180a087bd0d14a7c3e837f4c1924a01e3b0ebb8c76db822fb9e910512593d91721d4b808080808080808080a0c78ecc25eb2ca65d4ae28168b365aee5eef9250994eee96633501b6ba6cba1978080808080", + "0xf869a020d0dc00284bbf26bbb50d4e8d8edd193dc3c22d5d4a6ed6c595ea4cbac935bbb846f8440180a08dc7a0746c97521973913c50820ef2936f51dccdcf9d8dde0ab41e9eb288ae19a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf85180808080808080a0419f17c5c8e8392e190f4b3f098f72725a089100b7a313f62681827297579b9780a0f144b604936974b58ed40e0af9e8da3ada482aacd75316f90d71d51b92972b4d80808080808080", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a05eef6aa39e018e7c9637fbf622855472d6d53e72612f48335319823aadb210a4a08968f35693012a4149edcac94a158651e00cb62cff5d4ede25dfa85637408a70a0991bdf80f1517e84f6de0649577b5391ac036a8e7b161ca8af64ab92e6d17904a068f5c8400cccc32a720b141c8442bf35020f356c50af125b402092f48b385dcf8080a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a829594f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d959463fec5889034171b5ea6f51ba8b07400749fa081", + "0xf8718080a012029a027a77ca1b6f037157f1f0cdafcdf85e7dc03c30ad04c6f2838714de9a80808080a0997726d350b090ae7ac941071e6ccb4d3d2345eab29b213db6e33094423e69388080a02a3a0fc1952479e950b7ef6015a3667c81b9de102761af6b0750b7149331e455808080808080", + "0xf869a020eb33871a8575f30781f091b9677c4740fe09a9a0890354fb08f68b224adfc6b846f8440180a07d7081c4db24b391f3c7b1705f550ad87887223cdd2f3c68c254d8791d414418a0dbe40d0be513053796290e8ff404c74148f18f83e81385469bbb67ceec3897ea", + "0xf8b18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb2880a092f0e96bbb99b5db5259dc3f7587252d3b0271695590c502ec420525affc9f18808080a071f7bfaa0b222c05506d4b7c2c6a763b79c73fd03627d8747d131d946f842280a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0c557d0d8d6d1ccbbba16ce309be7fc47931cce54470663fa528da9c3a90ff37e808080808080", + "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", + "0xf87180a01dad1f4774da1b7e7886f9442777190af8c8b01869cf820b1fbe43d90d71f356808080808080a07e0318e868aa3819e52bdb31cf5ec275b3c2ba97fda0c53548a0e24f4b968762a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xf869a0205aa84538e7dde8cfa83ed6d1339a086fbe2e74cebf157f3450de22b63cd5e9b846f8440280a0bb2eadf59290e84312931dabdb4d14bd8d2dc95fbcce7aba34c197fdba5a20d5a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594b05b94a89ac46a6527332609f2f070ef84a29230" + ], + "codes": [ + "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f000000000000000000000000edd97a92fd46c25a475829f1975876ba48c12bda81565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f000000000000000000000000edd97a92fd46c25a475829f1975876ba48c12bda6001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x363d3d373d3d3d363d73ba4e99daabe85a80e366159bee6941555d7fa0e85af43d82803e903d91602b57fd5bf3", + "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", + "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa3781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e56281565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa376001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa376001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e5626001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa37169063b2267a7b903490610c22907f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a" + ] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/347_validium_txs.json b/crates/integration/testdata/validium/witnesses/347_validium_txs.json new file mode 100644 index 00000000..8b14b017 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/347_validium_txs.json @@ -0,0 +1,21 @@ +[ + { + "blockHash": "0x631b604aa3b6a5cb02249f0c9619912b5a766d0db99d249e16b9f2e6600be609", + "blockNumber": "0x15b", + "from": "0xfeea7a92fd46c25a475829f1975876ba48c13ceb", + "gas": "0xf4240", + "gasPrice": "0x0", + "hash": "0xfe9e8470c8d5840f9f6c25d1105f1e2ef51d31cc9407cfde40d474cbd4d1ab4b", + "input": "0x8ef1332e000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562000000000000000000000000694c7feee8bdad3c5d58dcbeb3da08b122ff27760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f00000000000000000000000038cb00e044d3cdd3c9f90b7efde61ef62e38fdf3000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a49000000000000000000000000cf360f1fc8763a38e3e1a19947bceb9f764a7a7c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504702f69ffc4e76bc4edda15f0dad49cfcb80198cd4d171a5b33a286d77cf4a249d3c7e1160b2d5f79268b44cc05431f9de21b0b56478b712727afe647ad9297ec352bfec52d17a9c4ea7ce40737abacb9c841f8fcc5ee8ebfffa58d43047afe2306f3ac2fdf6cf9fa3c4d293714767b4f2709a336000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "to": "0xdf45f4790e20509959fccc0d09245b216abdaa37", + "transactionIndex": "0x0", + "value": "0x0", + "type": "0x7e", + "v": "0x0", + "r": "0x0", + "s": "0x0", + "sender": "0xfeea7a92fd46c25a475829f1975876ba48c13ceb", + "queueIndex": "0x2" + } +] diff --git a/crates/integration/testdata/validium/witnesses/348.json b/crates/integration/testdata/validium/witnesses/348.json new file mode 100644 index 00000000..64491248 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/348.json @@ -0,0 +1,79 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x631b604aa3b6a5cb02249f0c9619912b5a766d0db99d249e16b9f2e6600be609", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0x72d0f8efb2cc9fc22dfde1f42392fce3a29c3a05e480e9f576cf2805296bc8b4", + "transactions_root": "0xbb17d0bf5b7782472737d8ecef1d9d4a2b7d5c2a989e446f2fb26940960c1299", + "receipts_root": "0xa3b9a45fbe216ed83d59ad8efb053971314961adee19131d18d2bc18fe5751fc", + "withdrawals_root": null, + "logs_bloom": "0x00000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010000000000000000000000800000010000000008000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000100000000002000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 348, + "gas_limit": 14235713, + "gas_used": 49318, + "timestamp": 1757324357, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0x20354c5b94162df1610e91b01c6d871e8fa7171533cfc55da76e31c89e31398d", + "transactions": [ + { + "Eip1559": { + "signature": { + "r": "0x3d0dee07dc8ef3f12cced3ba13a4e9b5223c40b4c7b2ac2f05428ec3d58e80c4", + "s": "0x5639335e825dba627b18a9561e243a7879aef8d2b077b6c3fa66e7e5af73cd2a", + "yParity": "0x0", + "v": "0x0" + }, + "transaction": { + "chain_id": 33333333, + "nonce": 0, + "gas_limit": 54555, + "max_fee_per_gas": 0, + "max_priority_fee_per_gas": 0, + "to": "0x928a1909db63ae7813e6318d098fd17439ec0a49", + "value": "0x0", + "access_list": [], + "input": "0xa9059cbb000000000000000000000000c10d16081a5982ebf93a568943a0ceade2b9dbe4000000000000000000000000000000000000000000000000002386f26fc10000" + } + } + } + ], + "withdrawals": null, + "states": [ + "0xf87180a01dad1f4774da1b7e7886f9442777190af8c8b01869cf820b1fbe43d90d71f356808080808080a07e0318e868aa3819e52bdb31cf5ec275b3c2ba97fda0c53548a0e24f4b968762a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf86ca020f884cdcd164a6b73972dc6625ecb078be7e607b54459f3edfaada99be20644b849f84780837f928ea0cc6b1f180857b9996f70f3c8295efa512aed726dff8bd0080175c8f2b559f7baa016c283a285466785d9df98d63618dd1640392d6dd816a845b7750add4ef95569", + "0xf869a0202b9f197aaaffc90ca95aedca97fb61342c8426f9d501e6940d5c6ca4e63417b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xe2a033f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301", + "0xeaa0205ac7183e12731b1fdb31f18b6ed738b2cb818c762fc182570baeeef0e3153b88872386f26fc10000", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb2880a092f0e96bbb99b5db5259dc3f7587252d3b0271695590c502ec420525affc9f18808080a071f7bfaa0b222c05506d4b7c2c6a763b79c73fd03627d8747d131d946f842280a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0c557d0d8d6d1ccbbba16ce309be7fc47931cce54470663fa528da9c3a90ff37e80a0452e441d55c7a114e65804e1ddc9f34e28fb61089eae75646fd31db95a7f8f3d80808080", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da06c258420ecb7425e276762f87510f4cf397fdb7be6994fe6ebe936501184941ca025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca020b4e61f0f83a8a39276c010a3bfa54d1a5ed0430cd118b35acf3138d559a0c6a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe7a03e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af85843b9aca00", + "0xf842a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a09ff6f1a8aeba2ef44a0d974d8fa4abfa205f7094c475b53a076fe3f91baf5c37", + "0xf8518080808080808080808080808080a024bdd88c7d6eaeb27e629dd21b5307a87f099702092034054347cbccedebcc1ea090fc13990cd48cd8f456160c91ce04113b93d18c777102ec0791002c8e4fab3e80", + "0xeaa020a4bec1d3298408bb5afcfcd9c430549c5b31f8aa5c5848151c0a55f473c34d88872386f26fc10000", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xe7a0365a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a885843b9aca00", + "0xf85180808080808080a0b53be1725c4c27f1b017b31743dff12f26afc56e484fef80254daede052f973a80a0f144b604936974b58ed40e0af9e8da3ada482aacd75316f90d71d51b92972b4d80808080808080", + "0xf89180808080a0b01dff3b495f178dacb3fe51da4d0d71edfe15751ebdc8c8b99ce95dc096abd580a08bc57c43dab35f5ff6386a03fb556b725a9f1929a62e2f3186cd8988d4bbd35c808080a046ff8d1293b06f4b10fbe90a84a44209419abd752f53b044e8e394f9aa715c8380a04a423fad8dd11a1f506cfef42cc6df790a0ed3260768ec28a681b6a35a6a29ff80808080", + "0xf869a020eb33871a8575f30781f091b9677c4740fe09a9a0890354fb08f68b224adfc6b846f8440180a089bd108af6f628c3fa6abfcd9c99f723c087720f6966b954544b68b7c75ef0c9a0dbe40d0be513053796290e8ff404c74148f18f83e81385469bbb67ceec3897ea", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a05e1ab6c9eaffab5f501021323994149fd4290ca143e8c177e96e2522ba427d4fa0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf90171a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a0a3957d0af159581eb28836b86e93ecf574c8f3d096465a7e26f74b31f7ea598ba02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da065b99b0e1ebde1beb7bb2dc0b4d4c04d600bbb073caf99eceb18c06e954de956a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306808080a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0645f59a16633fc8cf9594ac86b0abde46ea3d050d220a78a40ea7b5ff95b5530a07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76" + ], + "codes": [ + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "0x363d3d373d3d3d363d73ba4e99daabe85a80e366159bee6941555d7fa0e85af43d82803e903d91602b57fd5bf3" + ] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/348_validium_txs.json b/crates/integration/testdata/validium/witnesses/348_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/348_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/349.json b/crates/integration/testdata/validium/witnesses/349.json new file mode 100644 index 00000000..21ee5bbe --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/349.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xc189599ab805a530e8f9eb31410608d6fbe5cb3917f8fdea506cbfa1ec159443", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0x72d0f8efb2cc9fc22dfde1f42392fce3a29c3a05e480e9f576cf2805296bc8b4", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 349, + "gas_limit": 14221812, + "gas_used": 0, + "timestamp": 1757324358, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0x72d0f8efb2cc9fc22dfde1f42392fce3a29c3a05e480e9f576cf2805296bc8b4", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf842a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a09ff6f1a8aeba2ef44a0d974d8fa4abfa205f7094c475b53a076fe3f91baf5c37", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf90191a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a0a3957d0af159581eb28836b86e93ecf574c8f3d096465a7e26f74b31f7ea598ba02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da065b99b0e1ebde1beb7bb2dc0b4d4c04d600bbb073caf99eceb18c06e954de956a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d03068080a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa00ff52a09faf50aa1199775559d4b94895580646eab45f52619b734995aebf9daa07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a05e1ab6c9eaffab5f501021323994149fd4290ca143e8c177e96e2522ba427d4fa0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da06c258420ecb7425e276762f87510f4cf397fdb7be6994fe6ebe936501184941ca025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca020b4e61f0f83a8a39276c010a3bfa54d1a5ed0430cd118b35acf3138d559a0c6a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/349_validium_txs.json b/crates/integration/testdata/validium/witnesses/349_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/349_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/350.json b/crates/integration/testdata/validium/witnesses/350.json new file mode 100644 index 00000000..a100d94e --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/350.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x3d84a346dc5096c0db8827ea1a3f1ee5cb8fa027212be458b49c9682e3b33dd1", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0x72d0f8efb2cc9fc22dfde1f42392fce3a29c3a05e480e9f576cf2805296bc8b4", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 350, + "gas_limit": 14207925, + "gas_used": 0, + "timestamp": 1757324359, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0x72d0f8efb2cc9fc22dfde1f42392fce3a29c3a05e480e9f576cf2805296bc8b4", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf842a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a09ff6f1a8aeba2ef44a0d974d8fa4abfa205f7094c475b53a076fe3f91baf5c37", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf90191a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a0a3957d0af159581eb28836b86e93ecf574c8f3d096465a7e26f74b31f7ea598ba02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da065b99b0e1ebde1beb7bb2dc0b4d4c04d600bbb073caf99eceb18c06e954de956a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d03068080a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa00ff52a09faf50aa1199775559d4b94895580646eab45f52619b734995aebf9daa07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a05e1ab6c9eaffab5f501021323994149fd4290ca143e8c177e96e2522ba427d4fa0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da06c258420ecb7425e276762f87510f4cf397fdb7be6994fe6ebe936501184941ca025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca020b4e61f0f83a8a39276c010a3bfa54d1a5ed0430cd118b35acf3138d559a0c6a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/350_validium_txs.json b/crates/integration/testdata/validium/witnesses/350_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/350_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/351.json b/crates/integration/testdata/validium/witnesses/351.json new file mode 100644 index 00000000..6dc9fa6d --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/351.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xc9ad7f902839d1b7f35158afb3a40f818d18bf7444ad37852db019b75c7f1ca6", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0x72d0f8efb2cc9fc22dfde1f42392fce3a29c3a05e480e9f576cf2805296bc8b4", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 351, + "gas_limit": 14194052, + "gas_used": 0, + "timestamp": 1757324360, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0x72d0f8efb2cc9fc22dfde1f42392fce3a29c3a05e480e9f576cf2805296bc8b4", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da06c258420ecb7425e276762f87510f4cf397fdb7be6994fe6ebe936501184941ca025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca020b4e61f0f83a8a39276c010a3bfa54d1a5ed0430cd118b35acf3138d559a0c6a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a05e1ab6c9eaffab5f501021323994149fd4290ca143e8c177e96e2522ba427d4fa0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf842a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a09ff6f1a8aeba2ef44a0d974d8fa4abfa205f7094c475b53a076fe3f91baf5c37", + "0xf90191a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a0a3957d0af159581eb28836b86e93ecf574c8f3d096465a7e26f74b31f7ea598ba02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da065b99b0e1ebde1beb7bb2dc0b4d4c04d600bbb073caf99eceb18c06e954de956a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d03068080a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa00ff52a09faf50aa1199775559d4b94895580646eab45f52619b734995aebf9daa07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/351_validium_txs.json b/crates/integration/testdata/validium/witnesses/351_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/351_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/352.json b/crates/integration/testdata/validium/witnesses/352.json new file mode 100644 index 00000000..0f6b041c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/352.json @@ -0,0 +1,111 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xb6ca85a05318133baf114c07f10bd2c986d8794dc9f1f7b17ae7ef6a83d1aecd", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x6255a9f1483027553cd3e94d126d465d278c862b2e04b42862f3f616637ef772", + "receipts_root": "0xb0dd282d86ad42fca902caa8cf083afd402568d9bc6259b447bad1ac3e52ac45", + "withdrawals_root": null, + "logs_bloom": "0x00000800000000040000000000004000000000000200000000000000000200000000000000000000000000010000008000000000001000000000002000000000000000000000000000080008000000000000000000000000000000000000000000000000820100000000000000000800000000000000000000000010000000010001000000000800000010000040008000000001000000000800000000000001001000200000400000000000000000200000020000000001000000000000000000000002000000200000000001024000001000000000000000040000000020000000000000000000000200000000000000000000000008000000000000000002", + "difficulty": "0x1", + "number": 352, + "gas_limit": 14180192, + "gas_used": 147984, + "timestamp": 1757324361, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0x72d0f8efb2cc9fc22dfde1f42392fce3a29c3a05e480e9f576cf2805296bc8b4", + "transactions": [ + { + "Eip1559": { + "signature": { + "r": "0x55f39e36abe0dca98050c7e53fa8ceaf5a511e2599476e4d8361572cda5f388f", + "s": "0x44b7dfd79fb7ea96ec936eb8a39c63ca7776de13520cad010579e0f7614ad279", + "yParity": "0x1", + "v": "0x1" + }, + "transaction": { + "chain_id": 33333333, + "nonce": 0, + "gas_limit": 167449, + "max_fee_per_gas": 0, + "max_priority_fee_per_gas": 0, + "to": "0x694c7feee8bdad3c5d58dcbeb3da08b122ff2776", + "value": "0x0", + "access_list": [], + "input": "0x575361b6000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a490000000000000000000000005b0ca04e2f222ee5b2ce8a5c7307daab009388d3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014c10d16081a5982ebf93a568943a0ceade2b9dbe4000000000000000000000000" + } + } + } + ], + "withdrawals": null, + "states": [ + "0xe7a0365a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a885843b9aca00", + "0xf888a02087efc2b625c18816a35848616c5247a1da19c01d39f8106c1cdd496db5a52ab865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a01333a6d4f6a8bc9bea60e76bdee8755433a9581e5f66e2f5f78fba1e3a6e30dea0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf843a0204a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594a1a027e429a4bef3083bc31a671d046ea5c1f5b8c3094d72868d9dfdc12c7334ac5f", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf7a03ab25ee0774af530f5d127576e7c28934b2a04380a82a26154f3dc2c0cf2b86c959438cb00e044d3cdd3c9f90b7efde61ef62e38fdf3", + "0xf8718080a012029a027a77ca1b6f037157f1f0cdafcdf85e7dc03c30ad04c6f2838714de9a80808080a0997726d350b090ae7ac941071e6ccb4d3d2345eab29b213db6e33094423e69388080a02a3a0fc1952479e950b7ef6015a3667c81b9de102761af6b0750b7149331e455808080808080", + "0xe19f3e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf602", + "0xf869a0202b9f197aaaffc90ca95aedca97fb61342c8426f9d501e6940d5c6ca4e63417b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xe7a03e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af85843b9aca00", + "0xf8f18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb2880a092f0e96bbb99b5db5259dc3f7587252d3b0271695590c502ec420525affc9f18808080a071f7bfaa0b222c05506d4b7c2c6a763b79c73fd03627d8747d131d946f842280a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0c557d0d8d6d1ccbbba16ce309be7fc47931cce54470663fa528da9c3a90ff37e80a0acfe702776deb4688bd2282801dab92113716b20e319608a1c683e954a38040f8080a0496c188b2746deaf9414372d0b4b974eaeca3a50b5d8047385f09adcba17496880", + "0xf8b18080a0278c1c39f45197bc4f3fb1350c3c9ab4cd2a75df987e9689a1720f2edbddd830808080a0a7fa7cfd8c2059771eb0e7e25a8d66153c08a967f309aabbdad599c16b6f16048080a0f304b4e33cb4a8c8f2b9ed33c39fadb131e39484ee50cb2882a1a38c91e4378180a09ffaa51cba573c3c0ea7b227bab5ae49a50189a90a82b9732a3e0e525c1509b48080a00d1dac5440f024722c807e113265d3b92ec2157f7f0bfa76b68668f92c3743a78080", + "0xf7a02083efb3982afbd500ab7c66d02b996df5fdc3d20660e61600390aad6d5f7f1e9594df45f4790e20509959fccc0d09245b216abdaa37", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a829594f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a05eef6aa39e018e7c9637fbf622855472d6d53e72612f48335319823aadb210a4a08968f35693012a4149edcac94a158651e00cb62cff5d4ede25dfa85637408a70a0991bdf80f1517e84f6de0649577b5391ac036a8e7b161ca8af64ab92e6d17904a068f5c8400cccc32a720b141c8442bf35020f356c50af125b402092f48b385dcf8080a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xf87180a092d212f7edac42e210e83b80a665b2e0b1c3a168274c22e58f9cd603c989ba09808080808080808080a038f614f23fd4cb32aafe754c4ff947d67b04dc4bdeb7c6a70329c4b3109cb04f8080a00a5940c65ad801cd66fb9eba53d32c998e192e926c62cf6cc18a660c3dfe34188080", + "0xf843a020ced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d2a1a09ebdd012eeb0290db5fd805ef42f43de801b7ba75eb463b31794343415b7c102", + "0xf869a020eb33871a8575f30781f091b9677c4740fe09a9a0890354fb08f68b224adfc6b846f8440180a0f285cdbab609abcf4c6f3426172871782e991eb41a72a01e11c4470dfc785458a0dbe40d0be513053796290e8ff404c74148f18f83e81385469bbb67ceec3897ea", + "0xf90151a0415be64c3141b9cb7f779484ffc834917ca6cdc6dd10fef37b0e4d164dc1d32980a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a0149ee6b68f21119085d2c81f35cc933893ee2a2d5ba066d527f74bf034da5161a0851524871e0f193508e04a2a5bf14e07bf5fba2ae4397ec12a3e298af9623bbaa05eef6aa39e018e7c9637fbf622855472d6d53e72612f48335319823aadb210a4a0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0939172a011c8caaf28524062e8ab21adfc61eb1ba52a97975b568a93e36e44a2a041dbaa07b1c2a073bfb7f06bfc17ae4fd67c629ea47a483d2f2893d55fd628cb8080a0d0cde8f5e35f8fd34db5007b3f32055bedb90f4e557d74e3206949e751b5c8aaa077964a3d51ca6d84c97526434e96ca68d015f6fcb056fc8b25424f56b0b7b86f80808080", + "0xf85180808080808080a011631e5beb90ce02d0ffb7eb359120132142821746c161440ef97c0629f39d5080a0f144b604936974b58ed40e0af9e8da3ada482aacd75316f90d71d51b92972b4d80808080808080", + "0xeaa034248ba294d0dc0f3b5bd3cce19548e8479a9967a2e8e467d63b2cf909dde3e588872386f26fc10000", + "0xf869a020d0dc00284bbf26bbb50d4e8d8edd193dc3c22d5d4a6ed6c595ea4cbac935bbb846f8440180a08dc7a0746c97521973913c50820ef2936f51dccdcf9d8dde0ab41e9eb288ae19a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da06c258420ecb7425e276762f87510f4cf397fdb7be6994fe6ebe936501184941ca025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a003d84be52c9b2bb800428458e4ee566bbb442661e2510fb75264134a4787c7aea08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca020b4e61f0f83a8a39276c010a3bfa54d1a5ed0430cd118b35acf3138d559a0c6a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594b05b94a89ac46a6527332609f2f070ef84a29230", + "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594694c7feee8bdad3c5d58dcbeb3da08b122ff2776", + "0xe2a0354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff901", + "0xf87180a01dad1f4774da1b7e7886f9442777190af8c8b01869cf820b1fbe43d90d71f356808080808080a07e0318e868aa3819e52bdb31cf5ec275b3c2ba97fda0c53548a0e24f4b968762a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xf869a020a42a2312e58fde1ddba031d86ec9c2484386e302494241b82105397dc57ffcb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0c71c22298afad00443f07657a352641692a5ceb76f68c840a260bfd2bb6f2384", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe2a033f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301", + "0xf851a033e4d22180009f053b2884b5833072585dc163df08d98e2b8a808891c3a751328080a0dcd28cfac464ae6acd6881238428ce8425b114e54da580d9cb9344965a4a573e80808080808080808080808080", + "0xeaa03fa4bec1d3298408bb5afcfcd9c430549c5b31f8aa5c5848151c0a55f473c34d88872386f26fc10000", + "0xf851a072c39c82daa7634e8e2e4951caf9e8419d4f46f7fbaff09f26dd65479ee6f60e8080808080808080808080a0ccfcec34930d87bbc29267753811375d5493be773f7aa12eb8189535edf6252480808080", + "0xf89180808080a0b01dff3b495f178dacb3fe51da4d0d71edfe15751ebdc8c8b99ce95dc096abd580a08bc57c43dab35f5ff6386a03fb556b725a9f1929a62e2f3186cd8988d4bbd35c808080a046ff8d1293b06f4b10fbe90a84a44209419abd752f53b044e8e394f9aa715c8380a04a423fad8dd11a1f506cfef42cc6df790a0ed3260768ec28a681b6a35a6a29ff80808080", + "0xf86ca020f884cdcd164a6b73972dc6625ecb078be7e607b54459f3edfaada99be20644b849f84780837f928ea0cc6b1f180857b9996f70f3c8295efa512aed726dff8bd0080175c8f2b559f7baa016c283a285466785d9df98d63618dd1640392d6dd816a845b7750add4ef95569", + "0xf85180a0b12fdbd5562c01d8c93ebf5932c4afb2673d4d8f8c04bdebe8406b199473890d808080808080808080a009d3d50242de05777a02987ce95bb7960425f69209252e759be838f0bcf94b588080808080", + "0xf843a0201968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4ca1a0ae824d72ddc272aab68a8c3022e36f10454437c1886f3ff9927b64f232df414f", + "0xf869a020273fbce982163432756c92acee04339663618b2ba6c989cf2ee90aab28543fb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0caba68b9ba765c98004e8d5779c8d5eaf818e1d9636baa33514f64ef8715311e", + "0xf85180a087bd0d14a7c3e837f4c1924a01e3b0ebb8c76db822fb9e910512593d91721d4b808080808080808080a0c78ecc25eb2ca65d4ae28168b365aee5eef9250994eee96633501b6ba6cba1978080808080", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d959463fec5889034171b5ea6f51ba8b07400749fa081", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a05e1ab6c9eaffab5f501021323994149fd4290ca143e8c177e96e2522ba427d4fa0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf85180808080a0daa87115c720649739687d594aeb13548d9aa8cb335725f18045514bcd97630580808080808080a080249deeb58148edb98cf607de1f5e14dae1958f10dd6e6c040bc4be16c22e9d80808080", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d4819594d159188ae0eef57b221b6574313e35ed5cd4dcc5", + "0xf842a020c44e4875b74d31ff9fd779bf2566af7bd15b87fc985d01f5094b89e3669e4fa09ff6f1a8aeba2ef44a0d974d8fa4abfa205f7094c475b53a076fe3f91baf5c37", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", + "0xf90191a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a0a3957d0af159581eb28836b86e93ecf574c8f3d096465a7e26f74b31f7ea598ba02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da065b99b0e1ebde1beb7bb2dc0b4d4c04d600bbb073caf99eceb18c06e954de956a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d03068080a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa00ff52a09faf50aa1199775559d4b94895580646eab45f52619b734995aebf9daa07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf842a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a09ff6f1a8aeba2ef44a0d974d8fa4abfa205f7094c475b53a076fe3f91baf5c37", + "0xf843a020575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85ba1a0ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5" + ], + "codes": [ + "0x608060405234801561000f575f80fd5b5060043610610090575f3560e01c806383cc76601161006357806383cc7660146100f85780638da5cb5b1461010b578063c4d66de81461011e578063d4b9f4fa14610131578063f2fde38b14610139575f80fd5b806326aad7b7146100945780633cb747bf146100b0578063600a2e77146100db578063715018a6146100ee575b5f80fd5b61009d60015481565b6040519081526020015b60405180910390f35b6053546100c3906001600160a01b031681565b6040516001600160a01b0390911681526020016100a7565b61009d6100e9366004610539565b61014c565b6100f66101ef565b005b61009d610106366004610539565b610224565b6052546100c3906001600160a01b031681565b6100f661012c366004610550565b61023a565b61009d5f5481565b6100f6610147366004610550565b6102d2565b6053545f906001600160a01b0316331461019e5760405162461bcd60e51b815260206004820152600e60248201526d37b7363c9036b2b9b9b2b733b2b960911b60448201526064015b60405180910390fd5b5f806101a98461035e565b60408051838152602081018890529294509092507ffaa617c2d8ce12c62637dbce76efcc18dae60574aa95709bdcedce7e76071693910160405180910390a19392505050565b6052546001600160a01b031633146102195760405162461bcd60e51b81526004016101959061057d565b6102225f610477565b565b602a8160288110610233575f80fd5b0154905081565b6052546001600160a01b031633146102645760405162461bcd60e51b81526004016101959061057d565b600154156102a85760405162461bcd60e51b815260206004820152601160248201527063616e6e6f7420696e697469616c697a6560781b6044820152606401610195565b6102b06104c8565b605380546001600160a01b0319166001600160a01b0392909216919091179055565b6052546001600160a01b031633146102fc5760405162461bcd60e51b81526004016101959061057d565b6001600160a01b0381166103525760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610195565b61035b81610477565b50565b6003545f9081906103b15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c206265666f726520696e697469616c697a6174696f6e0000000000006044820152606401610195565b600154835f5b8215610448576103c86002846105c8565b5f036104125781602a82602881106103e2576103e26105b4565b015561040b82600283602881106103fb576103fb6105b4565b01545f9182526020526040902090565b915061043c565b610439602a8260288110610428576104286105b4565b0154835f9182526020526040902090565b91505b600192831c92016103b7565b81602a826028811061045c5761045c6105b4565b0155505f819055600180548082019091559590945092505050565b605280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f5b60286104d78260016105fb565b101561035b57610508600282602881106104f3576104f36105b4565b0154600283602881106103fb576103fb6105b4565b60026105158360016105fb565b60288110610525576105256105b4565b01558061053181610614565b9150506104ca565b5f60208284031215610549575f80fd5b5035919050565b5f60208284031215610560575f80fd5b81356001600160a01b0381168114610576575f80fd5b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f826105e257634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561060e5761060e6105e7565b92915050565b5f60018201610625576106256105e7565b506001019056fea164736f6c6343000818000a", + "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", + "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa3781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e56281565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa376001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa376001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e5626001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa37169063b2267a7b903490610c22907f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f000000000000000000000000edd97a92fd46c25a475829f1975876ba48c12bda81565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f000000000000000000000000edd97a92fd46c25a475829f1975876ba48c12bda6001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x363d3d373d3d3d363d73ba4e99daabe85a80e366159bee6941555d7fa0e85af43d82803e903d91602b57fd5bf3" + ] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/352_validium_txs.json b/crates/integration/testdata/validium/witnesses/352_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/352_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/353.json b/crates/integration/testdata/validium/witnesses/353.json new file mode 100644 index 00000000..21e68267 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/353.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x424d1bbe3d00706a0be66a9b8566e78866eff4d3ad221f6170607014b10359af", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 353, + "gas_limit": 14166346, + "gas_used": 0, + "timestamp": 1757324362, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/353_validium_txs.json b/crates/integration/testdata/validium/witnesses/353_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/353_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/354.json b/crates/integration/testdata/validium/witnesses/354.json new file mode 100644 index 00000000..dde17c48 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/354.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xed9461327515ae2586d53bcb21fa41784ba8bf4ee3e8d3ede328db94f72bbb67", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 354, + "gas_limit": 14152513, + "gas_used": 0, + "timestamp": 1757324363, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/354_validium_txs.json b/crates/integration/testdata/validium/witnesses/354_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/354_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/355.json b/crates/integration/testdata/validium/witnesses/355.json new file mode 100644 index 00000000..9ea8a85c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/355.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x5ea6b0105be824849fbef996dd8778b9b8ae86735c7bf37fe4e24f93284c24ae", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 355, + "gas_limit": 14138694, + "gas_used": 0, + "timestamp": 1757324364, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/355_validium_txs.json b/crates/integration/testdata/validium/witnesses/355_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/355_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/356.json b/crates/integration/testdata/validium/witnesses/356.json new file mode 100644 index 00000000..fb29661b --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/356.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xf0438385e195411497499b30029d393671d1c4f7bf2c8e092d67da3734ecd51f", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 356, + "gas_limit": 14124888, + "gas_used": 0, + "timestamp": 1757324365, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/356_validium_txs.json b/crates/integration/testdata/validium/witnesses/356_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/356_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/357.json b/crates/integration/testdata/validium/witnesses/357.json new file mode 100644 index 00000000..d2b852a1 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/357.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xa9437065fe767160683d0a4585af13bd6272e766448fd0afe955a859ee4d1207", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 357, + "gas_limit": 14111096, + "gas_used": 0, + "timestamp": 1757324366, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/357_validium_txs.json b/crates/integration/testdata/validium/witnesses/357_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/357_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/358.json b/crates/integration/testdata/validium/witnesses/358.json new file mode 100644 index 00000000..8a0b94f0 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/358.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x65a0cb8a892509a9e9c6c8a36500c93c6ab8c0afd1569ad9b26d4dc761417efa", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 358, + "gas_limit": 14097317, + "gas_used": 0, + "timestamp": 1757324367, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/358_validium_txs.json b/crates/integration/testdata/validium/witnesses/358_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/358_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/359.json b/crates/integration/testdata/validium/witnesses/359.json new file mode 100644 index 00000000..4f239185 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/359.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x213fc40ca31eb61236730444b2fef1ff97db5a25f48594ca14d2ff853eeb8645", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 359, + "gas_limit": 14083552, + "gas_used": 0, + "timestamp": 1757324368, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/359_validium_txs.json b/crates/integration/testdata/validium/witnesses/359_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/359_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/360.json b/crates/integration/testdata/validium/witnesses/360.json new file mode 100644 index 00000000..4350555e --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/360.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x2b71735c2ca32c7004bbbb20e586222d5d15223622adbff7b468b9c9ab8b252e", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 360, + "gas_limit": 14069800, + "gas_used": 0, + "timestamp": 1757324369, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/360_validium_txs.json b/crates/integration/testdata/validium/witnesses/360_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/360_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/361.json b/crates/integration/testdata/validium/witnesses/361.json new file mode 100644 index 00000000..62987bce --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/361.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xd00a9ab4ac973a476444cf12a574ec01c3eb2394c3d19c0682b63aab004a6f7c", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 361, + "gas_limit": 14056061, + "gas_used": 0, + "timestamp": 1757324370, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/361_validium_txs.json b/crates/integration/testdata/validium/witnesses/361_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/361_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/362.json b/crates/integration/testdata/validium/witnesses/362.json new file mode 100644 index 00000000..45f212ec --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/362.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xe19126c97e6258f77fa1ebbc3b85864c65cb1eacc74432db951148b23eda7881", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 362, + "gas_limit": 14042336, + "gas_used": 0, + "timestamp": 1757324371, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/362_validium_txs.json b/crates/integration/testdata/validium/witnesses/362_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/362_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/363.json b/crates/integration/testdata/validium/witnesses/363.json new file mode 100644 index 00000000..fb1e25b0 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/363.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x4d8a290a07e78231599715d68269b24e04f4f31d04fb445c4f9741fa998c9e31", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 363, + "gas_limit": 14028624, + "gas_used": 0, + "timestamp": 1757324372, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/363_validium_txs.json b/crates/integration/testdata/validium/witnesses/363_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/363_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/364.json b/crates/integration/testdata/validium/witnesses/364.json new file mode 100644 index 00000000..eb90123d --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/364.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xe61d1fbd175a38ef86380c42821bad3fe82b2a9b67f10a76dc835345f8e34672", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 364, + "gas_limit": 14014926, + "gas_used": 0, + "timestamp": 1757324373, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/364_validium_txs.json b/crates/integration/testdata/validium/witnesses/364_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/364_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/365.json b/crates/integration/testdata/validium/witnesses/365.json new file mode 100644 index 00000000..25650c95 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/365.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xe7701b73e6c9c0c1f6cfbe0073919fd6adbdc384eecd1bafae27c01576985b76", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 365, + "gas_limit": 14001241, + "gas_used": 0, + "timestamp": 1757324374, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/365_validium_txs.json b/crates/integration/testdata/validium/witnesses/365_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/365_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/366.json b/crates/integration/testdata/validium/witnesses/366.json new file mode 100644 index 00000000..4e017745 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/366.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x2a81f9d17547fa47c1802656a973dad49740ff1c28657813fed9a2cb60739673", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 366, + "gas_limit": 13987569, + "gas_used": 0, + "timestamp": 1757324375, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/366_validium_txs.json b/crates/integration/testdata/validium/witnesses/366_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/366_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/367.json b/crates/integration/testdata/validium/witnesses/367.json new file mode 100644 index 00000000..817fadda --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/367.json @@ -0,0 +1,87 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x817c15a151a70dd69550a5d2997f26409717124ac1cb2e16b88ccc1284b156fc", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0x767cc8ac7f3c1f92461446025d933210abb63238f270e9fa3d8b32198d57e20b", + "transactions_root": "0xf334a7cd6125f623d3a2b669e723ad508ad4ec8af1fcff315128dbbfbd03e2d4", + "receipts_root": "0xed0b1f4a3e7a988520887a21f6abb231f8fc89e5861bb204931d7bb1419004b2", + "withdrawals_root": null, + "logs_bloom": "0x00000800000000040000000000000000000000000000000000000000000200000000000000000000000000000000008000000000000000000000002000000000000000000000000000000008000000000100000001000000000000000000000000000000820100400000000000000800002000000000000000000018000000110000000000000000000040002040018000000000000000000000000000000000000000200000400000800000000000208000000010000000000000000000000000000002000000000000000800000000000000000000000000000000000020000000000000000000000800000000000000000000000008000000000008000002", + "difficulty": "0x1", + "number": 367, + "gas_limit": 13973911, + "gas_used": 155443, + "timestamp": 1757324376, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xf2b78153166bb6d5c79abe1af62a563d8eff57a78cbd76e3e3d91c104bca77e9", + "transactions": [ + { + "TxL1Message": { + "hash": "0xb3d13d24b87a716f270e24ecb5e6d6fb7b8b49e761d815a06daf4cbf19d63340", + "transaction": { + "queueIndex": "0x3", + "gas": "0xf4240", + "to": "0xdf45f4790e20509959fccc0d09245b216abdaa37", + "value": "0x0", + "sender": "0xfeea7a92fd46c25a475829f1975876ba48c13ceb", + "input": "0x8ef1332e000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562000000000000000000000000694c7feee8bdad3c5d58dcbeb3da08b122ff27760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c100000000000000000000000038cb00e044d3cdd3c9f90b7efde61ef62e38fdf3000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a49000000000000000000000000cf360f1fc8763a38e3e1a19947bceb9f764a7a7c0000000000000000000000003c21c3f27cfed594105e8fccdb8acbae5e7c7a04000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } + } + ], + "withdrawals": null, + "states": [ + "0xf869a0205aa84538e7dde8cfa83ed6d1339a086fbe2e74cebf157f3450de22b63cd5e9b846f8440280a0bb2eadf59290e84312931dabdb4d14bd8d2dc95fbcce7aba34c197fdba5a20d5a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xf87180a01dad1f4774da1b7e7886f9442777190af8c8b01869cf820b1fbe43d90d71f356808080808080a07e0318e868aa3819e52bdb31cf5ec275b3c2ba97fda0c53548a0e24f4b968762a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf89180808080a0b01dff3b495f178dacb3fe51da4d0d71edfe15751ebdc8c8b99ce95dc096abd580a0524d11d4584576aa3cb15d651b632008f47bd6b70aaff4631764c51ea47b11f1808080a046ff8d1293b06f4b10fbe90a84a44209419abd752f53b044e8e394f9aa715c8380a04a423fad8dd11a1f506cfef42cc6df790a0ed3260768ec28a681b6a35a6a29ff80808080", + "0xf8518080a0d63199be30002d209b2f07b14a70e3fe0cb3fb6ffab8894ae69079d6f747d4288080808080808080a0b64fc9bf76504f04c8d79528469ff1e23699181fc953f8a8705f587ceca728258080808080", + "0xf869a020a42a2312e58fde1ddba031d86ec9c2484386e302494241b82105397dc57ffcb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0c71c22298afad00443f07657a352641692a5ceb76f68c840a260bfd2bb6f2384", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594b05b94a89ac46a6527332609f2f070ef84a29230", + "0xf888a02087efc2b625c18816a35848616c5247a1da19c01d39f8106c1cdd496db5a52ab865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a02ea429c6bb7cb18e4a126ac9e082a5c0eacf91c864baf8404b749743272defd0a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf90151a0415be64c3141b9cb7f779484ffc834917ca6cdc6dd10fef37b0e4d164dc1d32980a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a049f82a5f6d261f5a8b8f59944bb090b4a84b9ac1748c63c78a2f2d26a88b8b19a0851524871e0f193508e04a2a5bf14e07bf5fba2ae4397ec12a3e298af9623bbaa05eef6aa39e018e7c9637fbf622855472d6d53e72612f48335319823aadb210a4a0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0939172a011c8caaf28524062e8ab21adfc61eb1ba52a97975b568a93e36e44a2a041dbaa07b1c2a073bfb7f06bfc17ae4fd67c629ea47a483d2f2893d55fd628cb8080a0d0cde8f5e35f8fd34db5007b3f32055bedb90f4e557d74e3206949e751b5c8aaa077964a3d51ca6d84c97526434e96ca68d015f6fcb056fc8b25424f56b0b7b86f80808080", + "0xf869a020eb33871a8575f30781f091b9677c4740fe09a9a0890354fb08f68b224adfc6b846f8440180a07d7081c4db24b391f3c7b1705f550ad87887223cdd2f3c68c254d8791d414418a0dbe40d0be513053796290e8ff404c74148f18f83e81385469bbb67ceec3897ea", + "0xf85180a087bd0d14a7c3e837f4c1924a01e3b0ebb8c76db822fb9e910512593d91721d4b808080808080808080a0c78ecc25eb2ca65d4ae28168b365aee5eef9250994eee96633501b6ba6cba1978080808080", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03ac3ce7d62cfd403fa45c9d331c448bcfb185afc3d497516fd21c6ae4e69493ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a01ea415843b97a0429c3fe37ca3ce9e893d07a48670f24e9afb0dfc469f2d0306a09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a05eef6aa39e018e7c9637fbf622855472d6d53e72612f48335319823aadb210a4a08968f35693012a4149edcac94a158651e00cb62cff5d4ede25dfa85637408a70a0991bdf80f1517e84f6de0649577b5391ac036a8e7b161ca8af64ab92e6d17904a068f5c8400cccc32a720b141c8442bf35020f356c50af125b402092f48b385dcf8080a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xf8718080a012029a027a77ca1b6f037157f1f0cdafcdf85e7dc03c30ad04c6f2838714de9a80808080a0997726d350b090ae7ac941071e6ccb4d3d2345eab29b213db6e33094423e69388080a02a3a0fc1952479e950b7ef6015a3667c81b9de102761af6b0750b7149331e455808080808080", + "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594ba4e99daabe85a80e366159bee6941555d7fa0e8", + "0xf85180808080808080a0419f17c5c8e8392e190f4b3f098f72725a089100b7a313f62681827297579b9780a0f144b604936974b58ed40e0af9e8da3ada482aacd75316f90d71d51b92972b4d80808080808080", + "0xf869a020273fbce982163432756c92acee04339663618b2ba6c989cf2ee90aab28543fb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0caba68b9ba765c98004e8d5779c8d5eaf818e1d9636baa33514f64ef8715311e", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf869a0202b9f197aaaffc90ca95aedca97fb61342c8426f9d501e6940d5c6ca4e63417b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xf8b18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb2880a092f0e96bbb99b5db5259dc3f7587252d3b0271695590c502ec420525affc9f18808080a071f7bfaa0b222c05506d4b7c2c6a763b79c73fd03627d8747d131d946f842280a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0c557d0d8d6d1ccbbba16ce309be7fc47931cce54470663fa528da9c3a90ff37e808080808080", + "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594694c7feee8bdad3c5d58dcbeb3da08b122ff2776", + "0xf869a020d0af77d4edcb78fd0b68acfe8ba4cf68a24a92bc8bf96c5509705ef4e46850b846f8440380a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d4819594d159188ae0eef57b221b6574313e35ed5cd4dcc5", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d959463fec5889034171b5ea6f51ba8b07400749fa081", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a829594f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xf869a020d0dc00284bbf26bbb50d4e8d8edd193dc3c22d5d4a6ed6c595ea4cbac935bbb846f8440180a08dc7a0746c97521973913c50820ef2936f51dccdcf9d8dde0ab41e9eb288ae19a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0d3413343a617545f9b1ee6c5ededafe1054fa4ac10a33d066e88f112142e8af380", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76" + ], + "codes": [ + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", + "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f000000000000000000000000edd97a92fd46c25a475829f1975876ba48c12bda81565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f000000000000000000000000edd97a92fd46c25a475829f1975876ba48c12bda6001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a", + "0x363d3d373d3d3d363d73ba4e99daabe85a80e366159bee6941555d7fa0e85af43d82803e903d91602b57fd5bf3", + "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa3781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e56281565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa376001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa376001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e5626001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa37169063b2267a7b903490610c22907f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a" + ] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/367_validium_txs.json b/crates/integration/testdata/validium/witnesses/367_validium_txs.json new file mode 100644 index 00000000..84306180 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/367_validium_txs.json @@ -0,0 +1,21 @@ +[ + { + "blockHash": "0x31458772733fbee4e22d4fe4f659ebe1dfe44dc20b5007ffbc009e33024cb0b2", + "blockNumber": "0x16f", + "from": "0xfeea7a92fd46c25a475829f1975876ba48c13ceb", + "gas": "0xf4240", + "gasPrice": "0x0", + "hash": "0xb9be91cef46b54b88af78f16b5b0305d57b564b7aca4c2f17f00648bc14b5286", + "input": "0x8ef1332e000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562000000000000000000000000694c7feee8bdad3c5d58dcbeb3da08b122ff27760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f00000000000000000000000038cb00e044d3cdd3c9f90b7efde61ef62e38fdf3000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a49000000000000000000000000cf360f1fc8763a38e3e1a19947bceb9f764a7a7c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504fc98849efec8cbd82c82f88170e30cfeee13a16814fdbce13b08b3c33fb7a7bbeb6ff6ed96b0f5e773582ef20c9901f952068dbfdd76ad18f47ccd228d0d38dabb6563a8b033af894af4567cbc96ff3c421620319f44a70c4e0563d169c88fec22e90d2ad36694bc6ea06004d27259e346cbb81d000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "to": "0xdf45f4790e20509959fccc0d09245b216abdaa37", + "transactionIndex": "0x0", + "value": "0x0", + "type": "0x7e", + "v": "0x0", + "r": "0x0", + "s": "0x0", + "sender": "0xfeea7a92fd46c25a475829f1975876ba48c13ceb", + "queueIndex": "0x3" + } +] diff --git a/crates/integration/testdata/validium/witnesses/368.json b/crates/integration/testdata/validium/witnesses/368.json new file mode 100644 index 00000000..989099d9 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/368.json @@ -0,0 +1,78 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x31458772733fbee4e22d4fe4f659ebe1dfe44dc20b5007ffbc009e33024cb0b2", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0x2e55d8c8315513c2eb2c2e9036cc0894d22d8956564748b45c736d39a1733ebf", + "transactions_root": "0xd56b6b82a53811e220007034427543f833990a4a4db7118ddbb94f708f1cdbe0", + "receipts_root": "0x99ffecdc31a75c6d0f52287ef19f2cf253fee23fc008e0185fa3abb351e59de5", + "withdrawals_root": null, + "logs_bloom": "0x00000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000100000000000000000000000000000008000000000000000000000000000000000100000000000000000000000000000200000000000000000000000000000000000000002000000000000000800000000000000000000000000000000000000100000000000000000000000000800000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 368, + "gas_limit": 13960266, + "gas_used": 49318, + "timestamp": 1757324377, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0x767cc8ac7f3c1f92461446025d933210abb63238f270e9fa3d8b32198d57e20b", + "transactions": [ + { + "Eip1559": { + "signature": { + "r": "0xc5e0b26823facc4ca065258cdc5cce72d20511fe9b4461496d0c8cf68964bdb3", + "s": "0x2af621bf0937869b54e19f17be886b5f36eb21db05e4ef5dba6cecc0826dfbf8", + "yParity": "0x0", + "v": "0x0" + }, + "transaction": { + "chain_id": 33333333, + "nonce": 0, + "gas_limit": 54555, + "max_fee_per_gas": 0, + "max_priority_fee_per_gas": 0, + "to": "0x928a1909db63ae7813e6318d098fd17439ec0a49", + "value": "0x0", + "access_list": [], + "input": "0xa9059cbb000000000000000000000000cefecba3de3d1a83b8baaf192bfb87bcf42b0d7c000000000000000000000000000000000000000000000000002386f26fc10000" + } + } + } + ], + "withdrawals": null, + "states": [ + "0xe7a0365a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a885843b9aca00", + "0xe7a03e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af85843b9aca00", + "0xf89180808080a0b01dff3b495f178dacb3fe51da4d0d71edfe15751ebdc8c8b99ce95dc096abd580a0f5b3caee16b0915dcbcadf1828b0a0a23caf18355a4b8a156d2b554bc500a7a9808080a046ff8d1293b06f4b10fbe90a84a44209419abd752f53b044e8e394f9aa715c8380a04a423fad8dd11a1f506cfef42cc6df790a0ed3260768ec28a681b6a35a6a29ff80808080", + "0xf8f18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb2880a092f0e96bbb99b5db5259dc3f7587252d3b0271695590c502ec420525affc9f18808080a071f7bfaa0b222c05506d4b7c2c6a763b79c73fd03627d8747d131d946f842280a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0c557d0d8d6d1ccbbba16ce309be7fc47931cce54470663fa528da9c3a90ff37e80a0acfe702776deb4688bd2282801dab92113716b20e319608a1c683e954a38040f80a06c59f64c1e3a6d9edf379551220d1197f1dcb1724d1ef8f57ce9608a4bbdfe3b8080", + "0xe2a033f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf85180808080808080a0551cf4ee9aa99a97f91ac906904e4682df28356c24a71e22fee767c0d319a60180a0f144b604936974b58ed40e0af9e8da3ada482aacd75316f90d71d51b92972b4d80808080808080", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a020eb33871a8575f30781f091b9677c4740fe09a9a0890354fb08f68b224adfc6b846f8440180a06b0f0fe4f3d579e3227ac589cedb0881441eb77586fb345049e80e8a6d25a176a0dbe40d0be513053796290e8ff404c74148f18f83e81385469bbb67ceec3897ea", + "0xeaa0334862afd904fa2ea3f1ede52e19c5a04c917a1428a9bc106840772e5df4a3e688872386f26fc10000", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03240b5878a6f0cfd3c94af5b6b2d5fc30b3ba01987de70e89d42d20a7eeaad6ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da09b5a629d55b94e11dbe6ed4fb09f49e43721c81adfd1fe238493d5731fd3466380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0031d4868eaf7ca4408326365fb93a3ca6f26d22153a3f5882efc0b931db9643aa07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf86ca020f884cdcd164a6b73972dc6625ecb078be7e607b54459f3edfaada99be20644b849f84780837f928ea0cc6b1f180857b9996f70f3c8295efa512aed726dff8bd0080175c8f2b559f7baa016c283a285466785d9df98d63618dd1640392d6dd816a845b7750add4ef95569", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xf869a03bfde78481f1e1be9de1132893d53686b60e6be2214f56cc4d3ff135345a487eb846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a0202b9f197aaaffc90ca95aedca97fb61342c8426f9d501e6940d5c6ca4e63417b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf87180a01dad1f4774da1b7e7886f9442777190af8c8b01869cf820b1fbe43d90d71f356808080808080a07e0318e868aa3819e52bdb31cf5ec275b3c2ba97fda0c53548a0e24f4b968762a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901" + ], + "codes": [ + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "0x363d3d373d3d3d363d73ba4e99daabe85a80e366159bee6941555d7fa0e85af43d82803e903d91602b57fd5bf3" + ] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/368_validium_txs.json b/crates/integration/testdata/validium/witnesses/368_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/368_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/369.json b/crates/integration/testdata/validium/witnesses/369.json new file mode 100644 index 00000000..30e17820 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/369.json @@ -0,0 +1,114 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x42643ff209fc234480b6c6fd1708fe3c919097a6fd0ce7994520951a1ba1be45", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0xeea00959ff7345e510ea97a984d05cce74e8bf79981ead4d215fbebd98350307", + "receipts_root": "0x42520571546d432e23d49de9cf87620f4dd7e8a1ecff82621a7186207ef9a63f", + "withdrawals_root": null, + "logs_bloom": "0x00000800000000040000000000004000000000000200000000000000000200000000000000000000000000010000008000000000001000000000002000000000000000000000000000080008000000000000000000000000000000000000000000000000820100000000000000000800000000000000000000000010000000010001000000000000000000000040008000000001000000000800000000000001101000200000400000000000000000200000020000000001000000000000000000000002000000200000000001024000001000000000000000000000000020100000000000000000000200000800000000000000000008000000000000000002", + "difficulty": "0x1", + "number": 369, + "gas_limit": 13946634, + "gas_used": 125839, + "timestamp": 1757324378, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0x2e55d8c8315513c2eb2c2e9036cc0894d22d8956564748b45c736d39a1733ebf", + "transactions": [ + { + "Eip1559": { + "signature": { + "r": "0xc2cd8637a30ea44c3021e4c4716cd86dc426a9975d3f7962b57c7f598745e3c3", + "s": "0x1868d2b57dd1abbb6bc3c5ec13366fc5b9439eeaba1001d3a3f46456f575ed56", + "yParity": "0x0", + "v": "0x0" + }, + "transaction": { + "chain_id": 33333333, + "nonce": 0, + "gas_limit": 144953, + "max_fee_per_gas": 0, + "max_priority_fee_per_gas": 0, + "to": "0x694c7feee8bdad3c5d58dcbeb3da08b122ff2776", + "value": "0x0", + "access_list": [], + "input": "0x575361b6000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a490000000000000000000000005b0ca04e2f222ee5b2ce8a5c7307daab009388d3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014cefecba3de3d1a83b8baaf192bfb87bcf42b0d7c000000000000000000000000" + } + } + } + ], + "withdrawals": null, + "states": [ + "0xf842a020c44e4875b74d31ff9fd779bf2566af7bd15b87fc985d01f5094b89e3669e4fa09ff6f1a8aeba2ef44a0d974d8fa4abfa205f7094c475b53a076fe3f91baf5c37", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xeaa03ea8469289ba3774edef457a523c9d44a5fc6314e4314ee7c40651a3c6328a8788872386f26fc10000", + "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594694c7feee8bdad3c5d58dcbeb3da08b122ff2776", + "0xf869a020eb33871a8575f30781f091b9677c4740fe09a9a0890354fb08f68b224adfc6b846f8440180a0894d735e22d5ab635b61c19a2c94dedb5c3e6dae489f1182c4fe224bdb093ca2a0dbe40d0be513053796290e8ff404c74148f18f83e81385469bbb67ceec3897ea", + "0xf888a02087efc2b625c18816a35848616c5247a1da19c01d39f8106c1cdd496db5a52ab865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a06605f550811e84d088c8a79124d36c4a7ae33df60bdb7654932be9e21b196e1ea0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xe2a036be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594b05b94a89ac46a6527332609f2f070ef84a29230", + "0xf89180808080a0b01dff3b495f178dacb3fe51da4d0d71edfe15751ebdc8c8b99ce95dc096abd580a0f5b3caee16b0915dcbcadf1828b0a0a23caf18355a4b8a156d2b554bc500a7a9808080a046ff8d1293b06f4b10fbe90a84a44209419abd752f53b044e8e394f9aa715c8380a04a423fad8dd11a1f506cfef42cc6df790a0ed3260768ec28a681b6a35a6a29ff80808080", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a03240b5878a6f0cfd3c94af5b6b2d5fc30b3ba01987de70e89d42d20a7eeaad6ca02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da0ecf51580b9ec009bd740e2af7e730ab37d8cd5399aa399071d4b0776512a8f44a01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a0bd67aafe7fcac0c7fab7f3696470d80cb61abaa9854215e23878f96815e330c6a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0bad870d68ddee0d50e08c315a63c182b6c8b9b584049a3370d92fbb5737f3a5ca07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf869a020d0dc00284bbf26bbb50d4e8d8edd193dc3c22d5d4a6ed6c595ea4cbac935bbb846f8440180a08dc7a0746c97521973913c50820ef2936f51dccdcf9d8dde0ab41e9eb288ae19a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a0891235a8d179ef79113380144874aec15cf3305c36117336a1361ba0b8ba16b4a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf843a020ced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d2a1a0b267cecfbba4570ffc067f20a3536b8feb5c5e7c1a8704bf6fe6ad2ee7183087", + "0xf8f18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb2880a092f0e96bbb99b5db5259dc3f7587252d3b0271695590c502ec420525affc9f18808080a071f7bfaa0b222c05506d4b7c2c6a763b79c73fd03627d8747d131d946f842280a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0c557d0d8d6d1ccbbba16ce309be7fc47931cce54470663fa528da9c3a90ff37e80a0acfe702776deb4688bd2282801dab92113716b20e319608a1c683e954a38040fa0a34b55e699d35763b9f4c3c496b88d7ce2ebdb6fcfa67e61a9d8472e3c3da0fb808080", + "0xf8429f36c943b4a09859521022fd2e90eac0dd9026dad28fa317782a135f28a86091a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xe7a03e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af85843b9aca00", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a829594f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xe7a0365a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a885843b9aca00", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a029d6ecaf947ebc2cdab5e984fe7015d9630f0e07c7d50a54a6ae793aec8ce7b0", + "0xf869a020273fbce982163432756c92acee04339663618b2ba6c989cf2ee90aab28543fb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0caba68b9ba765c98004e8d5779c8d5eaf818e1d9636baa33514f64ef8715311e", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf87180a01dad1f4774da1b7e7886f9442777190af8c8b01869cf820b1fbe43d90d71f356808080808080a07e0318e868aa3819e52bdb31cf5ec275b3c2ba97fda0c53548a0e24f4b968762a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xf843a020575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85ba1a0ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5", + "0xf90171a0415be64c3141b9cb7f779484ffc834917ca6cdc6dd10fef37b0e4d164dc1d32980a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a049f82a5f6d261f5a8b8f59944bb090b4a84b9ac1748c63c78a2f2d26a88b8b19a0851524871e0f193508e04a2a5bf14e07bf5fba2ae4397ec12a3e298af9623bbaa05eef6aa39e018e7c9637fbf622855472d6d53e72612f48335319823aadb210a4a0e932eaddd1aee2a5799c39daa6523a5bf33100216a2bc3cf29008f3e1d939300a0939172a011c8caaf28524062e8ab21adfc61eb1ba52a97975b568a93e36e44a2a041dbaa07b1c2a073bfb7f06bfc17ae4fd67c629ea47a483d2f2893d55fd628cb8080a0d0cde8f5e35f8fd34db5007b3f32055bedb90f4e557d74e3206949e751b5c8aaa077964a3d51ca6d84c97526434e96ca68d015f6fcb056fc8b25424f56b0b7b86f8080a0fffca44e5fa0b22591a5e010ba302ee62f668a2fe098ef495fce63aa75a9384880", + "0xf85180a087bd0d14a7c3e837f4c1924a01e3b0ebb8c76db822fb9e910512593d91721d4b808080808080808080a0c78ecc25eb2ca65d4ae28168b365aee5eef9250994eee96633501b6ba6cba1978080808080", + "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d4819594d159188ae0eef57b221b6574313e35ed5cd4dcc5", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d959463fec5889034171b5ea6f51ba8b07400749fa081", + "0xf85180808080a019fdd0e3963ccd3e914babf3faf14a784317122311a58f1a060d8e32fcb1fbe180808080808080a080249deeb58148edb98cf607de1f5e14dae1958f10dd6e6c040bc4be16c22e9d80808080", + "0xf86ca020f884cdcd164a6b73972dc6625ecb078be7e607b54459f3edfaada99be20644b849f84780837f928ea0cc6b1f180857b9996f70f3c8295efa512aed726dff8bd0080175c8f2b559f7baa016c283a285466785d9df98d63618dd1640392d6dd816a845b7750add4ef95569", + "0xf8518080808080a01fdc724fde52c07174a868405a13a3d410dabde7b0a760c78dc4d5e0bb1cefd6808080808080808080a0bc88ccacb3723df7513dc71533e801d7279293f70ebad9c6aadf91803b430bfb80", + "0xe2a033f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301", + "0xf851a072c39c82daa7634e8e2e4951caf9e8419d4f46f7fbaff09f26dd65479ee6f60e8080808080808080808080a0ccfcec34930d87bbc29267753811375d5493be773f7aa12eb8189535edf6252480808080", + "0xf85180a0b12fdbd5562c01d8c93ebf5932c4afb2673d4d8f8c04bdebe8406b199473890d808080808080808080a009d3d50242de05777a02987ce95bb7960425f69209252e759be838f0bcf94b588080808080", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a05eef6aa39e018e7c9637fbf622855472d6d53e72612f48335319823aadb210a4a08968f35693012a4149edcac94a158651e00cb62cff5d4ede25dfa85637408a70a0991bdf80f1517e84f6de0649577b5391ac036a8e7b161ca8af64ab92e6d17904a068f5c8400cccc32a720b141c8442bf35020f356c50af125b402092f48b385dcf8080a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xf869a033a1b2cad31d2709df21abbacab2d5072470ef44ae0749bf57e3071d63837b9ab846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "0xf8718080a012029a027a77ca1b6f037157f1f0cdafcdf85e7dc03c30ad04c6f2838714de9a80808080a0997726d350b090ae7ac941071e6ccb4d3d2345eab29b213db6e33094423e69388080a02a3a0fc1952479e950b7ef6015a3667c81b9de102761af6b0750b7149331e455808080808080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xeaa03fa4bec1d3298408bb5afcfcd9c430549c5b31f8aa5c5848151c0a55f473c34d88872386f26fc10000", + "0xf7a02083efb3982afbd500ab7c66d02b996df5fdc3d20660e61600390aad6d5f7f1e9594df45f4790e20509959fccc0d09245b216abdaa37", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", + "0xf869a020a42a2312e58fde1ddba031d86ec9c2484386e302494241b82105397dc57ffcb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0c71c22298afad00443f07657a352641692a5ceb76f68c840a260bfd2bb6f2384", + "0xf851a0aa5f567d8f8775c82a3310b52e615e914c24a587b0c61d20afe20d5efd8ffdda8080a0dcd28cfac464ae6acd6881238428ce8425b114e54da580d9cb9344965a4a573e80808080808080808080808080", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf8b18080a0278c1c39f45197bc4f3fb1350c3c9ab4cd2a75df987e9689a1720f2edbddd830808080a0a7fa7cfd8c2059771eb0e7e25a8d66153c08a967f309aabbdad599c16b6f16048080a0f304b4e33cb4a8c8f2b9ed33c39fadb131e39484ee50cb2882a1a38c91e4378180a09ffaa51cba573c3c0ea7b227bab5ae49a50189a90a82b9732a3e0e525c1509b48080a00d1dac5440f024722c807e113265d3b92ec2157f7f0bfa76b68668f92c3743a78080", + "0xe19f3e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf603", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe2a0204a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff901", + "0xf85180a057ddd180b10999606730fb3fb5933754bbc6dd0ec8a870b6e4f3691613f6bb5b8080a02c966ad29e726b3dba0c4a1074242356a3efa981229aa18d9e4583243e724b89808080808080808080808080", + "0xf7a03ab25ee0774af530f5d127576e7c28934b2a04380a82a26154f3dc2c0cf2b86c959438cb00e044d3cdd3c9f90b7efde61ef62e38fdf3", + "0xf85180808080808080a0a51ef4ddf8aa4b4bb46bba588a272596f7e00ba0e87d1f1fc6c7caf86a4d0fde80a0f144b604936974b58ed40e0af9e8da3ada482aacd75316f90d71d51b92972b4d80808080808080", + "0xf869a0202b9f197aaaffc90ca95aedca97fb61342c8426f9d501e6940d5c6ca4e63417b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xf87180a0fd1f039b8d7084cc9d04fb181fc541fd4e17da1ad818e21a174df0861ba491f1808080808080808080a038f614f23fd4cb32aafe754c4ff947d67b04dc4bdeb7c6a70329c4b3109cb04f8080a09c04741da0b414d92ec3cb3fdc37c3d5fb6ee320677aa10893369e1d867fd8698080", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da00ed27c405b525540ca31737774a1b4b2eb5e2fa8d49b3e0382d302bc4b39283aa025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a01558d793e7efcf84fc8f832169cfcafd1917a736b42a4f12be96d2a4650b7334a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca07bcd9884e2aeca7cece13caa618da9e6224b70968a189c0fead282732c1d225ea04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080" + ], + "codes": [ + "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa3781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e56281565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa376001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa376001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e5626001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa37169063b2267a7b903490610c22907f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x363d3d373d3d3d363d73ba4e99daabe85a80e366159bee6941555d7fa0e85af43d82803e903d91602b57fd5bf3", + "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f000000000000000000000000edd97a92fd46c25a475829f1975876ba48c12bda81565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f000000000000000000000000edd97a92fd46c25a475829f1975876ba48c12bda6001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610090575f3560e01c806383cc76601161006357806383cc7660146100f85780638da5cb5b1461010b578063c4d66de81461011e578063d4b9f4fa14610131578063f2fde38b14610139575f80fd5b806326aad7b7146100945780633cb747bf146100b0578063600a2e77146100db578063715018a6146100ee575b5f80fd5b61009d60015481565b6040519081526020015b60405180910390f35b6053546100c3906001600160a01b031681565b6040516001600160a01b0390911681526020016100a7565b61009d6100e9366004610539565b61014c565b6100f66101ef565b005b61009d610106366004610539565b610224565b6052546100c3906001600160a01b031681565b6100f661012c366004610550565b61023a565b61009d5f5481565b6100f6610147366004610550565b6102d2565b6053545f906001600160a01b0316331461019e5760405162461bcd60e51b815260206004820152600e60248201526d37b7363c9036b2b9b9b2b733b2b960911b60448201526064015b60405180910390fd5b5f806101a98461035e565b60408051838152602081018890529294509092507ffaa617c2d8ce12c62637dbce76efcc18dae60574aa95709bdcedce7e76071693910160405180910390a19392505050565b6052546001600160a01b031633146102195760405162461bcd60e51b81526004016101959061057d565b6102225f610477565b565b602a8160288110610233575f80fd5b0154905081565b6052546001600160a01b031633146102645760405162461bcd60e51b81526004016101959061057d565b600154156102a85760405162461bcd60e51b815260206004820152601160248201527063616e6e6f7420696e697469616c697a6560781b6044820152606401610195565b6102b06104c8565b605380546001600160a01b0319166001600160a01b0392909216919091179055565b6052546001600160a01b031633146102fc5760405162461bcd60e51b81526004016101959061057d565b6001600160a01b0381166103525760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610195565b61035b81610477565b50565b6003545f9081906103b15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c206265666f726520696e697469616c697a6174696f6e0000000000006044820152606401610195565b600154835f5b8215610448576103c86002846105c8565b5f036104125781602a82602881106103e2576103e26105b4565b015561040b82600283602881106103fb576103fb6105b4565b01545f9182526020526040902090565b915061043c565b610439602a8260288110610428576104286105b4565b0154835f9182526020526040902090565b91505b600192831c92016103b7565b81602a826028811061045c5761045c6105b4565b0155505f819055600180548082019091559590945092505050565b605280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f5b60286104d78260016105fb565b101561035b57610508600282602881106104f3576104f36105b4565b0154600283602881106103fb576103fb6105b4565b60026105158360016105fb565b60288110610525576105256105b4565b01558061053181610614565b9150506104ca565b5f60208284031215610549575f80fd5b5035919050565b5f60208284031215610560575f80fd5b81356001600160a01b0381168114610576575f80fd5b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f826105e257634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561060e5761060e6105e7565b92915050565b5f60018201610625576106256105e7565b506001019056fea164736f6c6343000818000a", + "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a" + ] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/369_validium_txs.json b/crates/integration/testdata/validium/witnesses/369_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/369_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/370.json b/crates/integration/testdata/validium/witnesses/370.json new file mode 100644 index 00000000..2f7e026d --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/370.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xbc30271bfe9694aa637033685d05848e6001e995df9ded2498cb151ceda98688", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 370, + "gas_limit": 13933016, + "gas_used": 0, + "timestamp": 1757324379, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/370_validium_txs.json b/crates/integration/testdata/validium/witnesses/370_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/370_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/371.json b/crates/integration/testdata/validium/witnesses/371.json new file mode 100644 index 00000000..6a0cda1b --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/371.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x1366b484e3456e04c3d509bf05c983d610edcb1335e476f72f237dedef600936", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 371, + "gas_limit": 13919411, + "gas_used": 0, + "timestamp": 1757324380, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/371_validium_txs.json b/crates/integration/testdata/validium/witnesses/371_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/371_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/372.json b/crates/integration/testdata/validium/witnesses/372.json new file mode 100644 index 00000000..93a009d5 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/372.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x9637dd466b19bb1e90f260a952d75ff9932492607cfa020412fd9d160288c3f1", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 372, + "gas_limit": 13905819, + "gas_used": 0, + "timestamp": 1757324381, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/372_validium_txs.json b/crates/integration/testdata/validium/witnesses/372_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/372_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/373.json b/crates/integration/testdata/validium/witnesses/373.json new file mode 100644 index 00000000..8243521a --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/373.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x25dc62be35e2ba8ab0957716439086bd4484e18e73baba13de813c87a93e4f32", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 373, + "gas_limit": 13892241, + "gas_used": 0, + "timestamp": 1757324382, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/373_validium_txs.json b/crates/integration/testdata/validium/witnesses/373_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/373_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/374.json b/crates/integration/testdata/validium/witnesses/374.json new file mode 100644 index 00000000..b5e7da40 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/374.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xdbdddbae73bb31945285da276957eec7ff81ef50244a10962d14391dbd3743b3", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 374, + "gas_limit": 13878676, + "gas_used": 0, + "timestamp": 1757324383, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/374_validium_txs.json b/crates/integration/testdata/validium/witnesses/374_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/374_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/375.json b/crates/integration/testdata/validium/witnesses/375.json new file mode 100644 index 00000000..b61c2b17 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/375.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xbb409f05d40c0bf58508f3b71728073ff239f1cab8aae460191c424189e03d13", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 375, + "gas_limit": 13865124, + "gas_used": 0, + "timestamp": 1757324384, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/375_validium_txs.json b/crates/integration/testdata/validium/witnesses/375_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/375_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/376.json b/crates/integration/testdata/validium/witnesses/376.json new file mode 100644 index 00000000..705e795c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/376.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xc60f219abc2a267078f38e6022221350416daa00a2d8e791daebaa758c77b786", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 376, + "gas_limit": 13851585, + "gas_used": 0, + "timestamp": 1757324385, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/376_validium_txs.json b/crates/integration/testdata/validium/witnesses/376_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/376_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/377.json b/crates/integration/testdata/validium/witnesses/377.json new file mode 100644 index 00000000..76afd6f1 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/377.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x9f4013197631b4d16510017095d435f0d27d325ab34c3b37e08efb8e45870d6c", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 377, + "gas_limit": 13838060, + "gas_used": 0, + "timestamp": 1757324386, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/377_validium_txs.json b/crates/integration/testdata/validium/witnesses/377_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/377_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/378.json b/crates/integration/testdata/validium/witnesses/378.json new file mode 100644 index 00000000..b8701386 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/378.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x621e8218eb916e031b4bf6a1c63f6d59cdd3c5b57ddd6abd5a0277c10c6268ef", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 378, + "gas_limit": 13824548, + "gas_used": 0, + "timestamp": 1757324387, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/378_validium_txs.json b/crates/integration/testdata/validium/witnesses/378_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/378_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/379.json b/crates/integration/testdata/validium/witnesses/379.json new file mode 100644 index 00000000..70a48e00 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/379.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x6b88624b852591669d38a23569ea59317af99f162648edde281103c97c2c2f40", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 379, + "gas_limit": 13811049, + "gas_used": 0, + "timestamp": 1757324388, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/379_validium_txs.json b/crates/integration/testdata/validium/witnesses/379_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/379_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/380.json b/crates/integration/testdata/validium/witnesses/380.json new file mode 100644 index 00000000..98570f17 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/380.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x69cf1dff9e6e678c7d6e3296b0c3aeaf46edb51d409721fc5c0b76063643eb02", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 380, + "gas_limit": 13797563, + "gas_used": 0, + "timestamp": 1757324389, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/380_validium_txs.json b/crates/integration/testdata/validium/witnesses/380_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/380_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/381.json b/crates/integration/testdata/validium/witnesses/381.json new file mode 100644 index 00000000..8a06ca50 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/381.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xe75f3d265a94af34c1ba3850077a9fd673b1cd1c973a776436fdb9c5a11491a2", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 381, + "gas_limit": 13784090, + "gas_used": 0, + "timestamp": 1757324390, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/381_validium_txs.json b/crates/integration/testdata/validium/witnesses/381_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/381_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/382.json b/crates/integration/testdata/validium/witnesses/382.json new file mode 100644 index 00000000..5befb30d --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/382.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x6d89bd42778cedc8bdbeff365d3e18a84db169d670184ac8c938ca4d6b0fad06", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 382, + "gas_limit": 13770630, + "gas_used": 0, + "timestamp": 1757324391, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/382_validium_txs.json b/crates/integration/testdata/validium/witnesses/382_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/382_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/383.json b/crates/integration/testdata/validium/witnesses/383.json new file mode 100644 index 00000000..63416e02 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/383.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x92ea168de7f33cd02fbd72f64e8a6a141e740b9ef5ae17e3c87c01d794e32e95", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 383, + "gas_limit": 13757184, + "gas_used": 0, + "timestamp": 1757324392, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/383_validium_txs.json b/crates/integration/testdata/validium/witnesses/383_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/383_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/384.json b/crates/integration/testdata/validium/witnesses/384.json new file mode 100644 index 00000000..8bc11711 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/384.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x3fa3be02031e24ad2d89171d45f7d956369a5a7d32f7d7df4ea2c9afcb98e268", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 384, + "gas_limit": 13743751, + "gas_used": 0, + "timestamp": 1757324393, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/384_validium_txs.json b/crates/integration/testdata/validium/witnesses/384_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/384_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/385.json b/crates/integration/testdata/validium/witnesses/385.json new file mode 100644 index 00000000..9c696857 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/385.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x40ec0b6a83aeb547d8f669eae915f7a522028403cf190a9415baf35222764bef", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 385, + "gas_limit": 13730331, + "gas_used": 0, + "timestamp": 1757324394, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/385_validium_txs.json b/crates/integration/testdata/validium/witnesses/385_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/385_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/386.json b/crates/integration/testdata/validium/witnesses/386.json new file mode 100644 index 00000000..fe376b14 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/386.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x5cdfa97bdc609f6ec738a245b0d75480cf288fe5fc49f3b23237d1339d7a25b1", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 386, + "gas_limit": 13716924, + "gas_used": 0, + "timestamp": 1757324395, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/386_validium_txs.json b/crates/integration/testdata/validium/witnesses/386_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/386_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/387.json b/crates/integration/testdata/validium/witnesses/387.json new file mode 100644 index 00000000..7feb96da --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/387.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xbf1508d51825f49c80d5cbefdd1bd33bd77bf0ca20c8f2cab8682428b58ce136", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 387, + "gas_limit": 13703530, + "gas_used": 0, + "timestamp": 1757324396, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/387_validium_txs.json b/crates/integration/testdata/validium/witnesses/387_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/387_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/388.json b/crates/integration/testdata/validium/witnesses/388.json new file mode 100644 index 00000000..9899bb0e --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/388.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xbcf73deca8a354617df0c242b52048bd18b0dc5312e46d32af1e6dab75962c49", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 388, + "gas_limit": 13690149, + "gas_used": 0, + "timestamp": 1757324397, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/388_validium_txs.json b/crates/integration/testdata/validium/witnesses/388_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/388_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/389.json b/crates/integration/testdata/validium/witnesses/389.json new file mode 100644 index 00000000..290441f1 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/389.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x3fe60c556da25d56d150d4964e5b7172577685e2c64d14c92bb07fa16c8b08cf", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 389, + "gas_limit": 13676781, + "gas_used": 0, + "timestamp": 1757324398, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/389_validium_txs.json b/crates/integration/testdata/validium/witnesses/389_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/389_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/390.json b/crates/integration/testdata/validium/witnesses/390.json new file mode 100644 index 00000000..b51ccc49 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/390.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xecfdfe54d0a833b4d683bafbb245af31a2b7299f456e5fc80d0a60f76e39acda", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 390, + "gas_limit": 13663426, + "gas_used": 0, + "timestamp": 1757324399, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/390_validium_txs.json b/crates/integration/testdata/validium/witnesses/390_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/390_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/391.json b/crates/integration/testdata/validium/witnesses/391.json new file mode 100644 index 00000000..b2ce3fc3 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/391.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x8389dbd48f048f398b6e57cdaf686afa8ae770f1745fe7e8be03a2abb5d3dbda", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 391, + "gas_limit": 13650084, + "gas_used": 0, + "timestamp": 1757324400, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/391_validium_txs.json b/crates/integration/testdata/validium/witnesses/391_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/391_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/392.json b/crates/integration/testdata/validium/witnesses/392.json new file mode 100644 index 00000000..77880369 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/392.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x75fb1f377f6d854c401b3932179d1323e016082d7d069963b5d8028c55fe86b1", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 392, + "gas_limit": 13636755, + "gas_used": 0, + "timestamp": 1757324401, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/392_validium_txs.json b/crates/integration/testdata/validium/witnesses/392_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/392_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/393.json b/crates/integration/testdata/validium/witnesses/393.json new file mode 100644 index 00000000..89365e10 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/393.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x15e1845e3a76f52f05e1288f4bc50971543f0ce49bcf8ace07371d4374d99ce3", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 393, + "gas_limit": 13623439, + "gas_used": 0, + "timestamp": 1757324402, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/393_validium_txs.json b/crates/integration/testdata/validium/witnesses/393_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/393_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/394.json b/crates/integration/testdata/validium/witnesses/394.json new file mode 100644 index 00000000..daeedcd6 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/394.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xd23bb181030779a255b6c33184c45ac090162729d89496d62d942a483021bc2b", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 394, + "gas_limit": 13610136, + "gas_used": 0, + "timestamp": 1757324403, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/394_validium_txs.json b/crates/integration/testdata/validium/witnesses/394_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/394_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/395.json b/crates/integration/testdata/validium/witnesses/395.json new file mode 100644 index 00000000..e7950dfb --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/395.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x2218eebe1d443bcb9b0fb12ad9b3a8ffaf84940128b39ca59c81467da0e4987f", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 395, + "gas_limit": 13596846, + "gas_used": 0, + "timestamp": 1757324404, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/395_validium_txs.json b/crates/integration/testdata/validium/witnesses/395_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/395_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/396.json b/crates/integration/testdata/validium/witnesses/396.json new file mode 100644 index 00000000..a566003b --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/396.json @@ -0,0 +1,41 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0x13d0dce0e9bdf4cb9bc0b313ee1d0bf3623a76160cc14eb09e5dd910de0c6d1b", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receipts_root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals_root": null, + "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x1", + "number": 396, + "gas_limit": 13583569, + "gas_used": 0, + "timestamp": 1757324405, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [], + "withdrawals": null, + "states": [ + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380" + ], + "codes": [] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/396_validium_txs.json b/crates/integration/testdata/validium/witnesses/396_validium_txs.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/396_validium_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/integration/testdata/validium/witnesses/397.json b/crates/integration/testdata/validium/witnesses/397.json new file mode 100644 index 00000000..beda96d9 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/397.json @@ -0,0 +1,89 @@ +{ + "chain_id": 33333333, + "header": { + "parent_hash": "0xcdc145fab26eeae9a7de7ecb8f7e00071b10f335f9290b6fbb96cbf9443672f7", + "ommers_hash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "beneficiary": "0x0000000000000000000000000000000000000000", + "state_root": "0x37627471384167ebc743aca6d5ed5cef4fc25bd85b8eaa24a4a17a869095f927", + "transactions_root": "0xb5b4cab0e976c31c1eba72eefc65f054404ae52e9b08f1d24b66b6ab7df2971b", + "receipts_root": "0x14001267a4f178f8763de5f6ce9393b452be023db16ab3d8b007ff73a21a5e69", + "withdrawals_root": null, + "logs_bloom": "0x00000800000000040000000000000000000000000008000000000000000200000000000000000000000000000000008000000000000000000000002000000000000000000000000000000408000000000000000001000000000000000000000000000000820100400000000000000800000000000000000000000018000000010000000000000000000040000041018000000000000000000000000000000000000000200000400000800000000000200000000010000000080000000008000000000002000000000000000000000000000000000000000000000000000020000000000000000000000800000000000000000000000028000000000008000002", + "difficulty": "0x1", + "number": 397, + "gas_limit": 13570305, + "gas_used": 155443, + "timestamp": 1757324406, + "mix_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "base_fee_per_gas": 0, + "blob_gas_used": null, + "excess_blob_gas": null, + "parent_beacon_block_root": null, + "requests_hash": null, + "extra_data": "0x" + }, + "prev_state_root": "0xfaf06251cf130de38210d6ac1c683f6d25b7a3723dee54e9d84b3249396d044a", + "transactions": [ + { + "TxL1Message": { + "hash": "0xfbc06aac379325a19cb199253cc42b4fcd8cb5971a215636420dcf8ca1652ae8", + "transaction": { + "queueIndex": "0x4", + "gas": "0xf4240", + "to": "0xdf45f4790e20509959fccc0d09245b216abdaa37", + "value": "0x0", + "sender": "0xfeea7a92fd46c25a475829f1975876ba48c13ceb", + "input": "0x8ef1332e000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562000000000000000000000000694c7feee8bdad3c5d58dcbeb3da08b122ff27760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c100000000000000000000000038cb00e044d3cdd3c9f90b7efde61ef62e38fdf3000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a49000000000000000000000000cf360f1fc8763a38e3e1a19947bceb9f764a7a7c00000000000000000000000028d77629c6a8220538c351cc6bab30da0d395e34000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } + } + ], + "withdrawals": null, + "states": [ + "0xf869a03bf067596300e542c7cd2a1c5fca601da42a2739f790ad422b4f59fba0844e61b846f8448080a050fa1449ccebdbfced891c3da9d06bda7fc8146ab5abb459e9be4df5cce3a9e8a0dc3a5ee2e8f8bcfd3a6ae7d2b5f38c8bf5c77b9a3fad31aa5dfe1ffed7aad50c", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d959463fec5889034171b5ea6f51ba8b07400749fa081", + "0xf869a0205aa84538e7dde8cfa83ed6d1339a086fbe2e74cebf157f3450de22b63cd5e9b846f8440280a0bb2eadf59290e84312931dabdb4d14bd8d2dc95fbcce7aba34c197fdba5a20d5a0a4ef938d480cf8c931db7ec6ac9ddd42007497332bc7bee388162274fc504f0b", + "0xf843a0390decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563a1a05f8d49a931dd877d466f9b3c77811ff9b4107b6117fd8cbf99acfc8c0539b07e", + "0xf90171a0415be64c3141b9cb7f779484ffc834917ca6cdc6dd10fef37b0e4d164dc1d32980a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb28a049f82a5f6d261f5a8b8f59944bb090b4a84b9ac1748c63c78a2f2d26a88b8b19a0851524871e0f193508e04a2a5bf14e07bf5fba2ae4397ec12a3e298af9623bbaa05eef6aa39e018e7c9637fbf622855472d6d53e72612f48335319823aadb210a4a06d1f24918a9023f012433598b71d1cc72a6909edb52ffaa22d44fa776900e99da0939172a011c8caaf28524062e8ab21adfc61eb1ba52a97975b568a93e36e44a2a041dbaa07b1c2a073bfb7f06bfc17ae4fd67c629ea47a483d2f2893d55fd628cb8080a0d0cde8f5e35f8fd34db5007b3f32055bedb90f4e557d74e3206949e751b5c8aaa077964a3d51ca6d84c97526434e96ca68d015f6fcb056fc8b25424f56b0b7b86f8080a0fffca44e5fa0b22591a5e010ba302ee62f668a2fe098ef495fce63aa75a9384880", + "0xf90211a0f5509071821d2953b53448397715aab3c8436b35cc877e14ddb459a25ab3a690a0571106ebc1c96fe86970ce8681115f19b03a75766f4b1e40dc576dbda4b1fa9da029de80c1c141067e4f49b10c071e4859676c4cc1410294a333249758592d7c36a025b6c58fd3fd081af7ceef1d82a5974478fe20a04a2ff69e25f372b66f95baf6a0cc5d0e2f5f66b34ef25ec8a5b03d0d1272f34ddc6c40a72c07d8bde868ed2164a03e860edf66403d134ea6f254e5b983f34575d1ccfbcdb6c6d332b45da5ab7207a048749d45c78345c131ebdccdd46749fce452bc6ae7f76db888cccebfde6759f3a03c3f7b4f76dad10b7cf9775e36354c245756a34c59d27dc43acb66e86817d123a08a47b97108346b6c8851c21c9cbea202d3439bca89502afc45cb0a0fa4a21703a095707bb25b4f2c902d2ee2749673b6a15f4e4021fea65b96cb73f6df9f50f003a09234630440e5996b936e44b55a48f12ea9a5e1d63ff5a4ec02919efa96d1821ca02d29eb1bdce6824dd0aa95b4fd04288fc499e0511a2bfd0477dc9d679518d679a04d609409356bc38ade27e717f4b836ddff70fbc7d3c857b6429cb463a493e047a0938755b85dad2e9f473d24e3555244d6ec01e91dc5ffd7fdd2e5d899d46ddc6ba07b85a5161815b739a0e6fe6c6e12bf600af6b6aa406e4a4c1dbf3ee88db2a3e9a0306dbf2a7ae616d4aa59e0b705e1fb7e9bb32d07a74fd851c5b01719235d089080", + "0xf8d1a0255c9accda97ca0f6467d73e5eb02ede37514de773732782ee69e05ae43fa0ec80a0d2cce2920a9f13333fb126fbb631d819596fee0a01d53c2d75ea806180001459808080a026601a9f789915b54449154ff6522a814554d9caf8c429bb5eb4e86ec61cf78e80a0b4913e81d4d65b898fd33855cd20cc3d44e495af5d130ecfe54b7f344646159c808080a00d8cda886b204a0631d05c55829da542632cd2aa3f9f712d5b6fcc4bfd39b61a8080a03a1e44d3669992d3ac3f750a1159442ba1d83432cb03e5815d7eed7d97c7e90380", + "0xf8718080a012029a027a77ca1b6f037157f1f0cdafcdf85e7dc03c30ad04c6f2838714de9a80808080a0997726d350b090ae7ac941071e6ccb4d3d2345eab29b213db6e33094423e69388080a02a3a0fc1952479e950b7ef6015a3667c81b9de102761af6b0750b7149331e455808080808080", + "0xf7a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69594ba4e99daabe85a80e366159bee6941555d7fa0e8", + "0xf8518080a0d63199be30002d209b2f07b14a70e3fe0cb3fb6ffab8894ae69079d6f747d4288080808080808080a0b64fc9bf76504f04c8d79528469ff1e23699181fc953f8a8705f587ceca728258080808080", + "0xe2a03089cf64ba347fff04d0a11f20bc69c6cf6d5039191fa37ed958cc8c8bba2e8801", + "0xf87180808080a08841c75cb7c43489c12c04c4c7f63e08b9a00761513f6ddffe906becb344a1ec808080808080a0db5cd81a08cadc735d09a3c8436730e1d0deaad4c36f5eea5dc2f5604585fece808080a0a0c0c28224267a7fcbb886fcfa0c856983ce98bd6011093e79f5de2aa8b90f0b80", + "0xf7a035b20eef8615de99c108b05f0dbda081c91897128caa336d75dffb97c4132b4d9594b05b94a89ac46a6527332609f2f070ef84a29230", + "0xf869a0202b9f197aaaffc90ca95aedca97fb61342c8426f9d501e6940d5c6ca4e63417b846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0a0d5add908fd1e4d00c83ef660ec9df0a4176e872762600518368d29648304b1", + "0xe2a020be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2801", + "0xf85180a087bd0d14a7c3e837f4c1924a01e3b0ebb8c76db822fb9e910512593d91721d4b808080808080808080a0c78ecc25eb2ca65d4ae28168b365aee5eef9250994eee96633501b6ba6cba1978080808080", + "0xf87180a01dad1f4774da1b7e7886f9442777190af8c8b01869cf820b1fbe43d90d71f356808080808080a07e0318e868aa3819e52bdb31cf5ec275b3c2ba97fda0c53548a0e24f4b968762a08978b42093f44e27622c382502f432d85614ecbacf1198c8cefc8c4b00f12ee780808080808080", + "0xf869a020eb33871a8575f30781f091b9677c4740fe09a9a0890354fb08f68b224adfc6b846f8440180a07d7081c4db24b391f3c7b1705f550ad87887223cdd2f3c68c254d8791d414418a0dbe40d0be513053796290e8ff404c74148f18f83e81385469bbb67ceec3897ea", + "0xf851808080808080a0260fd42cb59c52a3a2366d94bfef2504b0378b31edad7a20418b6884d143155b8080808080a02007109b2ebf29b6b276c7a013ebe17927d190ad3591035796c85e89f6179a3c80808080", + "0xf7a032a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a829594f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xe2a0310e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601", + "0xf8b18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb2880a092f0e96bbb99b5db5259dc3f7587252d3b0271695590c502ec420525affc9f18808080a071f7bfaa0b222c05506d4b7c2c6a763b79c73fd03627d8747d131d946f842280a00eaf97611504195db5f5630df53714bee0e218a3eef82211ad66fd432c68407ba0c557d0d8d6d1ccbbba16ce309be7fc47931cce54470663fa528da9c3a90ff37e808080808080", + "0xf85180808080808080a0419f17c5c8e8392e190f4b3f098f72725a089100b7a313f62681827297579b9780a0f144b604936974b58ed40e0af9e8da3ada482aacd75316f90d71d51b92972b4d80808080808080", + "0xf869a020a42a2312e58fde1ddba031d86ec9c2484386e302494241b82105397dc57ffcb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0c71c22298afad00443f07657a352641692a5ceb76f68c840a260bfd2bb6f2384", + "0xf901b1a0fbbc9507d6af8c79c9595b5cf16a020036872dfa9739f92d0957e80fd16805f5a01eca4f02dcb6c4ce022598bf6e55a6bd12084ff25c944f5e3c96fb3f0f7b14e0a02a69e063db0e4b0c4406689215499b4c93400a7ed8a34b427487ed461ecc142da08da9d63ae28082baf84f11bd7b64b962b993c767bb31bf103be730e2c0835acca01c7820aec90ca16de0949ae2dbb94f4486df97643565515898656de7e761fd13a0099c7f8848ad421ed7fde3abf097b8e99764817da62a09da85f0958323f1932ca09f90817a88708e63a9a71daf710d9d8a1fa4098838810e617fafa41b882d2cfc8080a0f8bb0b17ae97b6b4878712ddd79e2ed08c0dc0365940b653062d88d85387525da0b0cb4e7e15dc55d261a134cd69db29c3f3394637ba119d8f22aa17cd3705534380a09771911a75d96109e9b5cda1b2a702e7602b47b4c84aa795d2e5c6cb9782b5b5a0a0ca3e74cee2b1badc6367ac7d75cf01a7f39f637f5d2c272bf29c6ddc0a5feaa0802ff85528e214575736d079a17821083f9df229beed8e1124af8c1bbd92a13ea07b6f59d555d82221427968dbae72832b1cf276205df92b95e553b8dc693c8f8780", + "0xe216a07d2ed81e1ecce0ea024041412466f2d0f1f7d160626b65583a4ffd5d79561f76", + "0xf869a02018a0b8246d45a5a396db3b461bf4a56bd646d9274adeadb5471dd31e30574fb846f8448080a05cd4a7aa26d075c517200f8c54e85205a5dcf087b3280b243d6521d5861021e6a0c0be97aa0ca343d23e56a121da166078248b2ddd5f5c4886213c4d236c0ce9d2", + "0xf89180808080a0b01dff3b495f178dacb3fe51da4d0d71edfe15751ebdc8c8b99ce95dc096abd580a04cf29452689761f0f8fcdef654e5ceeb2ef57f305923ec1639824799d2714f22808080a046ff8d1293b06f4b10fbe90a84a44209419abd752f53b044e8e394f9aa715c8380a04a423fad8dd11a1f506cfef42cc6df790a0ed3260768ec28a681b6a35a6a29ff80808080", + "0xe2a03175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901", + "0xf7a032df0bdf5a5f92d8037cf11e50f13d8017aefc99d20a73c826416df79570d4819594d159188ae0eef57b221b6574313e35ed5cd4dcc5", + "0xf888a02087efc2b625c18816a35848616c5247a1da19c01d39f8106c1cdd496db5a52ab865f863019f7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000a016461faebe676904bd4022092ae575098bdc44c1141aa69d44878bae4d110d94a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf8d18080a04fc5f13ab2f9ba0c2da88b0151ab0e7cf4d85d08cca45ccd923c6ab76323eb288080a05eef6aa39e018e7c9637fbf622855472d6d53e72612f48335319823aadb210a4a08968f35693012a4149edcac94a158651e00cb62cff5d4ede25dfa85637408a70a0991bdf80f1517e84f6de0649577b5391ac036a8e7b161ca8af64ab92e6d17904a068f5c8400cccc32a720b141c8442bf35020f356c50af125b402092f48b385dcf8080a0f4984a11f61a2921456141df88de6e1a710d28681b91af794c5a721e47839cd78080808080", + "0xf869a020273fbce982163432756c92acee04339663618b2ba6c989cf2ee90aab28543fb846f8440180a001f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507ba0caba68b9ba765c98004e8d5779c8d5eaf818e1d9636baa33514f64ef8715311e", + "0xf7a020197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe9594694c7feee8bdad3c5d58dcbeb3da08b122ff2776", + "0xf869a020d0dc00284bbf26bbb50d4e8d8edd193dc3c22d5d4a6ed6c595ea4cbac935bbb846f8440180a08dc7a0746c97521973913c50820ef2936f51dccdcf9d8dde0ab41e9eb288ae19a0b001c201786779d0135ae58808918c023b19068e14ca42a065482840e7872270", + "0xf869a020d0af77d4edcb78fd0b68acfe8ba4cf68a24a92bc8bf96c5509705ef4e46850b846f8440480a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + ], + "codes": [ + "0x363d3d373d3d3d363d73ba4e99daabe85a80e366159bee6941555d7fa0e85af43d82803e903d91602b57fd5bf3", + "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b45780639dc29fac116100795780639dc29fac1461029a578063a457c2d7146102ad578063a9059cbb146102c0578063c820f146146102d3578063d505accf146102e6578063dd62ed3e146102f9575f80fd5b806370a0823114610229578063797594b0146102515780637ecebe001461026457806384b0196e1461027757806395d89b4114610292575f80fd5b8063313ce567116100fa578063313ce567146101c75780633644e515146101e657806339509351146101ee5780634000aea01461020157806340c10f1914610214575f80fd5b806306fdde0314610136578063095ea7b314610154578063116191b61461017757806318160ddd146101a257806323b872dd146101b4575b5f80fd5b61013e61030c565b60405161014b91906113cf565b60405180910390f35b610167610162366004611403565b61039c565b604051901515815260200161014b565b60cc5461018a906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b6035545b60405190815260200161014b565b6101676101c236600461142b565b6103b5565b60cd54600160a01b900460ff1660405160ff909116815260200161014b565b6101a66103d8565b6101676101fc366004611403565b6103e6565b61016761020f366004611464565b610407565b610227610222366004611403565b610463565b005b6101a66102373660046114e4565b6001600160a01b03165f9081526033602052604090205490565b60cd5461018a906001600160a01b031681565b6101a66102723660046114e4565b6104bf565b61027f6104dc565b60405161014b97969594939291906114fd565b61013e610575565b6102276102a8366004611403565b610584565b6101676102bb366004611403565b6105d7565b6101676102ce366004611403565b610651565b6102276102e1366004611641565b61065e565b6102276102f43660046116d1565b6107c0565b6101a6610307366004611736565b610921565b60606036805461031b90611767565b80601f016020809104026020016040519081016040528092919081815260200182805461034790611767565b80156103925780601f1061036957610100808354040283529160200191610392565b820191905f5260205f20905b81548152906001019060200180831161037557829003601f168201915b5050505050905090565b5f336103a981858561094b565b60019150505b92915050565b5f336103c2858285610a6f565b6103cd858585610ae7565b506001949350505050565b5f6103e1610c90565b905090565b5f336103a98185856103f88383610921565b6104029190611799565b61094b565b5f6104128585610651565b506001600160a01b0385163b156103cd576103cd858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9992505050565b60cc546001600160a01b031633146104b15760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064015b60405180910390fd5b6104bb8282610cfe565b5050565b6001600160a01b0381165f908152609960205260408120546103af565b5f6060805f805f60606065545f801b1480156104f85750606654155b61053c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104a8565b610544610dbd565b61054c610dcc565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606037805461031b90611767565b60cc546001600160a01b031633146105cd5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c79204761746577617960a01b60448201526064016104a8565b6104bb8282610ddb565b5f33816105e48286610921565b9050838110156106445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104a8565b6103cd828686840361094b565b5f336103a9818585610ae7565b5f54610100900460ff161580801561067c57505f54600160ff909116105b806106955750303b15801561069557505f5460ff166001145b6106f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104a8565b5f805460ff191660011790558015610719575f805461ff0019166101001790555b61072286610f0a565b61072c8686610f56565b60cd805460cc80546001600160a01b038088166001600160a01b03199283161790925590851660ff8816600160a01b02919091166001600160a81b03199092169190911717905580156107b8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b834211156108105760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104a8565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861083e8c610f86565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089882610fad565b90505f6108a782878787610fd9565b9050896001600160a01b0316816001600160a01b03161461090a5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104a8565b6109158a8a8a61094b565b50505050505050505050565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166109ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104a8565b6001600160a01b038216610a0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104a8565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a7a8484610921565b90505f198114610ae15781811015610ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104a8565b610ae1848484840361094b565b50505050565b6001600160a01b038316610b4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104a8565b6001600160a01b038216610bad5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104a8565b6001600160a01b0383165f9081526033602052604090205481811015610c245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104a8565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c839086815260200190565b60405180910390a3610ae1565b5f6103e1610fff565b604051635260769b60e11b815283906001600160a01b0382169063a4c0ed3690610ccb903390879087906004016117b8565b5f604051808303815f87803b158015610ce2575f80fd5b505af1158015610cf4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b038216610d545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104a8565b8060355f828254610d659190611799565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606067805461031b90611767565b60606068805461031b90611767565b6001600160a01b038216610e3b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104a8565b6001600160a01b0382165f9081526033602052604090205481811015610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104a8565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a62565b505050565b5f54610100900460ff16610f305760405162461bcd60e51b81526004016104a8906117e7565b610f5381604051806040016040528060018152602001603160f81b815250611072565b50565b5f54610100900460ff16610f7c5760405162461bcd60e51b81526004016104a8906117e7565b6104bb82826110bf565b6001600160a01b0381165f9081526099602052604090208054600181018255905b50919050565b5f6103af610fb9610c90565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610fe8878787876110fe565b91509150610ff5816111bb565b5095945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611029611304565b61103161135c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f54610100900460ff166110985760405162461bcd60e51b81526004016104a8906117e7565b60676110a4838261187d565b5060686110b1828261187d565b50505f606581905560665550565b5f54610100900460ff166110e55760405162461bcd60e51b81526004016104a8906117e7565b60366110f1838261187d565b506037610f05828261187d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561113357505f905060036111b2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611184573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166111ac575f600192509250506111b2565b91505f90505b94509492505050565b5f8160048111156111ce576111ce611939565b036111d65750565b60018160048111156111ea576111ea611939565b036112375760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104a8565b600281600481111561124b5761124b611939565b036112985760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104a8565b60038160048111156112ac576112ac611939565b03610f535760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104a8565b5f8061130e610dbd565b805190915015611325578051602090910120919050565b60655480156113345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f80611366610dcc565b80519091501561137d578051602090910120919050565b60665480156113345792915050565b5f81518084525f5b818110156113b057602081850181015186830182015201611394565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6113e1602083018461138c565b9392505050565b80356001600160a01b03811681146113fe575f80fd5b919050565b5f8060408385031215611414575f80fd5b61141d836113e8565b946020939093013593505050565b5f805f6060848603121561143d575f80fd5b611446846113e8565b9250611454602085016113e8565b9150604084013590509250925092565b5f805f8060608587031215611477575f80fd5b611480856113e8565b935060208501359250604085013567ffffffffffffffff808211156114a3575f80fd5b818701915087601f8301126114b6575f80fd5b8135818111156114c4575f80fd5b8860208285010111156114d5575f80fd5b95989497505060200194505050565b5f602082840312156114f4575f80fd5b6113e1826113e8565b60ff60f81b881681525f602060e0602084015261151d60e084018a61138c565b838103604085015261152f818a61138c565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561158257835183529284019291840191600101611566565b50909c9b505050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115b7575f80fd5b813567ffffffffffffffff808211156115d2576115d2611594565b604051601f8301601f19908116603f011681019082821181831017156115fa576115fa611594565b81604052838152866020858801011115611612575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803560ff811681146113fe575f80fd5b5f805f805f60a08688031215611655575f80fd5b853567ffffffffffffffff8082111561166c575f80fd5b61167889838a016115a8565b9650602088013591508082111561168d575f80fd5b5061169a888289016115a8565b9450506116a960408701611631565b92506116b7606087016113e8565b91506116c5608087016113e8565b90509295509295909350565b5f805f805f805f60e0888a0312156116e7575f80fd5b6116f0886113e8565b96506116fe602089016113e8565b9550604088013594506060880135935061171a60808901611631565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215611747575f80fd5b611750836113e8565b915061175e602084016113e8565b90509250929050565b600181811c9082168061177b57607f821691505b602082108103610fa757634e487b7160e01b5f52602260045260245ffd5b808201808211156103af57634e487b7160e01b5f52601160045260245ffd5b60018060a01b0384168152826020820152606060408201525f6117de606083018461138c565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610f0557805f5260205f20601f840160051c810160208510156118575750805b601f840160051c820191505b81811015611876575f8155600101611863565b5050505050565b815167ffffffffffffffff81111561189757611897611594565b6118ab816118a58454611767565b84611832565b602080601f8311600181146118de575f84156118c75750858301515b5f19600386901b1c1916600185901b1785556107b8565b5f85815260208120601f198616915b8281101561190c578886015182559484019460019091019084016118ed565b508582101561192957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "0x6080604052600436106100f2575f3560e01c8063797594b011610087578063bedb86fb11610057578063bedb86fb146102b0578063c4d66de8146102cf578063e70fc93b146102ee578063f2fde38b14610327575f80fd5b8063797594b01461022e5780638da5cb5b146102615780638ef1332e1461027e578063b2267a7b1461029d575f80fd5b80635c975abb116100c25780635c975abb146101d15780635f7b1577146101e85780636e296e45146101fb578063715018a61461021a575f80fd5b806302345b50146101055780632a6cccb2146101485780633b70c18a14610167578063478222c2146101b2575f80fd5b36610101576100ff610346565b005b5f80fd5b348015610110575f80fd5b5061013361011f366004610f80565b60fc6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610153575f80fd5b506100ff610162366004610fb2565b6103a7565b348015610172575f80fd5b5061019a7f000000000000000000000000530000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013f565b3480156101bd575f80fd5b5060cb5461019a906001600160a01b031681565b3480156101dc575f80fd5b5060655460ff16610133565b6100ff6101f6366004610fd2565b610411565b348015610206575f80fd5b5060c95461019a906001600160a01b031681565b348015610225575f80fd5b506100ff610463565b348015610239575f80fd5b5061019a7f000000000000000000000000edd97a92fd46c25a475829f1975876ba48c12bda81565b34801561026c575f80fd5b506033546001600160a01b031661019a565b348015610289575f80fd5b506100ff61029836600461110d565b610474565b6100ff6102ab36600461117a565b6105ab565b3480156102bb575f80fd5b506100ff6102ca3660046111d5565b6105c5565b3480156102da575f80fd5b506100ff6102e9366004610fb2565b6105e6565b3480156102f9575f80fd5b50610319610308366004610f80565b60fb6020525f908152604090205481565b60405190815260200161013f565b348015610332575f80fd5b506100ff610341366004610fb2565b6106f0565b6033546001600160a01b031633146103a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6103af610346565b60cb80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4aadc32827849f797733838c61302f7f56d2b6db28caa175eb3f7f8e5aba25f591015b60405180910390a15050565b610419610766565b61045b868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506107ac915050565b505050505050565b61046b610346565b6103a55f6109db565b61047c610766565b7f000000000000000000000000edd97a92fd46c25a475829f1975876ba48c12bda6001600160a01b03167311110000000000000000000000000000000011101933016001600160a01b0316146105145760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74204c315363726f6c6c4d657373656e67657200604482015260640161039c565b5f6105228686868686610a2c565b80516020918201205f81815260fc90925260409091205490915060ff161561059e5760405162461bcd60e51b815260206004820152602960248201527f4d6573736167652077617320616c7265616479207375636365737366756c6c7960448201526808195e1958dd5d195960ba1b606482015260840161039c565b61045b8686868585610a7c565b6105b3610766565b6105bf848484846107ac565b50505050565b6105cd610346565b80156105de576105db610c64565b50565b6105db610cbe565b5f54610100900460ff161580801561060457505f54600160ff909116105b8061061d5750303b15801561061d57505f5460ff166001145b6106805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161039c565b5f805460ff1916600117905580156106a1575f805461ff0019166101001790555b6106ab5f80610cf7565b80156106ec575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610405565b5050565b6106f8610346565b6001600160a01b03811661075d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039c565b6105db816109db565b60655460ff16156103a55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161039c565b6107b4610d78565b8234146107f85760405162461bcd60e51b81526020600482015260126024820152710dae6ce5cecc2d8eaca40dad2e6dac2e8c6d60731b604482015260640161039c565b5f7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03166326aad7b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906111f4565b90505f6108893387878588610a2c565b80516020918201205f81815260fb909252604090912054909150156108e55760405162461bcd60e51b81526020600482015260126024820152714475706c696361746564206d65737361676560701b604482015260640161039c565b5f81815260fb6020526040908190204290555163600a2e7760e01b8152600481018290527f00000000000000000000000053000000000000000000000000000000000000006001600160a01b03169063600a2e77906024016020604051808303815f875af1158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906111f4565b506001600160a01b038616336001600160a01b03167f104371f3b442861a2a7b82a070afbbaab748bb13757bf47769e170e37809ec1e878587896040516109c79493929190611258565b60405180910390a350506105bf6001609755565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60608585858585604051602401610a47959493929190611286565b60408051601f198184030181529190526020810180516001600160e01b0316634778999760e11b179052905095945050505050565b7f00000000000000000000000053000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610afd5760405162461bcd60e51b815260206004820152601c60248201527f466f7262696420746f2063616c6c206d65737361676520717565756500000000604482015260640161039c565b610b0684610dd8565b60c9546001600160a01b0390811690861603610b5d5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21036b2b9b9b0b3b29039b2b73232b960511b604482015260640161039c565b60c980546001600160a01b0319166001600160a01b03878116919091179091556040515f918616908590610b929086906112ca565b5f6040518083038185875af1925050503d805f8114610bcc576040519150601f19603f3d011682016040523d82523d5f602084013e610bd1565b606091505b505060c980546001600160a01b031916600117905590508015610c32575f82815260fc6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261045b565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f905f90a2505050505050565b610c6c610766565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ca13390565b6040516001600160a01b03909116815260200160405180910390a1565b610cc6610e26565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ca1565b5f54610100900460ff16610d1d5760405162461bcd60e51b815260040161039c906112e5565b610d25610e6f565b610d2d610e9d565b610d35610ecb565b60c980546001600160a01b03191660011790556001600160a01b038116156106ec5760cb80546001600160a01b0383166001600160a01b03199091161790555050565b600260975403610dca5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161039c565b6002609755565b6001609755565b306001600160a01b038216036105db5760405162461bcd60e51b81526020600482015260136024820152722337b93134b2103a379031b0b6361039b2b63360691b604482015260640161039c565b60655460ff166103a55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161039c565b5f54610100900460ff16610e955760405162461bcd60e51b815260040161039c906112e5565b6103a5610ef9565b5f54610100900460ff16610ec35760405162461bcd60e51b815260040161039c906112e5565b6103a5610f28565b5f54610100900460ff16610ef15760405162461bcd60e51b815260040161039c906112e5565b6103a5610f5a565b5f54610100900460ff16610f1f5760405162461bcd60e51b815260040161039c906112e5565b6103a5336109db565b5f54610100900460ff16610f4e5760405162461bcd60e51b815260040161039c906112e5565b6065805460ff19169055565b5f54610100900460ff16610dd15760405162461bcd60e51b815260040161039c906112e5565b5f60208284031215610f90575f80fd5b5035919050565b80356001600160a01b0381168114610fad575f80fd5b919050565b5f60208284031215610fc2575f80fd5b610fcb82610f97565b9392505050565b5f805f805f8060a08789031215610fe7575f80fd5b610ff087610f97565b955060208701359450604087013567ffffffffffffffff80821115611013575f80fd5b818901915089601f830112611026575f80fd5b813581811115611034575f80fd5b8a6020828501011115611045575f80fd5b6020830196508095505050506060870135915061106460808801610f97565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611093575f80fd5b813567ffffffffffffffff808211156110ae576110ae611070565b604051601f8301601f19908116603f011681019082821181831017156110d6576110d6611070565b816040528381528660208588010111156110ee575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f60a08688031215611121575f80fd5b61112a86610f97565b945061113860208701610f97565b93506040860135925060608601359150608086013567ffffffffffffffff811115611161575f80fd5b61116d88828901611084565b9150509295509295909350565b5f805f806080858703121561118d575f80fd5b61119685610f97565b935060208501359250604085013567ffffffffffffffff8111156111b8575f80fd5b6111c487828801611084565b949793965093946060013593505050565b5f602082840312156111e5575f80fd5b81358015158114610fcb575f80fd5b5f60208284031215611204575f80fd5b5051919050565b5f5b8381101561122557818101518382015260200161120d565b50505f910152565b5f815180845261124481602086016020860161120b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f61127c608083018461122d565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f906112bf9083018461122d565b979650505050505050565b5f82516112db81846020870161120b565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a", + "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80635c60da1b1461006457806361e98ca114610093578063715018a6146100a65780637bdbcbbf146100b05780638da5cb5b146100c3578063f2fde38b146100d3575b5f80fd5b600154610077906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100776100a1366004610463565b6100e6565b6100ae610115565b005b6100776100be366004610463565b610128565b5f546001600160a01b0316610077565b6100ae6100e1366004610494565b6101a1565b5f806100f2848461021f565b60015490915061010b906001600160a01b0316826102a4565b9150505b92915050565b61011d610306565b6101265f61035f565b565b5f610131610306565b5f61013c848461021f565b6001549091505f90610157906001600160a01b0316836103ae565b9050806001600160a01b0316846001600160a01b03167f07ab516ad4f19b4465f15fa7c2dbc064f18e734a0846d6e0932da244aa3d8a7160405160405180910390a3949350505050565b6101a9610306565b6001600160a01b0381166102135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61021c8161035f565b50565b6040516bffffffffffffffffffffffff19606083901b1660208201525f9083906034016040516020818303038152906040528051906020012060405160200161028692919060609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b5f546001600160a01b031633146101265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661010f5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161020a565b80356001600160a01b038116811461045e575f80fd5b919050565b5f8060408385031215610474575f80fd5b61047d83610448565b915061048b60208401610448565b90509250929050565b5f602082840312156104a4575f80fd5b6102ff8261044856fea164736f6c6343000818000a", + "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f80fd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f80375f80365f845af43d5f803e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016108036027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f80856001600160a01b03168560405161056691906107b5565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107d0565b5f8085851115610676575f80fd5b83861115610682575f80fd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f80fd5b919050565b5f602082840312156106ba575f80fd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156106e8575f80fd5b6106f18361068f565b9150602083013567ffffffffffffffff8082111561070d575f80fd5b818501915085601f830112610720575f80fd5b813581811115610732576107326106c3565b604051601f8201601f19908116603f0116810190838211818310171561075a5761075a6106c3565b81604052828152886020848701011115610772575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f5b838110156107ad578181015183820152602001610795565b50505f910152565b5f82516107c6818460208701610793565b9190910192915050565b602081525f82518060208401526107ee816040850160208701610793565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000818000a", + "0x6080604052600436106100d9575f3560e01c80638da5cb5b1161007c578063e77772fe11610057578063e77772fe14610234578063f2fde38b14610267578063f887ea4014610286578063f8c8765e146102b9575f80fd5b80638da5cb5b146101e5578063a93a4af914610202578063c676ad2914610215575f80fd5b80636c07ea43116100b75780636c07ea4314610178578063715018a61461018b578063797594b01461019f5780638431f5c1146101d2575f80fd5b80633cb747bf146100dd57806354bbd59c1461012c578063575361b614610163575b5f80fd5b3480156100e8575f80fd5b506101107f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa3781565b6040516001600160a01b03909116815260200160405180910390f35b348015610137575f80fd5b50610110610146366004611026565b6001600160a01b039081165f90815260fb60205260409020541690565b610176610171366004611048565b6102d8565b005b6101766101863660046110ea565b610323565b348015610196575f80fd5b50610176610361565b3480156101aa575f80fd5b506101107f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e56281565b6101766101e0366004611188565b610374565b3480156101f0575f80fd5b506065546001600160a01b0316610110565b610176610210366004611253565b6107d5565b348015610220575f80fd5b5061011061022f366004611026565b6107e7565b34801561023f575f80fd5b506101107f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca81565b348015610272575f80fd5b50610176610281366004611026565b61087f565b348015610291575f80fd5b506101107f000000000000000000000000000000000000000000000000000000000000000181565b3480156102c4575f80fd5b506101766102d3366004611296565b6108f8565b61031b86868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610a0a915050565b505050505050565b61035c8333845f5b6040519080825280601f01601f191660200182016040528015610355576020820181803683370190505b5085610a0a565b505050565b610369610cb5565b6103725f610d0f565b565b337f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa376001600160a01b0316146103bd576040516385bd908d60e01b815260040160405180910390fd5b7f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa376001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d91906112ef565b6001600160a01b03167f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e5626001600160a01b03161461048e576040516307b140f360e51b815260040160405180910390fd5b610496610d60565b34156104dd5760405162461bcd60e51b81526020600482015260116024820152706e6f6e7a65726f206d73672e76616c756560781b60448201526064015b60405180910390fd5b6001600160a01b0386166105335760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016104d4565b6040516361e98ca160e01b81523060048201526001600160a01b0387811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca909116906361e98ca190604401602060405180830381865afa1580156105a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906112ef565b9050806001600160a01b0316866001600160a01b03161461061c5760405162461bcd60e51b81526020600482015260116024820152700d86440e8ded6cadc40dad2e6dac2e8c6d607b1b60448201526064016104d4565b505f818060200190518101906106329190611376565b92509050606080821561065c578380602001905181019061065391906113c8565b925090506106c3565b6001600160a01b038881165f90815260fb60205260409020548116908a16146106c05760405162461bcd60e51b81526020600482015260166024820152750e8ded6cadc40dac2e0e0d2dcce40dad2e6dac2e8c6d60531b60448201526064016104d4565b50825b6001600160a01b0388163b610709576001600160a01b038881165f90815260fb6020526040902080546001600160a01b031916918b16919091179055610709828a610db9565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528916906340c10f19906044015f604051808303815f87803b158015610750575f80fd5b505af1158015610762573d5f803e3d5ffd5b505050506107708682610ed4565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f165ba69f6ab40c50cade6f65431801e5f9c7d7830b7545391920db039133ba348989866040516107c193929190611449565b60405180910390a450505061031b60018055565b6107e18484845f61032b565b50505050565b6040516361e98ca160e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca909116906361e98ca190604401602060405180830381865afa158015610855573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087991906112ef565b92915050565b610887610cb5565b6001600160a01b0381166108ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b6108f581610d0f565b50565b5f54610100900460ff161580801561091657505f54600160ff909116105b8061092f5750303b15801561092f57505f5460ff166001145b6109925760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d4565b5f805460ff1916600117905580156109b3575f805461ff0019166101001790555b6109be858585610f51565b8015610a03575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610a12610d60565b5f8311610a585760405162461bcd60e51b81526020600482015260146024820152731dda5d1a191c985dc81e995c9bc8185b5bdd5b9d60621b60448201526064016104d4565b337f00000000000000000000000000000000000000000000000000000000000000016001600160a01b0316819003610aa35782806020019051810190610a9e9190611478565b935090505b6001600160a01b038087165f90815260fb60205260409020541680610b0a5760405162461bcd60e51b815260206004820152601960248201527f6e6f20636f72726573706f6e64696e67206c3120746f6b656e0000000000000060448201526064016104d4565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201879052881690639dc29fac906044015f604051808303815f87803b158015610b51575f80fd5b505af1158015610b63573d5f803e3d5ffd5b505050505f818884898989604051602401610b8396959493929190611494565b60408051601f198184030181529181526020820180516001600160e01b031663084bd13b60e41b1790525163b2267a7b60e01b81529091506001600160a01b037f000000000000000000000000df45f4790e20509959fccc0d09245b216abdaa37169063b2267a7b903490610c22907f000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562905f9087908b906004016114e2565b5f604051808303818588803b158015610c39575f80fd5b505af1158015610c4b573d5f803e3d5ffd5b5050505050826001600160a01b0316886001600160a01b0316836001600160a01b03167fd8d3a3f4ab95694bef40475997598bcf8acd3ed9617a4c1013795429414c27e88a8a8a604051610ca193929190611449565b60405180910390a4505050610a0360018055565b6065546001600160a01b031633146103725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d4565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600260015403610db25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104d4565b6002600155565b604051637bdbcbbf60e01b81523060048201526001600160a01b0382811660248301525f917f000000000000000000000000c9332420a04c3ffccf95f03659c7282fb4938fca90911690637bdbcbbf906044016020604051808303815f875af1158015610e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4c91906112ef565b90505f805f85806020019051810190610e659190611519565b925092509250836001600160a01b031663c820f146838584308a6040518663ffffffff1660e01b8152600401610e9f959493929190611591565b5f604051808303815f87803b158015610eb6575f80fd5b505af1158015610ec8573d5f803e3d5ffd5b50505050505050505050565b5f8151118015610eed57505f826001600160a01b03163b115b15610f475760405163109b953160e01b81526001600160a01b0383169063109b953190610f1e9084906004016115e0565b5f604051808303815f87803b158015610f35575f80fd5b505af115801561031b573d5f803e3d5ffd5b5050565b60018055565b610f59610f61565b61035c610f8f565b5f54610100900460ff16610f875760405162461bcd60e51b81526004016104d4906115f2565b610372610fbd565b5f54610100900460ff16610fb55760405162461bcd60e51b81526004016104d4906115f2565b610372610fe3565b5f54610100900460ff16610f4b5760405162461bcd60e51b81526004016104d4906115f2565b5f54610100900460ff166110095760405162461bcd60e51b81526004016104d4906115f2565b61037233610d0f565b6001600160a01b03811681146108f5575f80fd5b5f60208284031215611036575f80fd5b813561104181611012565b9392505050565b5f805f805f8060a0878903121561105d575f80fd5b863561106881611012565b9550602087013561107881611012565b945060408701359350606087013567ffffffffffffffff8082111561109b575f80fd5b818901915089601f8301126110ae575f80fd5b8135818111156110bc575f80fd5b8a60208285010111156110cd575f80fd5b602083019550809450505050608087013590509295509295509295565b5f805f606084860312156110fc575f80fd5b833561110781611012565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111595761115961111c565b604052919050565b5f67ffffffffffffffff82111561117a5761117a61111c565b50601f01601f191660200190565b5f805f805f8060c0878903121561119d575f80fd5b86356111a881611012565b955060208701356111b881611012565b945060408701356111c881611012565b935060608701356111d881611012565b92506080870135915060a087013567ffffffffffffffff8111156111fa575f80fd5b8701601f8101891361120a575f80fd5b803561121d61121882611161565b611130565b8181528a6020838501011115611231575f80fd5b816020840160208301375f602083830101528093505050509295509295509295565b5f805f8060808587031215611266575f80fd5b843561127181611012565b9350602085013561128181611012565b93969395505050506040820135916060013590565b5f805f80608085870312156112a9575f80fd5b84356112b481611012565b935060208501356112c481611012565b925060408501356112d481611012565b915060608501356112e481611012565b939692955090935050565b5f602082840312156112ff575f80fd5b815161104181611012565b5f5b8381101561132457818101518382015260200161130c565b50505f910152565b5f82601f83011261133b575f80fd5b815161134961121882611161565b81815284602083860101111561135d575f80fd5b61136e82602083016020870161130a565b949350505050565b5f8060408385031215611387575f80fd5b82518015158114611396575f80fd5b602084015190925067ffffffffffffffff8111156113b2575f80fd5b6113be8582860161132c565b9150509250929050565b5f80604083850312156113d9575f80fd5b825167ffffffffffffffff808211156113f0575f80fd5b6113fc8683870161132c565b93506020850151915080821115611411575f80fd5b506113be8582860161132c565b5f815180845261143581602086016020860161130a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f61146f606083018461141e565b95945050505050565b5f8060408385031215611489575f80fd5b825161139681611012565b6001600160a01b03878116825286811660208301528581166040830152841660608201526080810183905260c060a082018190525f906114d69083018461141e565b98975050505050505050565b60018060a01b0385168152836020820152608060408201525f611508608083018561141e565b905082606083015295945050505050565b5f805f6060848603121561152b575f80fd5b835167ffffffffffffffff80821115611542575f80fd5b61154e8783880161132c565b94506020860151915080821115611563575f80fd5b506115708682870161132c565b925050604084015160ff81168114611586575f80fd5b809150509250925092565b60a081525f6115a360a083018861141e565b82810360208401526115b5818861141e565b60ff96909616604084015250506001600160a01b039283166060820152911660809091015292915050565b602081525f611041602083018461141e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000818000a" + ] +} \ No newline at end of file diff --git a/crates/integration/testdata/validium/witnesses/397_validium_txs.json b/crates/integration/testdata/validium/witnesses/397_validium_txs.json new file mode 100644 index 00000000..94e1bd81 --- /dev/null +++ b/crates/integration/testdata/validium/witnesses/397_validium_txs.json @@ -0,0 +1,21 @@ +[ + { + "blockHash": "0x6f4b201815740b0bff0173d3306a31e7f350af83a62352051dd49537bdead021", + "blockNumber": "0x18d", + "from": "0xfeea7a92fd46c25a475829f1975876ba48c13ceb", + "gas": "0xf4240", + "gasPrice": "0x0", + "hash": "0x48594f3ac763e40087a762e9e49d2f472fe63b45a08802117e86dfc8293a5e1c", + "input": "0x8ef1332e000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562000000000000000000000000694c7feee8bdad3c5d58dcbeb3da08b122ff27760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f00000000000000000000000038cb00e044d3cdd3c9f90b7efde61ef62e38fdf3000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a49000000000000000000000000cf360f1fc8763a38e3e1a19947bceb9f764a7a7c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504a928b626e9f3420e05aa33c24616c6a7389bf9925390caeff341a9613f065788b8efbba5f2424ddb48a0c4f6254a67aa57753116d44905cd5ab6d9ca5a9715cfa11cff5a3047a766e7444ff1bdc786bb5bfe5a91f6ff4dfa59394bca5c2b3e203f98cf6e06ae19790c00b6ee488f980aa6d0f039000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "to": "0xdf45f4790e20509959fccc0d09245b216abdaa37", + "transactionIndex": "0x0", + "value": "0x0", + "type": "0x7e", + "v": "0x0", + "r": "0x0", + "s": "0x0", + "sender": "0xfeea7a92fd46c25a475829f1975876ba48c13ceb", + "queueIndex": "0x4" + } +] diff --git a/crates/integration/tests/bundle_circuit.rs b/crates/integration/tests/bundle_circuit.rs index 2a0fbbee..7fc43385 100644 --- a/crates/integration/tests/bundle_circuit.rs +++ b/crates/integration/tests/bundle_circuit.rs @@ -22,7 +22,7 @@ fn preset_bundle() -> BundleTaskGenerator { } fn preset_bundle_validium() -> BundleTaskGenerator { - BundleTaskGenerator::from_batch_tasks(&[preset_batch_validium()]) + BundleTaskGenerator::from_batch_tasks(&preset_batch_validium()) } #[test] diff --git a/crates/types/base/src/version.rs b/crates/types/base/src/version.rs index 2eb0a1cb..19f81a94 100644 --- a/crates/types/base/src/version.rs +++ b/crates/types/base/src/version.rs @@ -136,8 +136,7 @@ impl Version { Self { domain: Domain::Validium, stf_version: STFVersion::V1, - fork: ForkName::EuclidV2, - // TODO: update to feynman once latest testdata is obtained. + fork: ForkName::Feynman, codec: Codec::V9, } } diff --git a/crates/types/batch/src/builder/v7.rs b/crates/types/batch/src/builder/v7.rs index 73ed00be..d57aec02 100644 --- a/crates/types/batch/src/builder/v7.rs +++ b/crates/types/batch/src/builder/v7.rs @@ -32,7 +32,7 @@ fn verify_blob_versioned_hash( #[cfg(feature = "host")] { use crate::utils::point_eval; - let kzg_blob = point_eval::to_blob(&blob_bytes); + let kzg_blob = point_eval::to_blob(blob_bytes); let kzg_commitment = point_eval::blob_to_kzg_commitment(&kzg_blob); assert_eq!( point_eval::get_versioned_hash(&kzg_commitment), From 09024989dd2391b62cea8219f21f2696af8c6f25 Mon Sep 17 00:00:00 2001 From: Rohit Narurkar Date: Mon, 8 Sep 2025 11:18:55 +0100 Subject: [PATCH 64/84] fix: path to witnesses --- crates/integration/src/testers/chunk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/integration/src/testers/chunk.rs b/crates/integration/src/testers/chunk.rs index 076ea64b..94e74247 100644 --- a/crates/integration/src/testers/chunk.rs +++ b/crates/integration/src/testers/chunk.rs @@ -139,7 +139,7 @@ impl ChunkTaskGenerator { .collect::>>()?; let witness = if self.version.is_validium() { - let base_dir = Path::new(PATH_TESTDATA).join("validium"); + let base_dir = Path::new(PATH_TESTDATA).join("validium").join("witnesses"); let secret_key = hex::decode(std::env::var("VALIDIUM_KEY")?)?; let secret_key = SecretKey::try_from_bytes(&secret_key)?; let validium_txs = self From 4fd83bf989ec884ba5cdecb8bcee7041d5e927f3 Mon Sep 17 00:00:00 2001 From: Rohit Narurkar Date: Thu, 11 Sep 2025 18:28:08 +0100 Subject: [PATCH 65/84] feat: update public for validium --- crates/integration/tests/bundle_circuit.rs | 1 + crates/types/base/src/public_inputs/batch.rs | 25 ++++++++++++++++--- crates/types/base/src/public_inputs/bundle.rs | 9 +++++-- crates/types/base/src/public_inputs/chunk.rs | 11 ++++++-- crates/types/batch/src/builder/v6.rs | 1 + crates/types/batch/src/builder/v7.rs | 1 + crates/types/batch/src/builder/validium.rs | 1 + crates/types/bundle/src/witness.rs | 1 + crates/types/chunk/src/execute.rs | 7 ++++++ 9 files changed, 50 insertions(+), 7 deletions(-) diff --git a/crates/integration/tests/bundle_circuit.rs b/crates/integration/tests/bundle_circuit.rs index 7fc43385..be2c0c7b 100644 --- a/crates/integration/tests/bundle_circuit.rs +++ b/crates/integration/tests/bundle_circuit.rs @@ -110,6 +110,7 @@ fn verify_bundle_info_pi() { "0x97f9728ad48ff896b4272abcecd9a6a46577c24fbf2504f5ed2c3178c857263a", ) .unwrap(), + encryption_key: None, }; assert_eq!( diff --git a/crates/types/base/src/public_inputs/batch.rs b/crates/types/base/src/public_inputs/batch.rs index 85f944b0..45a9ff7a 100644 --- a/crates/types/base/src/public_inputs/batch.rs +++ b/crates/types/base/src/public_inputs/batch.rs @@ -42,6 +42,9 @@ pub struct BatchInfo { /// The L1 msg queue hash at the end of the current batch. #[rkyv()] pub post_msg_queue_hash: B256, + /// Optional encryption key, used in case of domain=Validium. + #[rkyv()] + pub encryption_key: Option>, } impl BatchInfo { @@ -105,10 +108,21 @@ impl BatchInfo { } /// Public input hash for a L3 validium @ v1. - /// - /// Unchanged from Scroll feynman. fn pi_hash_validium_v1(&self) -> B256 { - self.pi_hash_feynman() + keccak256( + std::iter::empty() + .chain(self.parent_state_root.as_slice()) + .chain(self.parent_batch_hash.as_slice()) + .chain(self.state_root.as_slice()) + .chain(self.batch_hash.as_slice()) + .chain(self.chain_id.to_be_bytes().as_slice()) + .chain(self.withdraw_root.as_slice()) + .chain(self.prev_msg_queue_hash.as_slice()) + .chain(self.post_msg_queue_hash.as_slice()) + .chain(self.encryption_key.as_ref().expect("domain=Validium")) + .cloned() + .collect::>(), + ) } } @@ -153,5 +167,10 @@ impl MultiVersionPublicInputs for BatchInfo { assert_eq!(self.post_msg_queue_hash, B256::ZERO); assert_eq!(prev_pi.post_msg_queue_hash, B256::ZERO); } + + if version.domain == Domain::Validium { + assert!(self.encryption_key.is_some()); + assert_eq!(self.encryption_key, prev_pi.encryption_key); + } } } diff --git a/crates/types/base/src/public_inputs/bundle.rs b/crates/types/base/src/public_inputs/bundle.rs index 18d4ffae..ae0e5594 100644 --- a/crates/types/base/src/public_inputs/bundle.rs +++ b/crates/types/base/src/public_inputs/bundle.rs @@ -33,6 +33,8 @@ pub struct BundleInfo { pub batch_hash: B256, /// The withdrawals root at the last block in the last chunk in the last batch in the bundle. pub withdraw_root: B256, + /// Optional encryption key, used in the case of domain=Validium. + pub encryption_key: Option>, } impl BundleInfo { @@ -115,8 +117,11 @@ impl BundleInfo { } pub fn pi_validium_v1(&self) -> Vec { - // TODO: PI for Validium is TBD. - self.pi_euclidv2() + std::iter::empty() + .chain(self.pi_euclidv2().as_slice()) + .chain(self.encryption_key.as_ref().expect("domain=Validium")) + .cloned() + .collect() } pub fn pi_hash(&self, fork_name: ForkName) -> B256 { diff --git a/crates/types/base/src/public_inputs/chunk.rs b/crates/types/base/src/public_inputs/chunk.rs index 90aa8db8..a8e0c55d 100644 --- a/crates/types/base/src/public_inputs/chunk.rs +++ b/crates/types/base/src/public_inputs/chunk.rs @@ -111,6 +111,8 @@ pub struct ChunkInfo { pub prev_blockhash: B256, /// The blockhash of the last block in the current chunk. pub post_blockhash: B256, + /// Optional encryption key for encrypted L1 msgs, which is used in case of domain=Validium. + pub encryption_key: Option>, } /// Represents header-like information for the chunk. @@ -281,7 +283,8 @@ impl ChunkInfo { /// initial block number || /// block_ctx for block_ctx in block_ctxs || /// prev blockhash || - /// post blockhash + /// post blockhash || + /// encryption key /// ) pub fn pi_hash_validium_v1(&self) -> B256 { keccak256( @@ -303,6 +306,7 @@ impl ChunkInfo { ) .chain(self.prev_blockhash.as_slice()) .chain(self.post_blockhash.as_slice()) + .chain(self.encryption_key.as_ref().expect("domain=Validium")) .cloned() .collect::>(), ) @@ -366,9 +370,12 @@ impl MultiVersionPublicInputs for ChunkInfo { assert_eq!(self.post_blockhash, B256::ZERO); } - // blockhash chaining must be validated for validiums. + // - blockhash chaining must be validated for validiums. + // - encryption key must be the same between contiguous chunks in a batch. if version.domain == Domain::Validium { assert_eq!(self.prev_blockhash, prev_pi.post_blockhash); + assert!(self.encryption_key.is_some()); + assert_eq!(self.encryption_key, prev_pi.encryption_key); } } } diff --git a/crates/types/batch/src/builder/v6.rs b/crates/types/batch/src/builder/v6.rs index 7824637e..826aca4e 100644 --- a/crates/types/batch/src/builder/v6.rs +++ b/crates/types/batch/src/builder/v6.rs @@ -52,6 +52,7 @@ impl super::BatchInfoBuilder for BatchInfoBuilderV6 { withdraw_root: last.withdraw_root, prev_msg_queue_hash: Default::default(), post_msg_queue_hash: Default::default(), + encryption_key: Default::default(), } } } diff --git a/crates/types/batch/src/builder/v7.rs b/crates/types/batch/src/builder/v7.rs index d57aec02..2b8d58ff 100644 --- a/crates/types/batch/src/builder/v7.rs +++ b/crates/types/batch/src/builder/v7.rs @@ -109,6 +109,7 @@ impl super::BatchInfoBuilder for GenericBatchInfoBuilderV7

{ withdraw_root: last_chunk.withdraw_root, prev_msg_queue_hash: first_chunk.prev_msg_queue_hash, post_msg_queue_hash: last_chunk.post_msg_queue_hash, + encryption_key: None, } } } diff --git a/crates/types/batch/src/builder/validium.rs b/crates/types/batch/src/builder/validium.rs index 7e4f4318..468261f9 100644 --- a/crates/types/batch/src/builder/validium.rs +++ b/crates/types/batch/src/builder/validium.rs @@ -47,6 +47,7 @@ impl ValidiumBatchInfoBuilder { withdraw_root: last_chunk.withdraw_root, prev_msg_queue_hash: first_chunk.prev_msg_queue_hash, post_msg_queue_hash: last_chunk.post_msg_queue_hash, + encryption_key: first_chunk.encryption_key.clone(), } } } diff --git a/crates/types/bundle/src/witness.rs b/crates/types/bundle/src/witness.rs index 76c53a68..f601cee7 100644 --- a/crates/types/bundle/src/witness.rs +++ b/crates/types/bundle/src/witness.rs @@ -92,6 +92,7 @@ impl From<&BundleWitness> for BundleInfo { batch_hash, withdraw_root, msg_queue_hash, + encryption_key: first_batch.encryption_key.clone(), } } } diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index 6eb62a68..63f20748 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -1,4 +1,5 @@ use crate::{ChunkWitness, types::ChunkExt}; +use ecies::SecretKey; use sbv_core::verifier::{self, VerifyResult}; use sbv_helpers::manually_drop_on_zkvm; use sbv_primitives::{ @@ -71,6 +72,12 @@ pub fn execute(witness: ChunkWitness) -> Result { block_ctxs: blocks.iter().map(block_to_context).collect(), prev_blockhash: B256::default(), post_blockhash: B256::default(), + encryption_key: witness.validium.map(|input| { + SecretKey::try_from_bytes(input.secret_key) + .expect("validium key") + .public_key() + .to_bytes(true) + }), }; println!("chunk_info = {}", chunk_info); From 5c361ad2eec9a2f115671d6a4dab1628aae63259 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Tue, 16 Sep 2025 10:52:45 +0800 Subject: [PATCH 66/84] make ValidiumInputs public --- crates/types/chunk/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/types/chunk/src/lib.rs b/crates/types/chunk/src/lib.rs index 98f0ee8f..d7f6fe4c 100644 --- a/crates/types/chunk/src/lib.rs +++ b/crates/types/chunk/src/lib.rs @@ -2,7 +2,7 @@ mod types; mod witness; pub use types::validium::SecretKey; -pub use witness::{ChunkWitness, LegacyChunkWitness}; +pub use witness::{ChunkWitness, LegacyChunkWitness, ValidiumInputs}; mod execute; pub use execute::execute; From a41479d1c41881493efbf5311cf76cb63684fbba Mon Sep 17 00:00:00 2001 From: Rohit Narurkar Date: Tue, 16 Sep 2025 09:00:16 +0100 Subject: [PATCH 67/84] chore: export version module --- crates/types/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/types/src/lib.rs b/crates/types/src/lib.rs index 9bb1023c..51e48648 100644 --- a/crates/types/src/lib.rs +++ b/crates/types/src/lib.rs @@ -17,7 +17,7 @@ pub mod chunk { pub use types_chunk::*; } -pub use types_base::{aggregation as types_agg, public_inputs}; +pub use types_base::{aggregation as types_agg, public_inputs, version}; pub mod proof; From aa935df1ea2787dc7999471f2f1ad033074e62a6 Mon Sep 17 00:00:00 2001 From: Rohit Narurkar Date: Tue, 16 Sep 2025 09:45:02 +0100 Subject: [PATCH 68/84] chore: serde for version types --- crates/types/base/src/version.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/types/base/src/version.rs b/crates/types/base/src/version.rs index 19f81a94..16f47aee 100644 --- a/crates/types/base/src/version.rs +++ b/crates/types/base/src/version.rs @@ -25,7 +25,7 @@ use crate::public_inputs::ForkName; /// /// Domain is represented using 2 bits, i.e. we can support at the most 4 domains as per the latest /// codec. -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, serde::Deserialize, serde::Serialize)] pub enum Domain { /// Domain used for Scroll. Scroll = 0, @@ -44,7 +44,7 @@ impl From for Domain { } /// The state-transition-function's incremental version. -#[derive(Clone, Copy, Debug)] +#[derive(Clone, Copy, Debug, serde::Deserialize, serde::Serialize)] pub enum STFVersion { /// Validium@v1. V1 = 1, @@ -69,7 +69,7 @@ impl From for STFVersion { } /// The codec version. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, serde::Deserialize, serde::Serialize)] pub enum Codec { /// da-codec@v6. V6, @@ -88,7 +88,7 @@ const N_BITS_STF_VERSION: u8 = 6; const MASK_STF_VERSION: u8 = 0b00111111; /// A fully parsed version that includes all necessary identifiers. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug, serde::Deserialize, serde::Serialize)] pub struct Version { /// Domain. pub domain: Domain, From 3d9e5396dfe685b84e3d70074eb352ad13e8f865 Mon Sep 17 00:00:00 2001 From: Zhuo Zhang Date: Wed, 17 Sep 2025 06:11:28 +0000 Subject: [PATCH 69/84] chore: commitments --- crates/circuits/batch-circuit/batch_exe_commit.rs | 2 +- crates/circuits/bundle-circuit/bundle_exe_commit.rs | 2 +- crates/circuits/chunk-circuit/chunk_exe_commit.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/circuits/batch-circuit/batch_exe_commit.rs b/crates/circuits/batch-circuit/batch_exe_commit.rs index 140ad9af..a4f03d2b 100644 --- a/crates/circuits/batch-circuit/batch_exe_commit.rs +++ b/crates/circuits/batch-circuit/batch_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [472346136, 271742254, 135123519, 1790499705, 1874605551, 1474548354, 196433460, 1496008469]; +pub const COMMIT: [u32; 8] = [1950246364, 1636590102, 198747183, 721429575, 920539053, 838315603, 215973995, 453669913]; diff --git a/crates/circuits/bundle-circuit/bundle_exe_commit.rs b/crates/circuits/bundle-circuit/bundle_exe_commit.rs index ac0d2135..5440031d 100644 --- a/crates/circuits/bundle-circuit/bundle_exe_commit.rs +++ b/crates/circuits/bundle-circuit/bundle_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1554275956, 205982622, 1328216782, 169679608, 408300136, 1567790612, 1500387395, 1112660052]; +pub const COMMIT: [u32; 8] = [1948048916, 1022190518, 1051765913, 997565840, 1008935769, 1678268764, 1464235949, 1741788930]; diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index 1fb78393..b481bcd0 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1509184083, 1659572139, 1973911372, 221209124, 202025000, 1698501572, 1634706653, 706771663]; +pub const COMMIT: [u32; 8] = [404732286, 1668992133, 680101068, 1459241968, 1634825407, 869878951, 1443138776, 876807865]; From edfe2abc9617a34ece3bc192188848d7cfb11c95 Mon Sep 17 00:00:00 2001 From: Zhuo Zhang Date: Wed, 17 Sep 2025 06:28:19 +0000 Subject: [PATCH 70/84] release: update release name to validium --- release-fork | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-fork b/release-fork index e2044e89..74db1782 100644 --- a/release-fork +++ b/release-fork @@ -1 +1 @@ -feynman \ No newline at end of file +validium From f42e27b5a92b6c2e60363fe7b28bd3a052475d1b Mon Sep 17 00:00:00 2001 From: Zhuo Zhang Date: Wed, 17 Sep 2025 06:39:36 +0000 Subject: [PATCH 71/84] fix: script syntax ? --- release.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/release.sh b/release.sh index ca68d63c..e6cdae06 100644 --- a/release.sh +++ b/release.sh @@ -15,7 +15,7 @@ find $DEV_DIR -type f ! -name sha256sums.txt -exec sha256sum {} \; >$DEV_DIR/sha # Read FORKNAME from release-fork file FORKNAME=$(head -n 1 release-fork) -function release_new() { +release_new() { VK_JSON="$DEV_DIR/verifier/openVmVk.json" RELEASES_DIR="releases/$FORKNAME" @@ -52,8 +52,8 @@ function release_new() { #aws --profile default s3 cp releases s3://circuit-release/scroll-zkvm --recursive } -function release_old() { +release_old() { aws --profile default s3 cp $DEV_DIR s3://circuit-release/scroll-zkvm/$VERIFIER_RELEASES_DIR --recursive } -release_new \ No newline at end of file +release_new From a8dd7e74b3cd02249843fcae9f03d335174f63c1 Mon Sep 17 00:00:00 2001 From: Zhuo Zhang Date: Wed, 17 Sep 2025 07:03:50 +0000 Subject: [PATCH 72/84] chore: restore changes --- release-fork | 2 +- release.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/release-fork b/release-fork index 74db1782..a8690d6a 100644 --- a/release-fork +++ b/release-fork @@ -1 +1 @@ -validium +feynman diff --git a/release.sh b/release.sh index e6cdae06..6785457a 100644 --- a/release.sh +++ b/release.sh @@ -15,7 +15,7 @@ find $DEV_DIR -type f ! -name sha256sums.txt -exec sha256sum {} \; >$DEV_DIR/sha # Read FORKNAME from release-fork file FORKNAME=$(head -n 1 release-fork) -release_new() { +function release_new() { VK_JSON="$DEV_DIR/verifier/openVmVk.json" RELEASES_DIR="releases/$FORKNAME" @@ -52,7 +52,7 @@ release_new() { #aws --profile default s3 cp releases s3://circuit-release/scroll-zkvm --recursive } -release_old() { +function release_old() { aws --profile default s3 cp $DEV_DIR s3://circuit-release/scroll-zkvm/$VERIFIER_RELEASES_DIR --recursive } From 8a1df4ff67c6e9cd1f038a10c7ec561e8824779e Mon Sep 17 00:00:00 2001 From: Ho Date: Wed, 17 Sep 2025 17:09:36 +0900 Subject: [PATCH 73/84] fix building scripts --- .github/workflows/build-guest-release.yml | 2 +- Makefile | 16 ++++++++++++++-- build-guest.sh | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-guest-release.yml b/.github/workflows/build-guest-release.yml index 45a2969d..6cd6d858 100644 --- a/.github/workflows/build-guest-release.yml +++ b/.github/workflows/build-guest-release.yml @@ -3,7 +3,7 @@ name: Build ZKVM-Prover Guest on: push: tags: - - 'v0.[0-9]+.[0-9]+' + - 'v0.[0-9]+.[0-9]+(-.*)?' jobs: build-guest: diff --git a/Makefile b/Makefile index 8fc56ac0..f645f429 100644 --- a/Makefile +++ b/Makefile @@ -17,6 +17,18 @@ else CARGO_CONFIG_FLAG = endif +SRS_PARAMS_DIR := $(HOME)/.openvm/params +SRS_PARAMS_URL := https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/params +SRS_PARAMS := $(PARAMS_DIR)/kzg_bn254_22.srs $(PARAMS_DIR)/kzg_bn254_24.srs + +# Download params if missing +$(SRS_PARAMS_DIR)/%.srs: + @mkdir -p $(PARAMS_DIR) + @if [ ! -f "$@" ]; then \ + echo "Fetching $(@F) from $(PARAMS_URL)"; \ + wget -q -O "$@" "$(PARAMS_URL)/$(@F)"; \ + fi + download-release: sh download-release.sh @@ -34,10 +46,10 @@ clippy: clean-guest: docker rmi build-guest:local -build-guest: +build-guest: $(SRS_PARAMS) sh build-guest.sh -build-guest-local: +build-guest-local: $(SRS_PARAMS) cargo run --release -p scroll-zkvm-build-guest clean-build-guest: clean-guest build-guest diff --git a/build-guest.sh b/build-guest.sh index 3db85051..a1fd27cf 100755 --- a/build-guest.sh +++ b/build-guest.sh @@ -21,7 +21,7 @@ cleanup() { trap cleanup EXIT # run docker image -docker run --cidfile ./build-guest.cid --platform linux/amd64 build-guest:local make build-guest-local +docker run --cidfile ./build-guest.cid --platform linux/amd64 -v "$HOME/.openvm/params:/root/.openvm/params" build-guest:local make build-guest-local container_id=$(cat ./build-guest.cid) # copy vm commitments from container to local From 7e0b3259004bdd4679782b4c80f93484e3a6145c Mon Sep 17 00:00:00 2001 From: Ho Date: Wed, 17 Sep 2025 17:53:17 +0900 Subject: [PATCH 74/84] swtich back to non-force mode in gen verifier.bin --- Makefile | 16 ++++++++-------- build-guest.sh | 2 +- crates/build-guest/src/main.rs | 2 +- crates/build-guest/src/verifier.rs | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index f645f429..a670e97f 100644 --- a/Makefile +++ b/Makefile @@ -19,15 +19,15 @@ endif SRS_PARAMS_DIR := $(HOME)/.openvm/params SRS_PARAMS_URL := https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/params -SRS_PARAMS := $(PARAMS_DIR)/kzg_bn254_22.srs $(PARAMS_DIR)/kzg_bn254_24.srs +SRS_PARAMS := $(SRS_PARAMS_DIR)/kzg_bn254_22.srs $(SRS_PARAMS_DIR)/kzg_bn254_24.srs # Download params if missing $(SRS_PARAMS_DIR)/%.srs: - @mkdir -p $(PARAMS_DIR) - @if [ ! -f "$@" ]; then \ - echo "Fetching $(@F) from $(PARAMS_URL)"; \ - wget -q -O "$@" "$(PARAMS_URL)/$(@F)"; \ - fi + @mkdir -p $(SRS_PARAMS_DIR) + @if [ ! -f "$@" ]; then \ + echo "Fetching $(@F) from $(SRS_PARAMS_URL)"; \ + wget -q -O "$@" "$(SRS_PARAMS_URL)/$(@F)"; \ + fi download-release: sh download-release.sh @@ -46,10 +46,10 @@ clippy: clean-guest: docker rmi build-guest:local -build-guest: $(SRS_PARAMS) +build-guest: sh build-guest.sh -build-guest-local: $(SRS_PARAMS) +build-guest-local: cargo run --release -p scroll-zkvm-build-guest clean-build-guest: clean-guest build-guest diff --git a/build-guest.sh b/build-guest.sh index a1fd27cf..3db85051 100755 --- a/build-guest.sh +++ b/build-guest.sh @@ -21,7 +21,7 @@ cleanup() { trap cleanup EXIT # run docker image -docker run --cidfile ./build-guest.cid --platform linux/amd64 -v "$HOME/.openvm/params:/root/.openvm/params" build-guest:local make build-guest-local +docker run --cidfile ./build-guest.cid --platform linux/amd64 build-guest:local make build-guest-local container_id=$(cat ./build-guest.cid) # copy vm commitments from container to local diff --git a/crates/build-guest/src/main.rs b/crates/build-guest/src/main.rs index de08d7f5..a0fecd9f 100644 --- a/crates/build-guest/src/main.rs +++ b/crates/build-guest/src/main.rs @@ -347,7 +347,7 @@ fn generate_openvm_assets( env::set_current_dir(workspace_dir)?; generate_root_verifier(workspace_dir, force_overwrite)?; - generate_evm_verifier(&release_output_dir.join("verifier"), true, force_overwrite)?; + generate_evm_verifier(&release_output_dir.join("verifier"), false, force_overwrite)?; Ok(()) } diff --git a/crates/build-guest/src/verifier.rs b/crates/build-guest/src/verifier.rs index ae79dc62..4965ac6c 100644 --- a/crates/build-guest/src/verifier.rs +++ b/crates/build-guest/src/verifier.rs @@ -48,7 +48,7 @@ pub fn generate_evm_verifier() -> Result { } pub fn download_evm_verifier() -> Result { - let verifier_url = "https://github.com/openvm-org/openvm-solidity-sdk/raw/refs/heads/main/src/v1.3/Halo2Verifier.sol"; + let verifier_url = "https://github.com/openvm-org/openvm-solidity-sdk/raw/refs/heads/main/src/v1.4/Halo2Verifier.sol"; println!("{LOG_PREFIX} Downloading pre-built verifier from openvm-solidity-sdk..."); let output = std::process::Command::new("wget") From c33fad134f9d662ccf1ed1bac33d258b0ea1cf2b Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Wed, 17 Sep 2025 17:03:02 +0800 Subject: [PATCH 75/84] it is 1.3.. a bit tricky.. will explain later. --- crates/build-guest/src/verifier.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/build-guest/src/verifier.rs b/crates/build-guest/src/verifier.rs index 4965ac6c..ae79dc62 100644 --- a/crates/build-guest/src/verifier.rs +++ b/crates/build-guest/src/verifier.rs @@ -48,7 +48,7 @@ pub fn generate_evm_verifier() -> Result { } pub fn download_evm_verifier() -> Result { - let verifier_url = "https://github.com/openvm-org/openvm-solidity-sdk/raw/refs/heads/main/src/v1.4/Halo2Verifier.sol"; + let verifier_url = "https://github.com/openvm-org/openvm-solidity-sdk/raw/refs/heads/main/src/v1.3/Halo2Verifier.sol"; println!("{LOG_PREFIX} Downloading pre-built verifier from openvm-solidity-sdk..."); let output = std::process::Command::new("wget") From 66d1f4e9f359e1588251823a0ee41e137e638493 Mon Sep 17 00:00:00 2001 From: Ho Date: Fri, 19 Sep 2025 13:57:04 +0900 Subject: [PATCH 76/84] update guest commits --- .gitignore | 2 + releases/dev/verifier/verifier.bin | Bin 18530 -> 18530 bytes releases/dev/verifier/verifier.sol | 3261 ++++++++++++---------------- 3 files changed, 1411 insertions(+), 1852 deletions(-) diff --git a/.gitignore b/.gitignore index cc34503f..081a3b39 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ /.output +!/releases/dev/verifier/verifier.bin +!/releases/dev/verifier/verifier.sol /releases *.log diff --git a/releases/dev/verifier/verifier.bin b/releases/dev/verifier/verifier.bin index a5a2680ccd05250b09d4683a7fc51fa3d670b784..b96bbfbcfa5cdaf0cd812d5dc0fcf51fae1940b2 100644 GIT binary patch delta 53 zcmV-50LuU3kOAV50kAhnE1-5~=POr;LHAgN#e`bgmcY|2AUdmb>C70!@VEQFu4Hp> LY-2+J2onG^%}5zl delta 53 zcmaDff$`A<#tr5k+VwML)@)U>s=ORh7bfzjC-Q6(-zJ_27E9ldOdWsKX}?p7^K+7& J890O)i~(l46j%TN diff --git a/releases/dev/verifier/verifier.sol b/releases/dev/verifier/verifier.sol index 1e874311..c439b190 100644 --- a/releases/dev/verifier/verifier.sol +++ b/releases/dev/verifier/verifier.sol @@ -1,3 +1,4 @@ + // SPDX-License-Identifier: MIT pragma solidity 0.8.19; @@ -7,7 +8,9 @@ contract Halo2Verifier { assembly ("memory-safe") { // Enforce that Solidity memory layout is respected let data := mload(0x40) - if iszero(eq(data, 0x80)) { revert(0, 0) } + if iszero(eq(data, 0x80)) { + revert(0, 0) + } let success := true let f_p := 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47 @@ -21,2025 +24,1579 @@ contract Halo2Verifier { { let y_square := mulmod(y, y, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let x_square := mulmod(x, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) - let x_cube := - mulmod(x_square, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) - let x_cube_plus_3 := - addmod(x_cube, 3, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) + let x_cube := mulmod(x_square, x, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) + let x_cube_plus_3 := addmod(x_cube, 3, 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47) let is_affine := eq(x_cube_plus_3, y_square) valid := and(valid, is_affine) } } mstore(0xa0, mod(calldataload(0x0), f_q)) - mstore(0xc0, mod(calldataload(0x20), f_q)) - mstore(0xe0, mod(calldataload(0x40), f_q)) - mstore(0x100, mod(calldataload(0x60), f_q)) - mstore(0x120, mod(calldataload(0x80), f_q)) - mstore(0x140, mod(calldataload(0xa0), f_q)) - mstore(0x160, mod(calldataload(0xc0), f_q)) - mstore(0x180, mod(calldataload(0xe0), f_q)) - mstore(0x1a0, mod(calldataload(0x100), f_q)) - mstore(0x1c0, mod(calldataload(0x120), f_q)) - mstore(0x1e0, mod(calldataload(0x140), f_q)) - mstore(0x200, mod(calldataload(0x160), f_q)) - mstore(0x220, mod(calldataload(0x180), f_q)) - mstore(0x240, mod(calldataload(0x1a0), f_q)) - mstore(0x260, mod(calldataload(0x1c0), f_q)) - mstore(0x280, mod(calldataload(0x1e0), f_q)) - mstore(0x2a0, mod(calldataload(0x200), f_q)) - mstore(0x2c0, mod(calldataload(0x220), f_q)) - mstore(0x2e0, mod(calldataload(0x240), f_q)) - mstore(0x300, mod(calldataload(0x260), f_q)) - mstore(0x320, mod(calldataload(0x280), f_q)) - mstore(0x340, mod(calldataload(0x2a0), f_q)) - mstore(0x360, mod(calldataload(0x2c0), f_q)) - mstore(0x380, mod(calldataload(0x2e0), f_q)) - mstore(0x3a0, mod(calldataload(0x300), f_q)) - mstore(0x3c0, mod(calldataload(0x320), f_q)) - mstore(0x3e0, mod(calldataload(0x340), f_q)) - mstore(0x400, mod(calldataload(0x360), f_q)) - mstore(0x420, mod(calldataload(0x380), f_q)) - mstore(0x440, mod(calldataload(0x3a0), f_q)) - mstore(0x460, mod(calldataload(0x3c0), f_q)) - mstore(0x480, mod(calldataload(0x3e0), f_q)) - mstore(0x4a0, mod(calldataload(0x400), f_q)) - mstore(0x4c0, mod(calldataload(0x420), f_q)) - mstore(0x4e0, mod(calldataload(0x440), f_q)) - mstore(0x500, mod(calldataload(0x460), f_q)) - mstore(0x520, mod(calldataload(0x480), f_q)) - mstore(0x540, mod(calldataload(0x4a0), f_q)) - mstore(0x560, mod(calldataload(0x4c0), f_q)) - mstore(0x580, mod(calldataload(0x4e0), f_q)) - mstore(0x5a0, mod(calldataload(0x500), f_q)) - mstore(0x5c0, mod(calldataload(0x520), f_q)) - mstore(0x5e0, mod(calldataload(0x540), f_q)) - mstore(0x600, mod(calldataload(0x560), f_q)) - mstore(0x620, mod(calldataload(0x580), f_q)) - mstore(0x640, mod(calldataload(0x5a0), f_q)) - mstore(0x80, 9514323097321245931419041477139106601771148851610395955023397192525359125626) - - { - let x := calldataload(0x5c0) - mstore(0x660, x) - let y := calldataload(0x5e0) - mstore(0x680, y) - success := and(validate_ec_point(x, y), success) - } - mstore(0x6a0, keccak256(0x80, 1568)) - { - let hash := mload(0x6a0) - mstore(0x6c0, mod(hash, f_q)) - mstore(0x6e0, hash) - } - - { - let x := calldataload(0x600) - mstore(0x700, x) - let y := calldataload(0x620) - mstore(0x720, y) - success := and(validate_ec_point(x, y), success) - } - - { - let x := calldataload(0x640) - mstore(0x740, x) - let y := calldataload(0x660) - mstore(0x760, y) - success := and(validate_ec_point(x, y), success) - } - mstore(0x780, keccak256(0x6e0, 160)) - { - let hash := mload(0x780) - mstore(0x7a0, mod(hash, f_q)) - mstore(0x7c0, hash) - } - mstore8(2016, 1) - mstore(0x7e0, keccak256(0x7c0, 33)) - { - let hash := mload(0x7e0) - mstore(0x800, mod(hash, f_q)) - mstore(0x820, hash) - } +mstore(0xc0, mod(calldataload(0x20), f_q)) +mstore(0xe0, mod(calldataload(0x40), f_q)) +mstore(0x100, mod(calldataload(0x60), f_q)) +mstore(0x120, mod(calldataload(0x80), f_q)) +mstore(0x140, mod(calldataload(0xa0), f_q)) +mstore(0x160, mod(calldataload(0xc0), f_q)) +mstore(0x180, mod(calldataload(0xe0), f_q)) +mstore(0x1a0, mod(calldataload(0x100), f_q)) +mstore(0x1c0, mod(calldataload(0x120), f_q)) +mstore(0x1e0, mod(calldataload(0x140), f_q)) +mstore(0x200, mod(calldataload(0x160), f_q)) +mstore(0x220, mod(calldataload(0x180), f_q)) +mstore(0x240, mod(calldataload(0x1a0), f_q)) +mstore(0x260, mod(calldataload(0x1c0), f_q)) +mstore(0x280, mod(calldataload(0x1e0), f_q)) +mstore(0x2a0, mod(calldataload(0x200), f_q)) +mstore(0x2c0, mod(calldataload(0x220), f_q)) +mstore(0x2e0, mod(calldataload(0x240), f_q)) +mstore(0x300, mod(calldataload(0x260), f_q)) +mstore(0x320, mod(calldataload(0x280), f_q)) +mstore(0x340, mod(calldataload(0x2a0), f_q)) +mstore(0x360, mod(calldataload(0x2c0), f_q)) +mstore(0x380, mod(calldataload(0x2e0), f_q)) +mstore(0x3a0, mod(calldataload(0x300), f_q)) +mstore(0x3c0, mod(calldataload(0x320), f_q)) +mstore(0x3e0, mod(calldataload(0x340), f_q)) +mstore(0x400, mod(calldataload(0x360), f_q)) +mstore(0x420, mod(calldataload(0x380), f_q)) +mstore(0x440, mod(calldataload(0x3a0), f_q)) +mstore(0x460, mod(calldataload(0x3c0), f_q)) +mstore(0x480, mod(calldataload(0x3e0), f_q)) +mstore(0x4a0, mod(calldataload(0x400), f_q)) +mstore(0x4c0, mod(calldataload(0x420), f_q)) +mstore(0x4e0, mod(calldataload(0x440), f_q)) +mstore(0x500, mod(calldataload(0x460), f_q)) +mstore(0x520, mod(calldataload(0x480), f_q)) +mstore(0x540, mod(calldataload(0x4a0), f_q)) +mstore(0x560, mod(calldataload(0x4c0), f_q)) +mstore(0x580, mod(calldataload(0x4e0), f_q)) +mstore(0x5a0, mod(calldataload(0x500), f_q)) +mstore(0x5c0, mod(calldataload(0x520), f_q)) +mstore(0x5e0, mod(calldataload(0x540), f_q)) +mstore(0x600, mod(calldataload(0x560), f_q)) +mstore(0x620, mod(calldataload(0x580), f_q)) +mstore(0x640, mod(calldataload(0x5a0), f_q)) +mstore(0x80, 9514323097321245931419041477139106601771148851610395955023397192525359125626) + + { + let x := calldataload(0x5c0) + mstore(0x660, x) + let y := calldataload(0x5e0) + mstore(0x680, y) + success := and(validate_ec_point(x, y), success) + } +mstore(0x6a0, keccak256(0x80, 1568)) +{ + let hash := mload(0x6a0) + mstore(0x6c0, mod(hash, f_q)) + mstore(0x6e0, hash) + } - { - let x := calldataload(0x680) - mstore(0x840, x) - let y := calldataload(0x6a0) - mstore(0x860, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x600) + mstore(0x700, x) + let y := calldataload(0x620) + mstore(0x720, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x6c0) - mstore(0x880, x) - let y := calldataload(0x6e0) - mstore(0x8a0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x640) + mstore(0x740, x) + let y := calldataload(0x660) + mstore(0x760, y) + success := and(validate_ec_point(x, y), success) + } +mstore(0x780, keccak256(0x6e0, 160)) +{ + let hash := mload(0x780) + mstore(0x7a0, mod(hash, f_q)) + mstore(0x7c0, hash) + } +mstore8(2016, 1) +mstore(0x7e0, keccak256(0x7c0, 33)) +{ + let hash := mload(0x7e0) + mstore(0x800, mod(hash, f_q)) + mstore(0x820, hash) + } - { - let x := calldataload(0x700) - mstore(0x8c0, x) - let y := calldataload(0x720) - mstore(0x8e0, y) - success := and(validate_ec_point(x, y), success) - } - mstore(0x900, keccak256(0x820, 224)) - { - let hash := mload(0x900) - mstore(0x920, mod(hash, f_q)) - mstore(0x940, hash) - } + { + let x := calldataload(0x680) + mstore(0x840, x) + let y := calldataload(0x6a0) + mstore(0x860, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x740) - mstore(0x960, x) - let y := calldataload(0x760) - mstore(0x980, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x6c0) + mstore(0x880, x) + let y := calldataload(0x6e0) + mstore(0x8a0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x780) - mstore(0x9a0, x) - let y := calldataload(0x7a0) - mstore(0x9c0, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x700) + mstore(0x8c0, x) + let y := calldataload(0x720) + mstore(0x8e0, y) + success := and(validate_ec_point(x, y), success) + } +mstore(0x900, keccak256(0x820, 224)) +{ + let hash := mload(0x900) + mstore(0x920, mod(hash, f_q)) + mstore(0x940, hash) + } - { - let x := calldataload(0x7c0) - mstore(0x9e0, x) - let y := calldataload(0x7e0) - mstore(0xa00, y) - success := and(validate_ec_point(x, y), success) - } + { + let x := calldataload(0x740) + mstore(0x960, x) + let y := calldataload(0x760) + mstore(0x980, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0x800) - mstore(0xa20, x) - let y := calldataload(0x820) - mstore(0xa40, y) - success := and(validate_ec_point(x, y), success) - } - mstore(0xa60, keccak256(0x940, 288)) - { - let hash := mload(0xa60) - mstore(0xa80, mod(hash, f_q)) - mstore(0xaa0, hash) - } - mstore(0xac0, mod(calldataload(0x840), f_q)) - mstore(0xae0, mod(calldataload(0x860), f_q)) - mstore(0xb00, mod(calldataload(0x880), f_q)) - mstore(0xb20, mod(calldataload(0x8a0), f_q)) - mstore(0xb40, mod(calldataload(0x8c0), f_q)) - mstore(0xb60, mod(calldataload(0x8e0), f_q)) - mstore(0xb80, mod(calldataload(0x900), f_q)) - mstore(0xba0, mod(calldataload(0x920), f_q)) - mstore(0xbc0, mod(calldataload(0x940), f_q)) - mstore(0xbe0, mod(calldataload(0x960), f_q)) - mstore(0xc00, mod(calldataload(0x980), f_q)) - mstore(0xc20, mod(calldataload(0x9a0), f_q)) - mstore(0xc40, mod(calldataload(0x9c0), f_q)) - mstore(0xc60, mod(calldataload(0x9e0), f_q)) - mstore(0xc80, mod(calldataload(0xa00), f_q)) - mstore(0xca0, mod(calldataload(0xa20), f_q)) - mstore(0xcc0, mod(calldataload(0xa40), f_q)) - mstore(0xce0, mod(calldataload(0xa60), f_q)) - mstore(0xd00, mod(calldataload(0xa80), f_q)) - mstore(0xd20, keccak256(0xaa0, 640)) - { - let hash := mload(0xd20) - mstore(0xd40, mod(hash, f_q)) - mstore(0xd60, hash) - } - mstore8(3456, 1) - mstore(0xd80, keccak256(0xd60, 33)) - { - let hash := mload(0xd80) - mstore(0xda0, mod(hash, f_q)) - mstore(0xdc0, hash) - } + { + let x := calldataload(0x780) + mstore(0x9a0, x) + let y := calldataload(0x7a0) + mstore(0x9c0, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0xaa0) - mstore(0xde0, x) - let y := calldataload(0xac0) - mstore(0xe00, y) - success := and(validate_ec_point(x, y), success) - } - mstore(0xe20, keccak256(0xdc0, 96)) - { - let hash := mload(0xe20) - mstore(0xe40, mod(hash, f_q)) - mstore(0xe60, hash) - } + { + let x := calldataload(0x7c0) + mstore(0x9e0, x) + let y := calldataload(0x7e0) + mstore(0xa00, y) + success := and(validate_ec_point(x, y), success) + } - { - let x := calldataload(0xae0) - mstore(0xe80, x) - let y := calldataload(0xb00) - mstore(0xea0, y) - success := and(validate_ec_point(x, y), success) - } - { - let x := mload(0xa0) - x := add(x, shl(88, mload(0xc0))) - x := add(x, shl(176, mload(0xe0))) - mstore(3776, x) - let y := mload(0x100) - y := add(y, shl(88, mload(0x120))) - y := add(y, shl(176, mload(0x140))) - mstore(3808, y) + { + let x := calldataload(0x800) + mstore(0xa20, x) + let y := calldataload(0x820) + mstore(0xa40, y) + success := and(validate_ec_point(x, y), success) + } +mstore(0xa60, keccak256(0x940, 288)) +{ + let hash := mload(0xa60) + mstore(0xa80, mod(hash, f_q)) + mstore(0xaa0, hash) + } +mstore(0xac0, mod(calldataload(0x840), f_q)) +mstore(0xae0, mod(calldataload(0x860), f_q)) +mstore(0xb00, mod(calldataload(0x880), f_q)) +mstore(0xb20, mod(calldataload(0x8a0), f_q)) +mstore(0xb40, mod(calldataload(0x8c0), f_q)) +mstore(0xb60, mod(calldataload(0x8e0), f_q)) +mstore(0xb80, mod(calldataload(0x900), f_q)) +mstore(0xba0, mod(calldataload(0x920), f_q)) +mstore(0xbc0, mod(calldataload(0x940), f_q)) +mstore(0xbe0, mod(calldataload(0x960), f_q)) +mstore(0xc00, mod(calldataload(0x980), f_q)) +mstore(0xc20, mod(calldataload(0x9a0), f_q)) +mstore(0xc40, mod(calldataload(0x9c0), f_q)) +mstore(0xc60, mod(calldataload(0x9e0), f_q)) +mstore(0xc80, mod(calldataload(0xa00), f_q)) +mstore(0xca0, mod(calldataload(0xa20), f_q)) +mstore(0xcc0, mod(calldataload(0xa40), f_q)) +mstore(0xce0, mod(calldataload(0xa60), f_q)) +mstore(0xd00, mod(calldataload(0xa80), f_q)) +mstore(0xd20, keccak256(0xaa0, 640)) +{ + let hash := mload(0xd20) + mstore(0xd40, mod(hash, f_q)) + mstore(0xd60, hash) + } +mstore8(3456, 1) +mstore(0xd80, keccak256(0xd60, 33)) +{ + let hash := mload(0xd80) + mstore(0xda0, mod(hash, f_q)) + mstore(0xdc0, hash) + } - success := and(validate_ec_point(x, y), success) - } - { - let x := mload(0x160) - x := add(x, shl(88, mload(0x180))) - x := add(x, shl(176, mload(0x1a0))) - mstore(3840, x) - let y := mload(0x1c0) - y := add(y, shl(88, mload(0x1e0))) - y := add(y, shl(176, mload(0x200))) - mstore(3872, y) + { + let x := calldataload(0xaa0) + mstore(0xde0, x) + let y := calldataload(0xac0) + mstore(0xe00, y) + success := and(validate_ec_point(x, y), success) + } +mstore(0xe20, keccak256(0xdc0, 96)) +{ + let hash := mload(0xe20) + mstore(0xe40, mod(hash, f_q)) + mstore(0xe60, hash) + } - success := and(validate_ec_point(x, y), success) - } - mstore(0xf40, mulmod(mload(0xa80), mload(0xa80), f_q)) - mstore(0xf60, mulmod(mload(0xf40), mload(0xf40), f_q)) - mstore(0xf80, mulmod(mload(0xf60), mload(0xf60), f_q)) - mstore(0xfa0, mulmod(mload(0xf80), mload(0xf80), f_q)) - mstore(0xfc0, mulmod(mload(0xfa0), mload(0xfa0), f_q)) - mstore(0xfe0, mulmod(mload(0xfc0), mload(0xfc0), f_q)) - mstore(0x1000, mulmod(mload(0xfe0), mload(0xfe0), f_q)) - mstore(0x1020, mulmod(mload(0x1000), mload(0x1000), f_q)) - mstore(0x1040, mulmod(mload(0x1020), mload(0x1020), f_q)) - mstore(0x1060, mulmod(mload(0x1040), mload(0x1040), f_q)) - mstore(0x1080, mulmod(mload(0x1060), mload(0x1060), f_q)) - mstore(0x10a0, mulmod(mload(0x1080), mload(0x1080), f_q)) - mstore(0x10c0, mulmod(mload(0x10a0), mload(0x10a0), f_q)) - mstore(0x10e0, mulmod(mload(0x10c0), mload(0x10c0), f_q)) - mstore(0x1100, mulmod(mload(0x10e0), mload(0x10e0), f_q)) - mstore(0x1120, mulmod(mload(0x1100), mload(0x1100), f_q)) - mstore(0x1140, mulmod(mload(0x1120), mload(0x1120), f_q)) - mstore(0x1160, mulmod(mload(0x1140), mload(0x1140), f_q)) - mstore(0x1180, mulmod(mload(0x1160), mload(0x1160), f_q)) - mstore(0x11a0, mulmod(mload(0x1180), mload(0x1180), f_q)) - mstore(0x11c0, mulmod(mload(0x11a0), mload(0x11a0), f_q)) - mstore(0x11e0, mulmod(mload(0x11c0), mload(0x11c0), f_q)) - mstore( - 0x1200, - addmod( - mload(0x11e0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q - ) - ) - mstore( - 0x1220, - mulmod( - mload(0x1200), 21888237653275510688422624196183639687472264873923820041627027729598873448513, f_q - ) - ) - mstore( - 0x1240, - mulmod( - mload(0x1220), 13225785879531581993054172815365636627224369411478295502904397545373139154045, f_q - ) - ) - mstore( - 0x1260, - addmod(mload(0xa80), 8662456992307693229192232929891638461323994988937738840793806641202669341572, f_q) - ) - mstore( - 0x1280, - mulmod( - mload(0x1220), 10939663269433627367777756708678102241564365262857670666700619874077960926249, f_q - ) - ) - mstore( - 0x12a0, - addmod(mload(0xa80), 10948579602405647854468649036579172846983999137558363676997584312497847569368, f_q) - ) - mstore( - 0x12c0, - mulmod( - mload(0x1220), 11016257578652593686382655500910603527869149377564754001549454008164059876499, f_q - ) - ) - mstore( - 0x12e0, - addmod(mload(0xa80), 10871985293186681535863750244346671560679215022851280342148750178411748619118, f_q) - ) - mstore( - 0x1300, - mulmod( - mload(0x1220), 15402826414547299628414612080036060696555554914079673875872749760617770134879, f_q - ) - ) - mstore( - 0x1320, - addmod(mload(0xa80), 6485416457291975593831793665221214391992809486336360467825454425958038360738, f_q) - ) - mstore( - 0x1340, - mulmod( - mload(0x1220), 21710372849001950800533397158415938114909991150039389063546734567764856596059, f_q - ) - ) - mstore( - 0x1360, - addmod(mload(0xa80), 177870022837324421713008586841336973638373250376645280151469618810951899558, f_q) - ) - mstore( - 0x1380, - mulmod(mload(0x1220), 2785514556381676080176937710880804108647911392478702105860685610379369825016, f_q) - ) - mstore( - 0x13a0, - addmod(mload(0xa80), 19102728315457599142069468034376470979900453007937332237837518576196438670601, f_q) - ) - mstore( - 0x13c0, - mulmod(mload(0x1220), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q) - ) - mstore( - 0x13e0, - addmod(mload(0xa80), 13154116519010929542673167886091370382741775939114889923107781597533678454429, f_q) - ) - mstore(0x1400, mulmod(mload(0x1220), 1, f_q)) - mstore( - 0x1420, - addmod(mload(0xa80), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q) - ) - mstore( - 0x1440, - mulmod( - mload(0x1220), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q - ) - ) - mstore( - 0x1460, - addmod(mload(0xa80), 10676941854703594198666993839846402519342119846958189386823924046696287912227, f_q) - ) - mstore( - 0x1480, - mulmod(mload(0x1220), 1426404432721484388505361748317961535523355871255605456897797744433766488507, f_q) - ) - mstore( - 0x14a0, - addmod(mload(0xa80), 20461838439117790833741043996939313553025008529160428886800406442142042007110, f_q) - ) - mstore( - 0x14c0, - mulmod( - mload(0x1220), 12619617507853212586156872920672483948819476989779550311307282715684870266992, f_q - ) - ) - mstore( - 0x14e0, - addmod(mload(0xa80), 9268625363986062636089532824584791139728887410636484032390921470890938228625, f_q) - ) - mstore( - 0x1500, - mulmod( - mload(0x1220), 19032961837237948602743626455740240236231119053033140765040043513661803148152, f_q - ) - ) - mstore( - 0x1520, - addmod(mload(0xa80), 2855281034601326619502779289517034852317245347382893578658160672914005347465, f_q) - ) - mstore( - 0x1540, - mulmod(mload(0x1220), 915149353520972163646494413843788069594022902357002628455555785223409501882, f_q) - ) - mstore( - 0x1560, - addmod(mload(0xa80), 20973093518318303058599911331413487018954341498059031715242648401352398993735, f_q) - ) - mstore( - 0x1580, - mulmod(mload(0x1220), 3766081621734395783232337525162072736827576297943013392955872170138036189193, f_q) - ) - mstore( - 0x15a0, - addmod(mload(0xa80), 18122161250104879439014068220095202351720788102473020950742332016437772306424, f_q) - ) - mstore( - 0x15c0, - mulmod(mload(0x1220), 4245441013247250116003069945606352967193023389718465410501109428393342802981, f_q) - ) - mstore( - 0x15e0, - addmod(mload(0xa80), 17642801858592025106243335799650922121355341010697568933197094758182465692636, f_q) - ) - mstore( - 0x1600, - mulmod(mload(0x1220), 5854133144571823792863860130267644613802765696134002830362054821530146160770, f_q) - ) - mstore( - 0x1620, - addmod(mload(0xa80), 16034109727267451429382545614989630474745598704282031513336149365045662334847, f_q) - ) - mstore( - 0x1640, - mulmod(mload(0x1220), 5980488956150442207659150513163747165544364597008566989111579977672498964212, f_q) - ) - mstore( - 0x1660, - addmod(mload(0xa80), 15907753915688833014587255232093527923003999803407467354586624208903309531405, f_q) - ) - mstore( - 0x1680, - mulmod( - mload(0x1220), 14557038802599140430182096396825290815503940951075961210638273254419942783582, f_q - ) - ) - mstore( - 0x16a0, - addmod(mload(0xa80), 7331204069240134792064309348431984273044423449340073133059930932155865712035, f_q) - ) - mstore( - 0x16c0, - mulmod( - mload(0x1220), 13553911191894110065493137367144919847521088405945523452288398666974237857208, f_q - ) - ) - mstore( - 0x16e0, - addmod(mload(0xa80), 8334331679945165156753268378112355241027275994470510891409805519601570638409, f_q) - ) - mstore( - 0x1700, - mulmod(mload(0x1220), 9697063347556872083384215826199993067635178715531258559890418744774301211662, f_q) - ) - mstore( - 0x1720, - addmod(mload(0xa80), 12191179524282403138862189919057282020913185684884775783807785441801507283955, f_q) - ) - mstore( - 0x1740, - mulmod( - mload(0x1220), 10807735674816066981985242612061336605021639643453679977988966079770672437131, f_q - ) - ) - mstore( - 0x1760, - addmod(mload(0xa80), 11080507197023208240261163133195938483526724756962354365709238106805136058486, f_q) - ) - mstore( - 0x1780, - mulmod( - mload(0x1220), 12459868075641381822485233712013080087763946065665469821362892189399541605692, f_q - ) - ) - mstore( - 0x17a0, - addmod(mload(0xa80), 9428374796197893399761172033244195000784418334750564522335311997176266889925, f_q) - ) - mstore( - 0x17c0, - mulmod( - mload(0x1220), 16038300751658239075779628684257016433412502747804121525056508685985277092575, f_q - ) - ) - mstore( - 0x17e0, - addmod(mload(0xa80), 5849942120181036146466777061000258655135861652611912818641695500590531403042, f_q) - ) - mstore( - 0x1800, - mulmod(mload(0x1220), 6955697244493336113861667751840378876927906302623587437721024018233754910398, f_q) - ) - mstore( - 0x1820, - addmod(mload(0xa80), 14932545627345939108384737993416896211620458097792446905977180168342053585219, f_q) - ) - mstore( - 0x1840, - mulmod( - mload(0x1220), 13498745591877810872211159461644682954739332524336278910448604883789771736885, f_q - ) - ) - mstore( - 0x1860, - addmod(mload(0xa80), 8389497279961464350035246283612592133809031876079755433249599302786036758732, f_q) - ) - mstore( - 0x1880, - mulmod( - mload(0x1220), 20345677989844117909528750049476969581182118546166966482506114734614108237981, f_q - ) - ) - mstore( - 0x18a0, - addmod(mload(0xa80), 1542564881995157312717655695780305507366245854249067861192089451961700257636, f_q) - ) - mstore( - 0x18c0, - mulmod(mload(0x1220), 790608022292213379425324383664216541739009722347092850716054055768832299157, f_q) - ) - mstore( - 0x18e0, - addmod(mload(0xa80), 21097634849547061842821081361593058546809354678068941492982150130806976196460, f_q) - ) - mstore( - 0x1900, - mulmod(mload(0x1220), 5289443209903185443361862148540090689648485914368835830972895623576469023722, f_q) - ) - mstore( - 0x1920, - addmod(mload(0xa80), 16598799661936089778884543596717184398899878486047198512725308562999339471895, f_q) - ) - mstore( - 0x1940, - mulmod( - mload(0x1220), 15161189183906287273290738379431332336600234154579306802151507052820126345529, f_q - ) - ) - mstore( - 0x1960, - addmod(mload(0xa80), 6727053687932987948955667365825942751948130245836727541546697133755682150088, f_q) - ) - mstore( - 0x1980, - mulmod(mload(0x1220), 557567375339945239933617516585967620814823575807691402619711360028043331811, f_q) - ) - mstore( - 0x19a0, - addmod(mload(0xa80), 21330675496499329982312788228671307467733540824608342941078492826547765163806, f_q) - ) - mstore( - 0x19c0, - mulmod( - mload(0x1220), 16611719114775828483319365659907682366622074960672212059891361227499450055959, f_q - ) - ) - mstore( - 0x19e0, - addmod(mload(0xa80), 5276523757063446738927040085349592721926289439743822283806842959076358439658, f_q) - ) - mstore( - 0x1a00, - mulmod(mload(0x1220), 4509404676247677387317362072810231899718070082381452255950861037254608304934, f_q) - ) - mstore( - 0x1a20, - addmod(mload(0xa80), 17378838195591597834929043672447043188830294318034582087747343149321200190683, f_q) - ) - mstore( - 0x1a40, - mulmod(mload(0x1220), 6866457077948847028333856457654941632900463970069876241424363695212127143359, f_q) - ) - mstore( - 0x1a60, - addmod(mload(0xa80), 15021785793890428193912549287602333455647900430346158102273840491363681352258, f_q) - ) - mstore( - 0x1a80, - mulmod( - mload(0x1220), 20169013865622130318472103510465966222180994822334426398191891983290742724178, f_q - ) - ) - mstore( - 0x1aa0, - addmod(mload(0xa80), 1719229006217144903774302234791308866367369578081607945506312203285065771439, f_q) - ) - mstore( - 0x1ac0, - mulmod( - mload(0x1220), 14874205783542236433261764022044465911656512639684999678853651860683757650009, f_q - ) - ) - mstore( - 0x1ae0, - addmod(mload(0xa80), 7014037088297038788984641723212809176891851760731034664844552325892050845608, f_q) - ) - mstore( - 0x1b00, - mulmod(mload(0x1220), 2579947959091681244170407980400327834520881737801886423874592072501514087543, f_q) - ) - mstore( - 0x1b20, - addmod(mload(0xa80), 19308294912747593978075997764856947254027482662614147919823612114074294408074, f_q) - ) - mstore( - 0x1b40, - mulmod( - mload(0x1220), 17011225028452114973964561549541821925778010085385130152192105634715080939230, f_q - ) - ) - mstore( - 0x1b60, - addmod(mload(0xa80), 4877017843387160248281844195715453162770354315030904191506098551860727556387, f_q) - ) - mstore( - 0x1b80, - mulmod(mload(0x1220), 1881761935718519990121799628252273658786792458106649887437395059872945867717, f_q) - ) - mstore( - 0x1ba0, - addmod(mload(0xa80), 20006480936120755232124606117005001429761571942309384456260809126702862627900, f_q) - ) - mstore( - 0x1bc0, - mulmod( - mload(0x1220), 21662285561588145310352318480822402603888953131447478827940284064946709915517, f_q - ) - ) - mstore( - 0x1be0, - addmod(mload(0xa80), 225957310251129911894087264434872484659411268968555515757920121629098580100, f_q) - ) - mstore( - 0x1c00, - mulmod( - mload(0x1220), 21846745818185811051373434299876022191132089169516983080959277716660228899818, f_q - ) - ) - mstore( - 0x1c20, - addmod(mload(0xa80), 41497053653464170872971445381252897416275230899051262738926469915579595799, f_q) - ) - mstore( - 0x1c40, - mulmod( - mload(0x1220), 11770617947510597378885200406447716404126404817511323735042103519754393416137, f_q - ) - ) - mstore( - 0x1c60, - addmod(mload(0xa80), 10117624924328677843361205338809558684421959582904710608656100666821415079480, f_q) - ) - mstore( - 0x1c80, - mulmod( - mload(0x1220), 13018529307372270489258244406856841315962482733096074798317807775255504614069, f_q - ) - ) - mstore( - 0x1ca0, - addmod(mload(0xa80), 8869713564467004732988161338400433772585881667319959545380396411320303881548, f_q) - ) - mstore( - 0x1cc0, - mulmod(mload(0x1220), 5276270562549512946272803945594037128265390012927669941530122528135796334063, f_q) - ) - mstore( - 0x1ce0, - addmod(mload(0xa80), 16611972309289762275973601799663237960282974387488364402168081658440012161554, f_q) - ) - mstore( - 0x1d00, - mulmod(mload(0x1220), 1459528961030896569807206253631725410868595642414057264270714861278164633285, f_q) - ) - mstore( - 0x1d20, - addmod(mload(0xa80), 20428713910808378652439199491625549677679768758001977079427489325297643862332, f_q) - ) - mstore( - 0x1d40, - mulmod(mload(0x1220), 3194789416964050406424265110350613664596286587119568977604859939037397011192, f_q) - ) - mstore( - 0x1d60, - addmod(mload(0xa80), 18693453454875224815822140634906661423952077813296465366093344247538411484425, f_q) - ) - mstore( - 0x1d80, - mulmod(mload(0x1220), 3090451643741879200285099477849831179472024364989630500355756836624424014697, f_q) - ) - mstore( - 0x1da0, - addmod(mload(0xa80), 18797791228097396021961306267407443909076340035426403843342447349951384480920, f_q) - ) - mstore( - 0x1dc0, - mulmod( - mload(0x1220), 15927748781034921005593027077824543133423706442106451156060388409950986747549, f_q - ) - ) - mstore( - 0x1de0, - addmod(mload(0xa80), 5960494090804354216653378667432731955124657958309583187637815776624821748068, f_q) - ) - mstore( - 0x1e00, - mulmod( - mload(0x1220), 21594472933355353940227302948201802990541640451776958309590170926766063614527, f_q - ) - ) - mstore( - 0x1e20, - addmod(mload(0xa80), 293769938483921282019102797055472098006723948639076034108033259809744881090, f_q) - ) - mstore( - 0x1e40, - mulmod( - mload(0x1220), 18627493688178473377890450102960302362510276568110871848038317193719995024144, f_q - ) - ) - mstore( - 0x1e60, - addmod(mload(0xa80), 3260749183660801844355955642296972726038087832305162495659886992855813471473, f_q) - ) - mstore( - 0x1e80, - mulmod( - mload(0x1220), 15233875724801927436678555222002139405060841628305391430751578735629430475003, f_q - ) - ) - mstore( - 0x1ea0, - addmod(mload(0xa80), 6654367147037347785567850523255135683487522772110642912946625450946378020614, f_q) - ) - mstore( - 0x1ec0, - mulmod( - mload(0x1220), 12662796367122493153085459582914902083443981635312477834616629373139110863873, f_q - ) - ) - mstore( - 0x1ee0, - addmod(mload(0xa80), 9225446504716782069160946162342373005104382765103556509081574813436697631744, f_q) - ) - mstore( - 0x1f00, - mulmod(mload(0x1220), 9228489335593836417731216695316971397516686186585289059470421738439643366942, f_q) - ) - mstore( - 0x1f20, - addmod(mload(0xa80), 12659753536245438804515189049940303691031678213830745284227782448136165128675, f_q) - ) - mstore( - 0x1f40, - mulmod(mload(0x1220), 6904960663187367776878651408524770307710353971752548687936010869699798414796, f_q) - ) - mstore( - 0x1f60, - addmod(mload(0xa80), 14983282208651907445367754336732504780838010428663485655762193316876010080821, f_q) - ) - { - let prod := mload(0x1260) + { + let x := calldataload(0xae0) + mstore(0xe80, x) + let y := calldataload(0xb00) + mstore(0xea0, y) + success := and(validate_ec_point(x, y), success) + } +{ + let x := mload(0xa0) +x := add(x, shl(88, mload(0xc0))) +x := add(x, shl(176, mload(0xe0))) +mstore(3776, x) +let y := mload(0x100) +y := add(y, shl(88, mload(0x120))) +y := add(y, shl(176, mload(0x140))) +mstore(3808, y) + + success := and(validate_ec_point(x, y), success) + } +{ + let x := mload(0x160) +x := add(x, shl(88, mload(0x180))) +x := add(x, shl(176, mload(0x1a0))) +mstore(3840, x) +let y := mload(0x1c0) +y := add(y, shl(88, mload(0x1e0))) +y := add(y, shl(176, mload(0x200))) +mstore(3872, y) + + success := and(validate_ec_point(x, y), success) + } +mstore(0xf40, mulmod(mload(0xa80), mload(0xa80), f_q)) +mstore(0xf60, mulmod(mload(0xf40), mload(0xf40), f_q)) +mstore(0xf80, mulmod(mload(0xf60), mload(0xf60), f_q)) +mstore(0xfa0, mulmod(mload(0xf80), mload(0xf80), f_q)) +mstore(0xfc0, mulmod(mload(0xfa0), mload(0xfa0), f_q)) +mstore(0xfe0, mulmod(mload(0xfc0), mload(0xfc0), f_q)) +mstore(0x1000, mulmod(mload(0xfe0), mload(0xfe0), f_q)) +mstore(0x1020, mulmod(mload(0x1000), mload(0x1000), f_q)) +mstore(0x1040, mulmod(mload(0x1020), mload(0x1020), f_q)) +mstore(0x1060, mulmod(mload(0x1040), mload(0x1040), f_q)) +mstore(0x1080, mulmod(mload(0x1060), mload(0x1060), f_q)) +mstore(0x10a0, mulmod(mload(0x1080), mload(0x1080), f_q)) +mstore(0x10c0, mulmod(mload(0x10a0), mload(0x10a0), f_q)) +mstore(0x10e0, mulmod(mload(0x10c0), mload(0x10c0), f_q)) +mstore(0x1100, mulmod(mload(0x10e0), mload(0x10e0), f_q)) +mstore(0x1120, mulmod(mload(0x1100), mload(0x1100), f_q)) +mstore(0x1140, mulmod(mload(0x1120), mload(0x1120), f_q)) +mstore(0x1160, mulmod(mload(0x1140), mload(0x1140), f_q)) +mstore(0x1180, mulmod(mload(0x1160), mload(0x1160), f_q)) +mstore(0x11a0, mulmod(mload(0x1180), mload(0x1180), f_q)) +mstore(0x11c0, mulmod(mload(0x11a0), mload(0x11a0), f_q)) +mstore(0x11e0, mulmod(mload(0x11c0), mload(0x11c0), f_q)) +mstore(0x1200, addmod(mload(0x11e0), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) +mstore(0x1220, mulmod(mload(0x1200), 21888237653275510688422624196183639687472264873923820041627027729598873448513, f_q)) +mstore(0x1240, mulmod(mload(0x1220), 13225785879531581993054172815365636627224369411478295502904397545373139154045, f_q)) +mstore(0x1260, addmod(mload(0xa80), 8662456992307693229192232929891638461323994988937738840793806641202669341572, f_q)) +mstore(0x1280, mulmod(mload(0x1220), 10939663269433627367777756708678102241564365262857670666700619874077960926249, f_q)) +mstore(0x12a0, addmod(mload(0xa80), 10948579602405647854468649036579172846983999137558363676997584312497847569368, f_q)) +mstore(0x12c0, mulmod(mload(0x1220), 11016257578652593686382655500910603527869149377564754001549454008164059876499, f_q)) +mstore(0x12e0, addmod(mload(0xa80), 10871985293186681535863750244346671560679215022851280342148750178411748619118, f_q)) +mstore(0x1300, mulmod(mload(0x1220), 15402826414547299628414612080036060696555554914079673875872749760617770134879, f_q)) +mstore(0x1320, addmod(mload(0xa80), 6485416457291975593831793665221214391992809486336360467825454425958038360738, f_q)) +mstore(0x1340, mulmod(mload(0x1220), 21710372849001950800533397158415938114909991150039389063546734567764856596059, f_q)) +mstore(0x1360, addmod(mload(0xa80), 177870022837324421713008586841336973638373250376645280151469618810951899558, f_q)) +mstore(0x1380, mulmod(mload(0x1220), 2785514556381676080176937710880804108647911392478702105860685610379369825016, f_q)) +mstore(0x13a0, addmod(mload(0xa80), 19102728315457599142069468034376470979900453007937332237837518576196438670601, f_q)) +mstore(0x13c0, mulmod(mload(0x1220), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q)) +mstore(0x13e0, addmod(mload(0xa80), 13154116519010929542673167886091370382741775939114889923107781597533678454429, f_q)) +mstore(0x1400, mulmod(mload(0x1220), 1, f_q)) +mstore(0x1420, addmod(mload(0xa80), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q)) +mstore(0x1440, mulmod(mload(0x1220), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q)) +mstore(0x1460, addmod(mload(0xa80), 10676941854703594198666993839846402519342119846958189386823924046696287912227, f_q)) +mstore(0x1480, mulmod(mload(0x1220), 1426404432721484388505361748317961535523355871255605456897797744433766488507, f_q)) +mstore(0x14a0, addmod(mload(0xa80), 20461838439117790833741043996939313553025008529160428886800406442142042007110, f_q)) +mstore(0x14c0, mulmod(mload(0x1220), 12619617507853212586156872920672483948819476989779550311307282715684870266992, f_q)) +mstore(0x14e0, addmod(mload(0xa80), 9268625363986062636089532824584791139728887410636484032390921470890938228625, f_q)) +mstore(0x1500, mulmod(mload(0x1220), 19032961837237948602743626455740240236231119053033140765040043513661803148152, f_q)) +mstore(0x1520, addmod(mload(0xa80), 2855281034601326619502779289517034852317245347382893578658160672914005347465, f_q)) +mstore(0x1540, mulmod(mload(0x1220), 915149353520972163646494413843788069594022902357002628455555785223409501882, f_q)) +mstore(0x1560, addmod(mload(0xa80), 20973093518318303058599911331413487018954341498059031715242648401352398993735, f_q)) +mstore(0x1580, mulmod(mload(0x1220), 3766081621734395783232337525162072736827576297943013392955872170138036189193, f_q)) +mstore(0x15a0, addmod(mload(0xa80), 18122161250104879439014068220095202351720788102473020950742332016437772306424, f_q)) +mstore(0x15c0, mulmod(mload(0x1220), 4245441013247250116003069945606352967193023389718465410501109428393342802981, f_q)) +mstore(0x15e0, addmod(mload(0xa80), 17642801858592025106243335799650922121355341010697568933197094758182465692636, f_q)) +mstore(0x1600, mulmod(mload(0x1220), 5854133144571823792863860130267644613802765696134002830362054821530146160770, f_q)) +mstore(0x1620, addmod(mload(0xa80), 16034109727267451429382545614989630474745598704282031513336149365045662334847, f_q)) +mstore(0x1640, mulmod(mload(0x1220), 5980488956150442207659150513163747165544364597008566989111579977672498964212, f_q)) +mstore(0x1660, addmod(mload(0xa80), 15907753915688833014587255232093527923003999803407467354586624208903309531405, f_q)) +mstore(0x1680, mulmod(mload(0x1220), 14557038802599140430182096396825290815503940951075961210638273254419942783582, f_q)) +mstore(0x16a0, addmod(mload(0xa80), 7331204069240134792064309348431984273044423449340073133059930932155865712035, f_q)) +mstore(0x16c0, mulmod(mload(0x1220), 13553911191894110065493137367144919847521088405945523452288398666974237857208, f_q)) +mstore(0x16e0, addmod(mload(0xa80), 8334331679945165156753268378112355241027275994470510891409805519601570638409, f_q)) +mstore(0x1700, mulmod(mload(0x1220), 9697063347556872083384215826199993067635178715531258559890418744774301211662, f_q)) +mstore(0x1720, addmod(mload(0xa80), 12191179524282403138862189919057282020913185684884775783807785441801507283955, f_q)) +mstore(0x1740, mulmod(mload(0x1220), 10807735674816066981985242612061336605021639643453679977988966079770672437131, f_q)) +mstore(0x1760, addmod(mload(0xa80), 11080507197023208240261163133195938483526724756962354365709238106805136058486, f_q)) +mstore(0x1780, mulmod(mload(0x1220), 12459868075641381822485233712013080087763946065665469821362892189399541605692, f_q)) +mstore(0x17a0, addmod(mload(0xa80), 9428374796197893399761172033244195000784418334750564522335311997176266889925, f_q)) +mstore(0x17c0, mulmod(mload(0x1220), 16038300751658239075779628684257016433412502747804121525056508685985277092575, f_q)) +mstore(0x17e0, addmod(mload(0xa80), 5849942120181036146466777061000258655135861652611912818641695500590531403042, f_q)) +mstore(0x1800, mulmod(mload(0x1220), 6955697244493336113861667751840378876927906302623587437721024018233754910398, f_q)) +mstore(0x1820, addmod(mload(0xa80), 14932545627345939108384737993416896211620458097792446905977180168342053585219, f_q)) +mstore(0x1840, mulmod(mload(0x1220), 13498745591877810872211159461644682954739332524336278910448604883789771736885, f_q)) +mstore(0x1860, addmod(mload(0xa80), 8389497279961464350035246283612592133809031876079755433249599302786036758732, f_q)) +mstore(0x1880, mulmod(mload(0x1220), 20345677989844117909528750049476969581182118546166966482506114734614108237981, f_q)) +mstore(0x18a0, addmod(mload(0xa80), 1542564881995157312717655695780305507366245854249067861192089451961700257636, f_q)) +mstore(0x18c0, mulmod(mload(0x1220), 790608022292213379425324383664216541739009722347092850716054055768832299157, f_q)) +mstore(0x18e0, addmod(mload(0xa80), 21097634849547061842821081361593058546809354678068941492982150130806976196460, f_q)) +mstore(0x1900, mulmod(mload(0x1220), 5289443209903185443361862148540090689648485914368835830972895623576469023722, f_q)) +mstore(0x1920, addmod(mload(0xa80), 16598799661936089778884543596717184398899878486047198512725308562999339471895, f_q)) +mstore(0x1940, mulmod(mload(0x1220), 15161189183906287273290738379431332336600234154579306802151507052820126345529, f_q)) +mstore(0x1960, addmod(mload(0xa80), 6727053687932987948955667365825942751948130245836727541546697133755682150088, f_q)) +mstore(0x1980, mulmod(mload(0x1220), 557567375339945239933617516585967620814823575807691402619711360028043331811, f_q)) +mstore(0x19a0, addmod(mload(0xa80), 21330675496499329982312788228671307467733540824608342941078492826547765163806, f_q)) +mstore(0x19c0, mulmod(mload(0x1220), 16611719114775828483319365659907682366622074960672212059891361227499450055959, f_q)) +mstore(0x19e0, addmod(mload(0xa80), 5276523757063446738927040085349592721926289439743822283806842959076358439658, f_q)) +mstore(0x1a00, mulmod(mload(0x1220), 4509404676247677387317362072810231899718070082381452255950861037254608304934, f_q)) +mstore(0x1a20, addmod(mload(0xa80), 17378838195591597834929043672447043188830294318034582087747343149321200190683, f_q)) +mstore(0x1a40, mulmod(mload(0x1220), 6866457077948847028333856457654941632900463970069876241424363695212127143359, f_q)) +mstore(0x1a60, addmod(mload(0xa80), 15021785793890428193912549287602333455647900430346158102273840491363681352258, f_q)) +mstore(0x1a80, mulmod(mload(0x1220), 20169013865622130318472103510465966222180994822334426398191891983290742724178, f_q)) +mstore(0x1aa0, addmod(mload(0xa80), 1719229006217144903774302234791308866367369578081607945506312203285065771439, f_q)) +mstore(0x1ac0, mulmod(mload(0x1220), 14874205783542236433261764022044465911656512639684999678853651860683757650009, f_q)) +mstore(0x1ae0, addmod(mload(0xa80), 7014037088297038788984641723212809176891851760731034664844552325892050845608, f_q)) +mstore(0x1b00, mulmod(mload(0x1220), 2579947959091681244170407980400327834520881737801886423874592072501514087543, f_q)) +mstore(0x1b20, addmod(mload(0xa80), 19308294912747593978075997764856947254027482662614147919823612114074294408074, f_q)) +mstore(0x1b40, mulmod(mload(0x1220), 17011225028452114973964561549541821925778010085385130152192105634715080939230, f_q)) +mstore(0x1b60, addmod(mload(0xa80), 4877017843387160248281844195715453162770354315030904191506098551860727556387, f_q)) +mstore(0x1b80, mulmod(mload(0x1220), 1881761935718519990121799628252273658786792458106649887437395059872945867717, f_q)) +mstore(0x1ba0, addmod(mload(0xa80), 20006480936120755232124606117005001429761571942309384456260809126702862627900, f_q)) +mstore(0x1bc0, mulmod(mload(0x1220), 21662285561588145310352318480822402603888953131447478827940284064946709915517, f_q)) +mstore(0x1be0, addmod(mload(0xa80), 225957310251129911894087264434872484659411268968555515757920121629098580100, f_q)) +mstore(0x1c00, mulmod(mload(0x1220), 21846745818185811051373434299876022191132089169516983080959277716660228899818, f_q)) +mstore(0x1c20, addmod(mload(0xa80), 41497053653464170872971445381252897416275230899051262738926469915579595799, f_q)) +mstore(0x1c40, mulmod(mload(0x1220), 11770617947510597378885200406447716404126404817511323735042103519754393416137, f_q)) +mstore(0x1c60, addmod(mload(0xa80), 10117624924328677843361205338809558684421959582904710608656100666821415079480, f_q)) +mstore(0x1c80, mulmod(mload(0x1220), 13018529307372270489258244406856841315962482733096074798317807775255504614069, f_q)) +mstore(0x1ca0, addmod(mload(0xa80), 8869713564467004732988161338400433772585881667319959545380396411320303881548, f_q)) +mstore(0x1cc0, mulmod(mload(0x1220), 5276270562549512946272803945594037128265390012927669941530122528135796334063, f_q)) +mstore(0x1ce0, addmod(mload(0xa80), 16611972309289762275973601799663237960282974387488364402168081658440012161554, f_q)) +mstore(0x1d00, mulmod(mload(0x1220), 1459528961030896569807206253631725410868595642414057264270714861278164633285, f_q)) +mstore(0x1d20, addmod(mload(0xa80), 20428713910808378652439199491625549677679768758001977079427489325297643862332, f_q)) +mstore(0x1d40, mulmod(mload(0x1220), 3194789416964050406424265110350613664596286587119568977604859939037397011192, f_q)) +mstore(0x1d60, addmod(mload(0xa80), 18693453454875224815822140634906661423952077813296465366093344247538411484425, f_q)) +mstore(0x1d80, mulmod(mload(0x1220), 3090451643741879200285099477849831179472024364989630500355756836624424014697, f_q)) +mstore(0x1da0, addmod(mload(0xa80), 18797791228097396021961306267407443909076340035426403843342447349951384480920, f_q)) +mstore(0x1dc0, mulmod(mload(0x1220), 15927748781034921005593027077824543133423706442106451156060388409950986747549, f_q)) +mstore(0x1de0, addmod(mload(0xa80), 5960494090804354216653378667432731955124657958309583187637815776624821748068, f_q)) +mstore(0x1e00, mulmod(mload(0x1220), 21594472933355353940227302948201802990541640451776958309590170926766063614527, f_q)) +mstore(0x1e20, addmod(mload(0xa80), 293769938483921282019102797055472098006723948639076034108033259809744881090, f_q)) +mstore(0x1e40, mulmod(mload(0x1220), 18627493688178473377890450102960302362510276568110871848038317193719995024144, f_q)) +mstore(0x1e60, addmod(mload(0xa80), 3260749183660801844355955642296972726038087832305162495659886992855813471473, f_q)) +mstore(0x1e80, mulmod(mload(0x1220), 15233875724801927436678555222002139405060841628305391430751578735629430475003, f_q)) +mstore(0x1ea0, addmod(mload(0xa80), 6654367147037347785567850523255135683487522772110642912946625450946378020614, f_q)) +mstore(0x1ec0, mulmod(mload(0x1220), 12662796367122493153085459582914902083443981635312477834616629373139110863873, f_q)) +mstore(0x1ee0, addmod(mload(0xa80), 9225446504716782069160946162342373005104382765103556509081574813436697631744, f_q)) +mstore(0x1f00, mulmod(mload(0x1220), 9228489335593836417731216695316971397516686186585289059470421738439643366942, f_q)) +mstore(0x1f20, addmod(mload(0xa80), 12659753536245438804515189049940303691031678213830745284227782448136165128675, f_q)) +mstore(0x1f40, mulmod(mload(0x1220), 6904960663187367776878651408524770307710353971752548687936010869699798414796, f_q)) +mstore(0x1f60, addmod(mload(0xa80), 14983282208651907445367754336732504780838010428663485655762193316876010080821, f_q)) +{ + let prod := mload(0x1260) prod := mulmod(mload(0x12a0), prod, f_q) mstore(0x1f80, prod) - + prod := mulmod(mload(0x12e0), prod, f_q) mstore(0x1fa0, prod) - + prod := mulmod(mload(0x1320), prod, f_q) mstore(0x1fc0, prod) - + prod := mulmod(mload(0x1360), prod, f_q) mstore(0x1fe0, prod) - + prod := mulmod(mload(0x13a0), prod, f_q) mstore(0x2000, prod) - + prod := mulmod(mload(0x13e0), prod, f_q) mstore(0x2020, prod) - + prod := mulmod(mload(0x1420), prod, f_q) mstore(0x2040, prod) - + prod := mulmod(mload(0x1460), prod, f_q) mstore(0x2060, prod) - + prod := mulmod(mload(0x14a0), prod, f_q) mstore(0x2080, prod) - + prod := mulmod(mload(0x14e0), prod, f_q) mstore(0x20a0, prod) - + prod := mulmod(mload(0x1520), prod, f_q) mstore(0x20c0, prod) - + prod := mulmod(mload(0x1560), prod, f_q) mstore(0x20e0, prod) - + prod := mulmod(mload(0x15a0), prod, f_q) mstore(0x2100, prod) - + prod := mulmod(mload(0x15e0), prod, f_q) mstore(0x2120, prod) - + prod := mulmod(mload(0x1620), prod, f_q) mstore(0x2140, prod) - + prod := mulmod(mload(0x1660), prod, f_q) mstore(0x2160, prod) - + prod := mulmod(mload(0x16a0), prod, f_q) mstore(0x2180, prod) - + prod := mulmod(mload(0x16e0), prod, f_q) mstore(0x21a0, prod) - + prod := mulmod(mload(0x1720), prod, f_q) mstore(0x21c0, prod) - + prod := mulmod(mload(0x1760), prod, f_q) mstore(0x21e0, prod) - + prod := mulmod(mload(0x17a0), prod, f_q) mstore(0x2200, prod) - + prod := mulmod(mload(0x17e0), prod, f_q) mstore(0x2220, prod) - + prod := mulmod(mload(0x1820), prod, f_q) mstore(0x2240, prod) - + prod := mulmod(mload(0x1860), prod, f_q) mstore(0x2260, prod) - + prod := mulmod(mload(0x18a0), prod, f_q) mstore(0x2280, prod) - + prod := mulmod(mload(0x18e0), prod, f_q) mstore(0x22a0, prod) - + prod := mulmod(mload(0x1920), prod, f_q) mstore(0x22c0, prod) - + prod := mulmod(mload(0x1960), prod, f_q) mstore(0x22e0, prod) - + prod := mulmod(mload(0x19a0), prod, f_q) mstore(0x2300, prod) - + prod := mulmod(mload(0x19e0), prod, f_q) mstore(0x2320, prod) - + prod := mulmod(mload(0x1a20), prod, f_q) mstore(0x2340, prod) - + prod := mulmod(mload(0x1a60), prod, f_q) mstore(0x2360, prod) - + prod := mulmod(mload(0x1aa0), prod, f_q) mstore(0x2380, prod) - + prod := mulmod(mload(0x1ae0), prod, f_q) mstore(0x23a0, prod) - + prod := mulmod(mload(0x1b20), prod, f_q) mstore(0x23c0, prod) - + prod := mulmod(mload(0x1b60), prod, f_q) mstore(0x23e0, prod) - + prod := mulmod(mload(0x1ba0), prod, f_q) mstore(0x2400, prod) - + prod := mulmod(mload(0x1be0), prod, f_q) mstore(0x2420, prod) - + prod := mulmod(mload(0x1c20), prod, f_q) mstore(0x2440, prod) - + prod := mulmod(mload(0x1c60), prod, f_q) mstore(0x2460, prod) - + prod := mulmod(mload(0x1ca0), prod, f_q) mstore(0x2480, prod) - + prod := mulmod(mload(0x1ce0), prod, f_q) mstore(0x24a0, prod) - + prod := mulmod(mload(0x1d20), prod, f_q) mstore(0x24c0, prod) - + prod := mulmod(mload(0x1d60), prod, f_q) mstore(0x24e0, prod) - + prod := mulmod(mload(0x1da0), prod, f_q) mstore(0x2500, prod) - + prod := mulmod(mload(0x1de0), prod, f_q) mstore(0x2520, prod) - + prod := mulmod(mload(0x1e20), prod, f_q) mstore(0x2540, prod) - + prod := mulmod(mload(0x1e60), prod, f_q) mstore(0x2560, prod) - + prod := mulmod(mload(0x1ea0), prod, f_q) mstore(0x2580, prod) - + prod := mulmod(mload(0x1ee0), prod, f_q) mstore(0x25a0, prod) - + prod := mulmod(mload(0x1f20), prod, f_q) mstore(0x25c0, prod) - + prod := mulmod(mload(0x1f60), prod, f_q) mstore(0x25e0, prod) - + prod := mulmod(mload(0x1200), prod, f_q) mstore(0x2600, prod) - } - mstore(0x2640, 32) - mstore(0x2660, 32) - mstore(0x2680, 32) - mstore(0x26a0, mload(0x2600)) - mstore(0x26c0, 21888242871839275222246405745257275088548364400416034343698204186575808495615) - mstore(0x26e0, 21888242871839275222246405745257275088548364400416034343698204186575808495617) - success := and(eq(staticcall(gas(), 0x5, 0x2640, 0xc0, 0x2620, 0x20), 1), success) - { - let inv := mload(0x2620) - let v - - v := mload(0x1200) - mstore(4608, mulmod(mload(0x25e0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1f60) - mstore(8032, mulmod(mload(0x25c0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1f20) - mstore(7968, mulmod(mload(0x25a0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1ee0) - mstore(7904, mulmod(mload(0x2580), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1ea0) - mstore(7840, mulmod(mload(0x2560), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1e60) - mstore(7776, mulmod(mload(0x2540), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1e20) - mstore(7712, mulmod(mload(0x2520), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1de0) - mstore(7648, mulmod(mload(0x2500), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1da0) - mstore(7584, mulmod(mload(0x24e0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1d60) - mstore(7520, mulmod(mload(0x24c0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1d20) - mstore(7456, mulmod(mload(0x24a0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1ce0) - mstore(7392, mulmod(mload(0x2480), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1ca0) - mstore(7328, mulmod(mload(0x2460), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1c60) - mstore(7264, mulmod(mload(0x2440), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1c20) - mstore(7200, mulmod(mload(0x2420), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1be0) - mstore(7136, mulmod(mload(0x2400), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1ba0) - mstore(7072, mulmod(mload(0x23e0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1b60) - mstore(7008, mulmod(mload(0x23c0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1b20) - mstore(6944, mulmod(mload(0x23a0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1ae0) - mstore(6880, mulmod(mload(0x2380), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1aa0) - mstore(6816, mulmod(mload(0x2360), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1a60) - mstore(6752, mulmod(mload(0x2340), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1a20) - mstore(6688, mulmod(mload(0x2320), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x19e0) - mstore(6624, mulmod(mload(0x2300), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x19a0) - mstore(6560, mulmod(mload(0x22e0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1960) - mstore(6496, mulmod(mload(0x22c0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1920) - mstore(6432, mulmod(mload(0x22a0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x18e0) - mstore(6368, mulmod(mload(0x2280), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x18a0) - mstore(6304, mulmod(mload(0x2260), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1860) - mstore(6240, mulmod(mload(0x2240), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1820) - mstore(6176, mulmod(mload(0x2220), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x17e0) - mstore(6112, mulmod(mload(0x2200), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x17a0) - mstore(6048, mulmod(mload(0x21e0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1760) - mstore(5984, mulmod(mload(0x21c0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1720) - mstore(5920, mulmod(mload(0x21a0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x16e0) - mstore(5856, mulmod(mload(0x2180), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x16a0) - mstore(5792, mulmod(mload(0x2160), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1660) - mstore(5728, mulmod(mload(0x2140), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1620) - mstore(5664, mulmod(mload(0x2120), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x15e0) - mstore(5600, mulmod(mload(0x2100), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x15a0) - mstore(5536, mulmod(mload(0x20e0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1560) - mstore(5472, mulmod(mload(0x20c0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1520) - mstore(5408, mulmod(mload(0x20a0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x14e0) - mstore(5344, mulmod(mload(0x2080), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x14a0) - mstore(5280, mulmod(mload(0x2060), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1460) - mstore(5216, mulmod(mload(0x2040), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1420) - mstore(5152, mulmod(mload(0x2020), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x13e0) - mstore(5088, mulmod(mload(0x2000), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x13a0) - mstore(5024, mulmod(mload(0x1fe0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1360) - mstore(4960, mulmod(mload(0x1fc0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x1320) - mstore(4896, mulmod(mload(0x1fa0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x12e0) - mstore(4832, mulmod(mload(0x1f80), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x12a0) - mstore(4768, mulmod(mload(0x1260), inv, f_q)) - inv := mulmod(v, inv, f_q) + + } +mstore(0x2640, 32) +mstore(0x2660, 32) +mstore(0x2680, 32) +mstore(0x26a0, mload(0x2600)) +mstore(0x26c0, 21888242871839275222246405745257275088548364400416034343698204186575808495615) +mstore(0x26e0, 21888242871839275222246405745257275088548364400416034343698204186575808495617) +success := and(eq(staticcall(gas(), 0x5, 0x2640, 0xc0, 0x2620, 0x20), 1), success) +{ + + let inv := mload(0x2620) + let v + + v := mload(0x1200) + mstore(4608, mulmod(mload(0x25e0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1f60) + mstore(8032, mulmod(mload(0x25c0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1f20) + mstore(7968, mulmod(mload(0x25a0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1ee0) + mstore(7904, mulmod(mload(0x2580), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1ea0) + mstore(7840, mulmod(mload(0x2560), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1e60) + mstore(7776, mulmod(mload(0x2540), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1e20) + mstore(7712, mulmod(mload(0x2520), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1de0) + mstore(7648, mulmod(mload(0x2500), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1da0) + mstore(7584, mulmod(mload(0x24e0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1d60) + mstore(7520, mulmod(mload(0x24c0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1d20) + mstore(7456, mulmod(mload(0x24a0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1ce0) + mstore(7392, mulmod(mload(0x2480), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1ca0) + mstore(7328, mulmod(mload(0x2460), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1c60) + mstore(7264, mulmod(mload(0x2440), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1c20) + mstore(7200, mulmod(mload(0x2420), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1be0) + mstore(7136, mulmod(mload(0x2400), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1ba0) + mstore(7072, mulmod(mload(0x23e0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1b60) + mstore(7008, mulmod(mload(0x23c0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1b20) + mstore(6944, mulmod(mload(0x23a0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1ae0) + mstore(6880, mulmod(mload(0x2380), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1aa0) + mstore(6816, mulmod(mload(0x2360), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1a60) + mstore(6752, mulmod(mload(0x2340), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1a20) + mstore(6688, mulmod(mload(0x2320), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x19e0) + mstore(6624, mulmod(mload(0x2300), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x19a0) + mstore(6560, mulmod(mload(0x22e0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1960) + mstore(6496, mulmod(mload(0x22c0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1920) + mstore(6432, mulmod(mload(0x22a0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x18e0) + mstore(6368, mulmod(mload(0x2280), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x18a0) + mstore(6304, mulmod(mload(0x2260), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1860) + mstore(6240, mulmod(mload(0x2240), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1820) + mstore(6176, mulmod(mload(0x2220), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x17e0) + mstore(6112, mulmod(mload(0x2200), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x17a0) + mstore(6048, mulmod(mload(0x21e0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1760) + mstore(5984, mulmod(mload(0x21c0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1720) + mstore(5920, mulmod(mload(0x21a0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x16e0) + mstore(5856, mulmod(mload(0x2180), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x16a0) + mstore(5792, mulmod(mload(0x2160), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1660) + mstore(5728, mulmod(mload(0x2140), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1620) + mstore(5664, mulmod(mload(0x2120), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x15e0) + mstore(5600, mulmod(mload(0x2100), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x15a0) + mstore(5536, mulmod(mload(0x20e0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1560) + mstore(5472, mulmod(mload(0x20c0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1520) + mstore(5408, mulmod(mload(0x20a0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x14e0) + mstore(5344, mulmod(mload(0x2080), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x14a0) + mstore(5280, mulmod(mload(0x2060), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1460) + mstore(5216, mulmod(mload(0x2040), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1420) + mstore(5152, mulmod(mload(0x2020), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x13e0) + mstore(5088, mulmod(mload(0x2000), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x13a0) + mstore(5024, mulmod(mload(0x1fe0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1360) + mstore(4960, mulmod(mload(0x1fc0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x1320) + mstore(4896, mulmod(mload(0x1fa0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x12e0) + mstore(4832, mulmod(mload(0x1f80), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x12a0) + mstore(4768, mulmod(mload(0x1260), inv, f_q)) + inv := mulmod(v, inv, f_q) mstore(0x1260, inv) - } - mstore(0x2700, mulmod(mload(0x1240), mload(0x1260), f_q)) - mstore(0x2720, mulmod(mload(0x1280), mload(0x12a0), f_q)) - mstore(0x2740, mulmod(mload(0x12c0), mload(0x12e0), f_q)) - mstore(0x2760, mulmod(mload(0x1300), mload(0x1320), f_q)) - mstore(0x2780, mulmod(mload(0x1340), mload(0x1360), f_q)) - mstore(0x27a0, mulmod(mload(0x1380), mload(0x13a0), f_q)) - mstore(0x27c0, mulmod(mload(0x13c0), mload(0x13e0), f_q)) - mstore(0x27e0, mulmod(mload(0x1400), mload(0x1420), f_q)) - mstore(0x2800, mulmod(mload(0x1440), mload(0x1460), f_q)) - mstore(0x2820, mulmod(mload(0x1480), mload(0x14a0), f_q)) - mstore(0x2840, mulmod(mload(0x14c0), mload(0x14e0), f_q)) - mstore(0x2860, mulmod(mload(0x1500), mload(0x1520), f_q)) - mstore(0x2880, mulmod(mload(0x1540), mload(0x1560), f_q)) - mstore(0x28a0, mulmod(mload(0x1580), mload(0x15a0), f_q)) - mstore(0x28c0, mulmod(mload(0x15c0), mload(0x15e0), f_q)) - mstore(0x28e0, mulmod(mload(0x1600), mload(0x1620), f_q)) - mstore(0x2900, mulmod(mload(0x1640), mload(0x1660), f_q)) - mstore(0x2920, mulmod(mload(0x1680), mload(0x16a0), f_q)) - mstore(0x2940, mulmod(mload(0x16c0), mload(0x16e0), f_q)) - mstore(0x2960, mulmod(mload(0x1700), mload(0x1720), f_q)) - mstore(0x2980, mulmod(mload(0x1740), mload(0x1760), f_q)) - mstore(0x29a0, mulmod(mload(0x1780), mload(0x17a0), f_q)) - mstore(0x29c0, mulmod(mload(0x17c0), mload(0x17e0), f_q)) - mstore(0x29e0, mulmod(mload(0x1800), mload(0x1820), f_q)) - mstore(0x2a00, mulmod(mload(0x1840), mload(0x1860), f_q)) - mstore(0x2a20, mulmod(mload(0x1880), mload(0x18a0), f_q)) - mstore(0x2a40, mulmod(mload(0x18c0), mload(0x18e0), f_q)) - mstore(0x2a60, mulmod(mload(0x1900), mload(0x1920), f_q)) - mstore(0x2a80, mulmod(mload(0x1940), mload(0x1960), f_q)) - mstore(0x2aa0, mulmod(mload(0x1980), mload(0x19a0), f_q)) - mstore(0x2ac0, mulmod(mload(0x19c0), mload(0x19e0), f_q)) - mstore(0x2ae0, mulmod(mload(0x1a00), mload(0x1a20), f_q)) - mstore(0x2b00, mulmod(mload(0x1a40), mload(0x1a60), f_q)) - mstore(0x2b20, mulmod(mload(0x1a80), mload(0x1aa0), f_q)) - mstore(0x2b40, mulmod(mload(0x1ac0), mload(0x1ae0), f_q)) - mstore(0x2b60, mulmod(mload(0x1b00), mload(0x1b20), f_q)) - mstore(0x2b80, mulmod(mload(0x1b40), mload(0x1b60), f_q)) - mstore(0x2ba0, mulmod(mload(0x1b80), mload(0x1ba0), f_q)) - mstore(0x2bc0, mulmod(mload(0x1bc0), mload(0x1be0), f_q)) - mstore(0x2be0, mulmod(mload(0x1c00), mload(0x1c20), f_q)) - mstore(0x2c00, mulmod(mload(0x1c40), mload(0x1c60), f_q)) - mstore(0x2c20, mulmod(mload(0x1c80), mload(0x1ca0), f_q)) - mstore(0x2c40, mulmod(mload(0x1cc0), mload(0x1ce0), f_q)) - mstore(0x2c60, mulmod(mload(0x1d00), mload(0x1d20), f_q)) - mstore(0x2c80, mulmod(mload(0x1d40), mload(0x1d60), f_q)) - mstore(0x2ca0, mulmod(mload(0x1d80), mload(0x1da0), f_q)) - mstore(0x2cc0, mulmod(mload(0x1dc0), mload(0x1de0), f_q)) - mstore(0x2ce0, mulmod(mload(0x1e00), mload(0x1e20), f_q)) - mstore(0x2d00, mulmod(mload(0x1e40), mload(0x1e60), f_q)) - mstore(0x2d20, mulmod(mload(0x1e80), mload(0x1ea0), f_q)) - mstore(0x2d40, mulmod(mload(0x1ec0), mload(0x1ee0), f_q)) - mstore(0x2d60, mulmod(mload(0x1f00), mload(0x1f20), f_q)) - mstore(0x2d80, mulmod(mload(0x1f40), mload(0x1f60), f_q)) - { - let result := mulmod(mload(0x27e0), mload(0xa0), f_q) - result := addmod(mulmod(mload(0x2800), mload(0xc0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2820), mload(0xe0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2840), mload(0x100), f_q), result, f_q) - result := addmod(mulmod(mload(0x2860), mload(0x120), f_q), result, f_q) - result := addmod(mulmod(mload(0x2880), mload(0x140), f_q), result, f_q) - result := addmod(mulmod(mload(0x28a0), mload(0x160), f_q), result, f_q) - result := addmod(mulmod(mload(0x28c0), mload(0x180), f_q), result, f_q) - result := addmod(mulmod(mload(0x28e0), mload(0x1a0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2900), mload(0x1c0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2920), mload(0x1e0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2940), mload(0x200), f_q), result, f_q) - result := addmod(mulmod(mload(0x2960), mload(0x220), f_q), result, f_q) - result := addmod(mulmod(mload(0x2980), mload(0x240), f_q), result, f_q) - result := addmod(mulmod(mload(0x29a0), mload(0x260), f_q), result, f_q) - result := addmod(mulmod(mload(0x29c0), mload(0x280), f_q), result, f_q) - result := addmod(mulmod(mload(0x29e0), mload(0x2a0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2a00), mload(0x2c0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2a20), mload(0x2e0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2a40), mload(0x300), f_q), result, f_q) - result := addmod(mulmod(mload(0x2a60), mload(0x320), f_q), result, f_q) - result := addmod(mulmod(mload(0x2a80), mload(0x340), f_q), result, f_q) - result := addmod(mulmod(mload(0x2aa0), mload(0x360), f_q), result, f_q) - result := addmod(mulmod(mload(0x2ac0), mload(0x380), f_q), result, f_q) - result := addmod(mulmod(mload(0x2ae0), mload(0x3a0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2b00), mload(0x3c0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2b20), mload(0x3e0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2b40), mload(0x400), f_q), result, f_q) - result := addmod(mulmod(mload(0x2b60), mload(0x420), f_q), result, f_q) - result := addmod(mulmod(mload(0x2b80), mload(0x440), f_q), result, f_q) - result := addmod(mulmod(mload(0x2ba0), mload(0x460), f_q), result, f_q) - result := addmod(mulmod(mload(0x2bc0), mload(0x480), f_q), result, f_q) - result := addmod(mulmod(mload(0x2be0), mload(0x4a0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2c00), mload(0x4c0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2c20), mload(0x4e0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2c40), mload(0x500), f_q), result, f_q) - result := addmod(mulmod(mload(0x2c60), mload(0x520), f_q), result, f_q) - result := addmod(mulmod(mload(0x2c80), mload(0x540), f_q), result, f_q) - result := addmod(mulmod(mload(0x2ca0), mload(0x560), f_q), result, f_q) - result := addmod(mulmod(mload(0x2cc0), mload(0x580), f_q), result, f_q) - result := addmod(mulmod(mload(0x2ce0), mload(0x5a0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2d00), mload(0x5c0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2d20), mload(0x5e0), f_q), result, f_q) - result := addmod(mulmod(mload(0x2d40), mload(0x600), f_q), result, f_q) - result := addmod(mulmod(mload(0x2d60), mload(0x620), f_q), result, f_q) - result := addmod(mulmod(mload(0x2d80), mload(0x640), f_q), result, f_q) - mstore(11680, result) - } - mstore(0x2dc0, mulmod(mload(0xb00), mload(0xae0), f_q)) - mstore(0x2de0, addmod(mload(0xac0), mload(0x2dc0), f_q)) - mstore(0x2e00, addmod(mload(0x2de0), sub(f_q, mload(0xb20)), f_q)) - mstore(0x2e20, mulmod(mload(0x2e00), mload(0xb80), f_q)) - mstore(0x2e40, mulmod(mload(0x920), mload(0x2e20), f_q)) - mstore(0x2e60, addmod(1, sub(f_q, mload(0xc40)), f_q)) - mstore(0x2e80, mulmod(mload(0x2e60), mload(0x27e0), f_q)) - mstore(0x2ea0, addmod(mload(0x2e40), mload(0x2e80), f_q)) - mstore(0x2ec0, mulmod(mload(0x920), mload(0x2ea0), f_q)) - mstore(0x2ee0, mulmod(mload(0xc40), mload(0xc40), f_q)) - mstore(0x2f00, addmod(mload(0x2ee0), sub(f_q, mload(0xc40)), f_q)) - mstore(0x2f20, mulmod(mload(0x2f00), mload(0x2700), f_q)) - mstore(0x2f40, addmod(mload(0x2ec0), mload(0x2f20), f_q)) - mstore(0x2f60, mulmod(mload(0x920), mload(0x2f40), f_q)) - mstore(0x2f80, addmod(1, sub(f_q, mload(0x2700)), f_q)) - mstore(0x2fa0, addmod(mload(0x2720), mload(0x2740), f_q)) - mstore(0x2fc0, addmod(mload(0x2fa0), mload(0x2760), f_q)) - mstore(0x2fe0, addmod(mload(0x2fc0), mload(0x2780), f_q)) - mstore(0x3000, addmod(mload(0x2fe0), mload(0x27a0), f_q)) - mstore(0x3020, addmod(mload(0x3000), mload(0x27c0), f_q)) - mstore(0x3040, addmod(mload(0x2f80), sub(f_q, mload(0x3020)), f_q)) - mstore(0x3060, mulmod(mload(0xbe0), mload(0x7a0), f_q)) - mstore(0x3080, addmod(mload(0xb40), mload(0x3060), f_q)) - mstore(0x30a0, addmod(mload(0x3080), mload(0x800), f_q)) - mstore(0x30c0, mulmod(mload(0xc00), mload(0x7a0), f_q)) - mstore(0x30e0, addmod(mload(0xac0), mload(0x30c0), f_q)) - mstore(0x3100, addmod(mload(0x30e0), mload(0x800), f_q)) - mstore(0x3120, mulmod(mload(0x3100), mload(0x30a0), f_q)) - mstore(0x3140, mulmod(mload(0xc20), mload(0x7a0), f_q)) - mstore(0x3160, addmod(mload(0x2da0), mload(0x3140), f_q)) - mstore(0x3180, addmod(mload(0x3160), mload(0x800), f_q)) - mstore(0x31a0, mulmod(mload(0x3180), mload(0x3120), f_q)) - mstore(0x31c0, mulmod(mload(0x31a0), mload(0xc60), f_q)) - mstore(0x31e0, mulmod(1, mload(0x7a0), f_q)) - mstore(0x3200, mulmod(mload(0xa80), mload(0x31e0), f_q)) - mstore(0x3220, addmod(mload(0xb40), mload(0x3200), f_q)) - mstore(0x3240, addmod(mload(0x3220), mload(0x800), f_q)) - mstore( - 0x3260, - mulmod(4131629893567559867359510883348571134090853742863529169391034518566172092834, mload(0x7a0), f_q) - ) - mstore(0x3280, mulmod(mload(0xa80), mload(0x3260), f_q)) - mstore(0x32a0, addmod(mload(0xac0), mload(0x3280), f_q)) - mstore(0x32c0, addmod(mload(0x32a0), mload(0x800), f_q)) - mstore(0x32e0, mulmod(mload(0x32c0), mload(0x3240), f_q)) - mstore( - 0x3300, - mulmod(8910878055287538404433155982483128285667088683464058436815641868457422632747, mload(0x7a0), f_q) - ) - mstore(0x3320, mulmod(mload(0xa80), mload(0x3300), f_q)) - mstore(0x3340, addmod(mload(0x2da0), mload(0x3320), f_q)) - mstore(0x3360, addmod(mload(0x3340), mload(0x800), f_q)) - mstore(0x3380, mulmod(mload(0x3360), mload(0x32e0), f_q)) - mstore(0x33a0, mulmod(mload(0x3380), mload(0xc40), f_q)) - mstore(0x33c0, addmod(mload(0x31c0), sub(f_q, mload(0x33a0)), f_q)) - mstore(0x33e0, mulmod(mload(0x33c0), mload(0x3040), f_q)) - mstore(0x3400, addmod(mload(0x2f60), mload(0x33e0), f_q)) - mstore(0x3420, mulmod(mload(0x920), mload(0x3400), f_q)) - mstore(0x3440, addmod(1, sub(f_q, mload(0xc80)), f_q)) - mstore(0x3460, mulmod(mload(0x3440), mload(0x27e0), f_q)) - mstore(0x3480, addmod(mload(0x3420), mload(0x3460), f_q)) - mstore(0x34a0, mulmod(mload(0x920), mload(0x3480), f_q)) - mstore(0x34c0, mulmod(mload(0xc80), mload(0xc80), f_q)) - mstore(0x34e0, addmod(mload(0x34c0), sub(f_q, mload(0xc80)), f_q)) - mstore(0x3500, mulmod(mload(0x34e0), mload(0x2700), f_q)) - mstore(0x3520, addmod(mload(0x34a0), mload(0x3500), f_q)) - mstore(0x3540, mulmod(mload(0x920), mload(0x3520), f_q)) - mstore(0x3560, addmod(mload(0xcc0), mload(0x7a0), f_q)) - mstore(0x3580, mulmod(mload(0x3560), mload(0xca0), f_q)) - mstore(0x35a0, addmod(mload(0xd00), mload(0x800), f_q)) - mstore(0x35c0, mulmod(mload(0x35a0), mload(0x3580), f_q)) - mstore(0x35e0, mulmod(mload(0xac0), mload(0xba0), f_q)) - mstore(0x3600, addmod(mload(0x35e0), mload(0x7a0), f_q)) - mstore(0x3620, mulmod(mload(0x3600), mload(0xc80), f_q)) - mstore(0x3640, addmod(mload(0xb60), mload(0x800), f_q)) - mstore(0x3660, mulmod(mload(0x3640), mload(0x3620), f_q)) - mstore(0x3680, addmod(mload(0x35c0), sub(f_q, mload(0x3660)), f_q)) - mstore(0x36a0, mulmod(mload(0x3680), mload(0x3040), f_q)) - mstore(0x36c0, addmod(mload(0x3540), mload(0x36a0), f_q)) - mstore(0x36e0, mulmod(mload(0x920), mload(0x36c0), f_q)) - mstore(0x3700, addmod(mload(0xcc0), sub(f_q, mload(0xd00)), f_q)) - mstore(0x3720, mulmod(mload(0x3700), mload(0x27e0), f_q)) - mstore(0x3740, addmod(mload(0x36e0), mload(0x3720), f_q)) - mstore(0x3760, mulmod(mload(0x920), mload(0x3740), f_q)) - mstore(0x3780, mulmod(mload(0x3700), mload(0x3040), f_q)) - mstore(0x37a0, addmod(mload(0xcc0), sub(f_q, mload(0xce0)), f_q)) - mstore(0x37c0, mulmod(mload(0x37a0), mload(0x3780), f_q)) - mstore(0x37e0, addmod(mload(0x3760), mload(0x37c0), f_q)) - mstore(0x3800, mulmod(mload(0x11e0), mload(0x11e0), f_q)) - mstore(0x3820, mulmod(mload(0x3800), mload(0x11e0), f_q)) - mstore(0x3840, mulmod(mload(0x3820), mload(0x11e0), f_q)) - mstore(0x3860, mulmod(1, mload(0x11e0), f_q)) - mstore(0x3880, mulmod(1, mload(0x3800), f_q)) - mstore(0x38a0, mulmod(1, mload(0x3820), f_q)) - mstore(0x38c0, mulmod(mload(0x37e0), mload(0x1200), f_q)) - mstore(0x38e0, mulmod(mload(0xf40), mload(0xa80), f_q)) - mstore(0x3900, mulmod(mload(0x38e0), mload(0xa80), f_q)) - mstore( - 0x3920, - mulmod(mload(0xa80), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q) - ) - mstore(0x3940, addmod(mload(0xe40), sub(f_q, mload(0x3920)), f_q)) - mstore(0x3960, mulmod(mload(0xa80), 1, f_q)) - mstore(0x3980, addmod(mload(0xe40), sub(f_q, mload(0x3960)), f_q)) - mstore( - 0x39a0, - mulmod(mload(0xa80), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q) - ) - mstore(0x39c0, addmod(mload(0xe40), sub(f_q, mload(0x39a0)), f_q)) - mstore( - 0x39e0, - mulmod(mload(0xa80), 1426404432721484388505361748317961535523355871255605456897797744433766488507, f_q) - ) - mstore(0x3a00, addmod(mload(0xe40), sub(f_q, mload(0x39e0)), f_q)) - mstore( - 0x3a20, - mulmod(mload(0xa80), 12619617507853212586156872920672483948819476989779550311307282715684870266992, f_q) - ) - mstore(0x3a40, addmod(mload(0xe40), sub(f_q, mload(0x3a20)), f_q)) - mstore( - 0x3a60, - mulmod(3544324119167359571073009690693121464267965232733679586767649244433889388945, mload(0x38e0), f_q) - ) - mstore(0x3a80, mulmod(mload(0x3a60), 1, f_q)) - { - let result := mulmod(mload(0xe40), mload(0x3a60), f_q) - result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3a80)), f_q), result, f_q) - mstore(15008, result) - } - mstore( - 0x3ac0, - mulmod(3860370625838117017501327045244227871206764201116468958063324100051382735289, mload(0x38e0), f_q) - ) - mstore( - 0x3ae0, - mulmod( - mload(0x3ac0), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q - ) - ) - { - let result := mulmod(mload(0xe40), mload(0x3ac0), f_q) - result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3ae0)), f_q), result, f_q) - mstore(15104, result) - } - mstore( - 0x3b20, - mulmod( - 21616901807277407275624036604424346159916096890712898844034238973395610537327, mload(0x38e0), f_q - ) - ) - mstore( - 0x3b40, - mulmod(mload(0x3b20), 1426404432721484388505361748317961535523355871255605456897797744433766488507, f_q) - ) - { - let result := mulmod(mload(0xe40), mload(0x3b20), f_q) - result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3b40)), f_q), result, f_q) - mstore(15200, result) - } - mstore( - 0x3b80, - mulmod(3209408481237076479025468386201293941554240476766691830436732310949352383503, mload(0x38e0), f_q) - ) - mstore( - 0x3ba0, - mulmod( - mload(0x3b80), 12619617507853212586156872920672483948819476989779550311307282715684870266992, f_q - ) - ) - { - let result := mulmod(mload(0xe40), mload(0x3b80), f_q) - result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3ba0)), f_q), result, f_q) - mstore(15296, result) - } - mstore(0x3be0, mulmod(1, mload(0x3980), f_q)) - mstore(0x3c00, mulmod(mload(0x3be0), mload(0x39c0), f_q)) - mstore(0x3c20, mulmod(mload(0x3c00), mload(0x3a00), f_q)) - mstore(0x3c40, mulmod(mload(0x3c20), mload(0x3a40), f_q)) - mstore( - 0x3c60, - mulmod(10676941854703594198666993839846402519342119846958189386823924046696287912228, mload(0xa80), f_q) - ) - mstore(0x3c80, mulmod(mload(0x3c60), 1, f_q)) - { - let result := mulmod(mload(0xe40), mload(0x3c60), f_q) - result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3c80)), f_q), result, f_q) - mstore(15520, result) - } - mstore( - 0x3cc0, - mulmod(11211301017135681023579411905410872569206244553457844956874280139879520583389, mload(0xa80), f_q) - ) - mstore( - 0x3ce0, - mulmod( - mload(0x3cc0), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q - ) - ) - { - let result := mulmod(mload(0xe40), mload(0x3cc0), f_q) - result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3ce0)), f_q), result, f_q) - mstore(15616, result) - } - mstore( - 0x3d20, - mulmod(13154116519010929542673167886091370382741775939114889923107781597533678454430, mload(0xa80), f_q) - ) - mstore(0x3d40, mulmod(mload(0x3d20), 1, f_q)) - { - let result := mulmod(mload(0xe40), mload(0x3d20), f_q) - result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3d40)), f_q), result, f_q) - mstore(15712, result) - } - mstore( - 0x3d80, - mulmod(8734126352828345679573237859165904705806588461301144420590422589042130041187, mload(0xa80), f_q) - ) - mstore( - 0x3da0, - mulmod(mload(0x3d80), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q) - ) - { - let result := mulmod(mload(0xe40), mload(0x3d80), f_q) - result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3da0)), f_q), result, f_q) - mstore(15808, result) - } - mstore(0x3de0, mulmod(mload(0x3be0), mload(0x3940), f_q)) - { - let result := mulmod(mload(0xe40), 1, f_q) - result := - addmod( - mulmod( - mload(0xa80), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q - ), - result, - f_q - ) - mstore(15872, result) - } - { - let prod := mload(0x3aa0) + + } +mstore(0x2700, mulmod(mload(0x1240), mload(0x1260), f_q)) +mstore(0x2720, mulmod(mload(0x1280), mload(0x12a0), f_q)) +mstore(0x2740, mulmod(mload(0x12c0), mload(0x12e0), f_q)) +mstore(0x2760, mulmod(mload(0x1300), mload(0x1320), f_q)) +mstore(0x2780, mulmod(mload(0x1340), mload(0x1360), f_q)) +mstore(0x27a0, mulmod(mload(0x1380), mload(0x13a0), f_q)) +mstore(0x27c0, mulmod(mload(0x13c0), mload(0x13e0), f_q)) +mstore(0x27e0, mulmod(mload(0x1400), mload(0x1420), f_q)) +mstore(0x2800, mulmod(mload(0x1440), mload(0x1460), f_q)) +mstore(0x2820, mulmod(mload(0x1480), mload(0x14a0), f_q)) +mstore(0x2840, mulmod(mload(0x14c0), mload(0x14e0), f_q)) +mstore(0x2860, mulmod(mload(0x1500), mload(0x1520), f_q)) +mstore(0x2880, mulmod(mload(0x1540), mload(0x1560), f_q)) +mstore(0x28a0, mulmod(mload(0x1580), mload(0x15a0), f_q)) +mstore(0x28c0, mulmod(mload(0x15c0), mload(0x15e0), f_q)) +mstore(0x28e0, mulmod(mload(0x1600), mload(0x1620), f_q)) +mstore(0x2900, mulmod(mload(0x1640), mload(0x1660), f_q)) +mstore(0x2920, mulmod(mload(0x1680), mload(0x16a0), f_q)) +mstore(0x2940, mulmod(mload(0x16c0), mload(0x16e0), f_q)) +mstore(0x2960, mulmod(mload(0x1700), mload(0x1720), f_q)) +mstore(0x2980, mulmod(mload(0x1740), mload(0x1760), f_q)) +mstore(0x29a0, mulmod(mload(0x1780), mload(0x17a0), f_q)) +mstore(0x29c0, mulmod(mload(0x17c0), mload(0x17e0), f_q)) +mstore(0x29e0, mulmod(mload(0x1800), mload(0x1820), f_q)) +mstore(0x2a00, mulmod(mload(0x1840), mload(0x1860), f_q)) +mstore(0x2a20, mulmod(mload(0x1880), mload(0x18a0), f_q)) +mstore(0x2a40, mulmod(mload(0x18c0), mload(0x18e0), f_q)) +mstore(0x2a60, mulmod(mload(0x1900), mload(0x1920), f_q)) +mstore(0x2a80, mulmod(mload(0x1940), mload(0x1960), f_q)) +mstore(0x2aa0, mulmod(mload(0x1980), mload(0x19a0), f_q)) +mstore(0x2ac0, mulmod(mload(0x19c0), mload(0x19e0), f_q)) +mstore(0x2ae0, mulmod(mload(0x1a00), mload(0x1a20), f_q)) +mstore(0x2b00, mulmod(mload(0x1a40), mload(0x1a60), f_q)) +mstore(0x2b20, mulmod(mload(0x1a80), mload(0x1aa0), f_q)) +mstore(0x2b40, mulmod(mload(0x1ac0), mload(0x1ae0), f_q)) +mstore(0x2b60, mulmod(mload(0x1b00), mload(0x1b20), f_q)) +mstore(0x2b80, mulmod(mload(0x1b40), mload(0x1b60), f_q)) +mstore(0x2ba0, mulmod(mload(0x1b80), mload(0x1ba0), f_q)) +mstore(0x2bc0, mulmod(mload(0x1bc0), mload(0x1be0), f_q)) +mstore(0x2be0, mulmod(mload(0x1c00), mload(0x1c20), f_q)) +mstore(0x2c00, mulmod(mload(0x1c40), mload(0x1c60), f_q)) +mstore(0x2c20, mulmod(mload(0x1c80), mload(0x1ca0), f_q)) +mstore(0x2c40, mulmod(mload(0x1cc0), mload(0x1ce0), f_q)) +mstore(0x2c60, mulmod(mload(0x1d00), mload(0x1d20), f_q)) +mstore(0x2c80, mulmod(mload(0x1d40), mload(0x1d60), f_q)) +mstore(0x2ca0, mulmod(mload(0x1d80), mload(0x1da0), f_q)) +mstore(0x2cc0, mulmod(mload(0x1dc0), mload(0x1de0), f_q)) +mstore(0x2ce0, mulmod(mload(0x1e00), mload(0x1e20), f_q)) +mstore(0x2d00, mulmod(mload(0x1e40), mload(0x1e60), f_q)) +mstore(0x2d20, mulmod(mload(0x1e80), mload(0x1ea0), f_q)) +mstore(0x2d40, mulmod(mload(0x1ec0), mload(0x1ee0), f_q)) +mstore(0x2d60, mulmod(mload(0x1f00), mload(0x1f20), f_q)) +mstore(0x2d80, mulmod(mload(0x1f40), mload(0x1f60), f_q)) +{ + let result := mulmod(mload(0x27e0), mload(0xa0), f_q) +result := addmod(mulmod(mload(0x2800), mload(0xc0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2820), mload(0xe0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2840), mload(0x100), f_q), result, f_q) +result := addmod(mulmod(mload(0x2860), mload(0x120), f_q), result, f_q) +result := addmod(mulmod(mload(0x2880), mload(0x140), f_q), result, f_q) +result := addmod(mulmod(mload(0x28a0), mload(0x160), f_q), result, f_q) +result := addmod(mulmod(mload(0x28c0), mload(0x180), f_q), result, f_q) +result := addmod(mulmod(mload(0x28e0), mload(0x1a0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2900), mload(0x1c0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2920), mload(0x1e0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2940), mload(0x200), f_q), result, f_q) +result := addmod(mulmod(mload(0x2960), mload(0x220), f_q), result, f_q) +result := addmod(mulmod(mload(0x2980), mload(0x240), f_q), result, f_q) +result := addmod(mulmod(mload(0x29a0), mload(0x260), f_q), result, f_q) +result := addmod(mulmod(mload(0x29c0), mload(0x280), f_q), result, f_q) +result := addmod(mulmod(mload(0x29e0), mload(0x2a0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2a00), mload(0x2c0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2a20), mload(0x2e0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2a40), mload(0x300), f_q), result, f_q) +result := addmod(mulmod(mload(0x2a60), mload(0x320), f_q), result, f_q) +result := addmod(mulmod(mload(0x2a80), mload(0x340), f_q), result, f_q) +result := addmod(mulmod(mload(0x2aa0), mload(0x360), f_q), result, f_q) +result := addmod(mulmod(mload(0x2ac0), mload(0x380), f_q), result, f_q) +result := addmod(mulmod(mload(0x2ae0), mload(0x3a0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2b00), mload(0x3c0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2b20), mload(0x3e0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2b40), mload(0x400), f_q), result, f_q) +result := addmod(mulmod(mload(0x2b60), mload(0x420), f_q), result, f_q) +result := addmod(mulmod(mload(0x2b80), mload(0x440), f_q), result, f_q) +result := addmod(mulmod(mload(0x2ba0), mload(0x460), f_q), result, f_q) +result := addmod(mulmod(mload(0x2bc0), mload(0x480), f_q), result, f_q) +result := addmod(mulmod(mload(0x2be0), mload(0x4a0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2c00), mload(0x4c0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2c20), mload(0x4e0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2c40), mload(0x500), f_q), result, f_q) +result := addmod(mulmod(mload(0x2c60), mload(0x520), f_q), result, f_q) +result := addmod(mulmod(mload(0x2c80), mload(0x540), f_q), result, f_q) +result := addmod(mulmod(mload(0x2ca0), mload(0x560), f_q), result, f_q) +result := addmod(mulmod(mload(0x2cc0), mload(0x580), f_q), result, f_q) +result := addmod(mulmod(mload(0x2ce0), mload(0x5a0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2d00), mload(0x5c0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2d20), mload(0x5e0), f_q), result, f_q) +result := addmod(mulmod(mload(0x2d40), mload(0x600), f_q), result, f_q) +result := addmod(mulmod(mload(0x2d60), mload(0x620), f_q), result, f_q) +result := addmod(mulmod(mload(0x2d80), mload(0x640), f_q), result, f_q) +mstore(11680, result) + } +mstore(0x2dc0, mulmod(mload(0xb00), mload(0xae0), f_q)) +mstore(0x2de0, addmod(mload(0xac0), mload(0x2dc0), f_q)) +mstore(0x2e00, addmod(mload(0x2de0), sub(f_q, mload(0xb20)), f_q)) +mstore(0x2e20, mulmod(mload(0x2e00), mload(0xb80), f_q)) +mstore(0x2e40, mulmod(mload(0x920), mload(0x2e20), f_q)) +mstore(0x2e60, addmod(1, sub(f_q, mload(0xc40)), f_q)) +mstore(0x2e80, mulmod(mload(0x2e60), mload(0x27e0), f_q)) +mstore(0x2ea0, addmod(mload(0x2e40), mload(0x2e80), f_q)) +mstore(0x2ec0, mulmod(mload(0x920), mload(0x2ea0), f_q)) +mstore(0x2ee0, mulmod(mload(0xc40), mload(0xc40), f_q)) +mstore(0x2f00, addmod(mload(0x2ee0), sub(f_q, mload(0xc40)), f_q)) +mstore(0x2f20, mulmod(mload(0x2f00), mload(0x2700), f_q)) +mstore(0x2f40, addmod(mload(0x2ec0), mload(0x2f20), f_q)) +mstore(0x2f60, mulmod(mload(0x920), mload(0x2f40), f_q)) +mstore(0x2f80, addmod(1, sub(f_q, mload(0x2700)), f_q)) +mstore(0x2fa0, addmod(mload(0x2720), mload(0x2740), f_q)) +mstore(0x2fc0, addmod(mload(0x2fa0), mload(0x2760), f_q)) +mstore(0x2fe0, addmod(mload(0x2fc0), mload(0x2780), f_q)) +mstore(0x3000, addmod(mload(0x2fe0), mload(0x27a0), f_q)) +mstore(0x3020, addmod(mload(0x3000), mload(0x27c0), f_q)) +mstore(0x3040, addmod(mload(0x2f80), sub(f_q, mload(0x3020)), f_q)) +mstore(0x3060, mulmod(mload(0xbe0), mload(0x7a0), f_q)) +mstore(0x3080, addmod(mload(0xb40), mload(0x3060), f_q)) +mstore(0x30a0, addmod(mload(0x3080), mload(0x800), f_q)) +mstore(0x30c0, mulmod(mload(0xc00), mload(0x7a0), f_q)) +mstore(0x30e0, addmod(mload(0xac0), mload(0x30c0), f_q)) +mstore(0x3100, addmod(mload(0x30e0), mload(0x800), f_q)) +mstore(0x3120, mulmod(mload(0x3100), mload(0x30a0), f_q)) +mstore(0x3140, mulmod(mload(0xc20), mload(0x7a0), f_q)) +mstore(0x3160, addmod(mload(0x2da0), mload(0x3140), f_q)) +mstore(0x3180, addmod(mload(0x3160), mload(0x800), f_q)) +mstore(0x31a0, mulmod(mload(0x3180), mload(0x3120), f_q)) +mstore(0x31c0, mulmod(mload(0x31a0), mload(0xc60), f_q)) +mstore(0x31e0, mulmod(1, mload(0x7a0), f_q)) +mstore(0x3200, mulmod(mload(0xa80), mload(0x31e0), f_q)) +mstore(0x3220, addmod(mload(0xb40), mload(0x3200), f_q)) +mstore(0x3240, addmod(mload(0x3220), mload(0x800), f_q)) +mstore(0x3260, mulmod(4131629893567559867359510883348571134090853742863529169391034518566172092834, mload(0x7a0), f_q)) +mstore(0x3280, mulmod(mload(0xa80), mload(0x3260), f_q)) +mstore(0x32a0, addmod(mload(0xac0), mload(0x3280), f_q)) +mstore(0x32c0, addmod(mload(0x32a0), mload(0x800), f_q)) +mstore(0x32e0, mulmod(mload(0x32c0), mload(0x3240), f_q)) +mstore(0x3300, mulmod(8910878055287538404433155982483128285667088683464058436815641868457422632747, mload(0x7a0), f_q)) +mstore(0x3320, mulmod(mload(0xa80), mload(0x3300), f_q)) +mstore(0x3340, addmod(mload(0x2da0), mload(0x3320), f_q)) +mstore(0x3360, addmod(mload(0x3340), mload(0x800), f_q)) +mstore(0x3380, mulmod(mload(0x3360), mload(0x32e0), f_q)) +mstore(0x33a0, mulmod(mload(0x3380), mload(0xc40), f_q)) +mstore(0x33c0, addmod(mload(0x31c0), sub(f_q, mload(0x33a0)), f_q)) +mstore(0x33e0, mulmod(mload(0x33c0), mload(0x3040), f_q)) +mstore(0x3400, addmod(mload(0x2f60), mload(0x33e0), f_q)) +mstore(0x3420, mulmod(mload(0x920), mload(0x3400), f_q)) +mstore(0x3440, addmod(1, sub(f_q, mload(0xc80)), f_q)) +mstore(0x3460, mulmod(mload(0x3440), mload(0x27e0), f_q)) +mstore(0x3480, addmod(mload(0x3420), mload(0x3460), f_q)) +mstore(0x34a0, mulmod(mload(0x920), mload(0x3480), f_q)) +mstore(0x34c0, mulmod(mload(0xc80), mload(0xc80), f_q)) +mstore(0x34e0, addmod(mload(0x34c0), sub(f_q, mload(0xc80)), f_q)) +mstore(0x3500, mulmod(mload(0x34e0), mload(0x2700), f_q)) +mstore(0x3520, addmod(mload(0x34a0), mload(0x3500), f_q)) +mstore(0x3540, mulmod(mload(0x920), mload(0x3520), f_q)) +mstore(0x3560, addmod(mload(0xcc0), mload(0x7a0), f_q)) +mstore(0x3580, mulmod(mload(0x3560), mload(0xca0), f_q)) +mstore(0x35a0, addmod(mload(0xd00), mload(0x800), f_q)) +mstore(0x35c0, mulmod(mload(0x35a0), mload(0x3580), f_q)) +mstore(0x35e0, mulmod(mload(0xac0), mload(0xba0), f_q)) +mstore(0x3600, addmod(mload(0x35e0), mload(0x7a0), f_q)) +mstore(0x3620, mulmod(mload(0x3600), mload(0xc80), f_q)) +mstore(0x3640, addmod(mload(0xb60), mload(0x800), f_q)) +mstore(0x3660, mulmod(mload(0x3640), mload(0x3620), f_q)) +mstore(0x3680, addmod(mload(0x35c0), sub(f_q, mload(0x3660)), f_q)) +mstore(0x36a0, mulmod(mload(0x3680), mload(0x3040), f_q)) +mstore(0x36c0, addmod(mload(0x3540), mload(0x36a0), f_q)) +mstore(0x36e0, mulmod(mload(0x920), mload(0x36c0), f_q)) +mstore(0x3700, addmod(mload(0xcc0), sub(f_q, mload(0xd00)), f_q)) +mstore(0x3720, mulmod(mload(0x3700), mload(0x27e0), f_q)) +mstore(0x3740, addmod(mload(0x36e0), mload(0x3720), f_q)) +mstore(0x3760, mulmod(mload(0x920), mload(0x3740), f_q)) +mstore(0x3780, mulmod(mload(0x3700), mload(0x3040), f_q)) +mstore(0x37a0, addmod(mload(0xcc0), sub(f_q, mload(0xce0)), f_q)) +mstore(0x37c0, mulmod(mload(0x37a0), mload(0x3780), f_q)) +mstore(0x37e0, addmod(mload(0x3760), mload(0x37c0), f_q)) +mstore(0x3800, mulmod(mload(0x11e0), mload(0x11e0), f_q)) +mstore(0x3820, mulmod(mload(0x3800), mload(0x11e0), f_q)) +mstore(0x3840, mulmod(mload(0x3820), mload(0x11e0), f_q)) +mstore(0x3860, mulmod(1, mload(0x11e0), f_q)) +mstore(0x3880, mulmod(1, mload(0x3800), f_q)) +mstore(0x38a0, mulmod(1, mload(0x3820), f_q)) +mstore(0x38c0, mulmod(mload(0x37e0), mload(0x1200), f_q)) +mstore(0x38e0, mulmod(mload(0xf40), mload(0xa80), f_q)) +mstore(0x3900, mulmod(mload(0x38e0), mload(0xa80), f_q)) +mstore(0x3920, mulmod(mload(0xa80), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q)) +mstore(0x3940, addmod(mload(0xe40), sub(f_q, mload(0x3920)), f_q)) +mstore(0x3960, mulmod(mload(0xa80), 1, f_q)) +mstore(0x3980, addmod(mload(0xe40), sub(f_q, mload(0x3960)), f_q)) +mstore(0x39a0, mulmod(mload(0xa80), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q)) +mstore(0x39c0, addmod(mload(0xe40), sub(f_q, mload(0x39a0)), f_q)) +mstore(0x39e0, mulmod(mload(0xa80), 1426404432721484388505361748317961535523355871255605456897797744433766488507, f_q)) +mstore(0x3a00, addmod(mload(0xe40), sub(f_q, mload(0x39e0)), f_q)) +mstore(0x3a20, mulmod(mload(0xa80), 12619617507853212586156872920672483948819476989779550311307282715684870266992, f_q)) +mstore(0x3a40, addmod(mload(0xe40), sub(f_q, mload(0x3a20)), f_q)) +mstore(0x3a60, mulmod(3544324119167359571073009690693121464267965232733679586767649244433889388945, mload(0x38e0), f_q)) +mstore(0x3a80, mulmod(mload(0x3a60), 1, f_q)) +{ + let result := mulmod(mload(0xe40), mload(0x3a60), f_q) +result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3a80)), f_q), result, f_q) +mstore(15008, result) + } +mstore(0x3ac0, mulmod(3860370625838117017501327045244227871206764201116468958063324100051382735289, mload(0x38e0), f_q)) +mstore(0x3ae0, mulmod(mload(0x3ac0), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q)) +{ + let result := mulmod(mload(0xe40), mload(0x3ac0), f_q) +result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3ae0)), f_q), result, f_q) +mstore(15104, result) + } +mstore(0x3b20, mulmod(21616901807277407275624036604424346159916096890712898844034238973395610537327, mload(0x38e0), f_q)) +mstore(0x3b40, mulmod(mload(0x3b20), 1426404432721484388505361748317961535523355871255605456897797744433766488507, f_q)) +{ + let result := mulmod(mload(0xe40), mload(0x3b20), f_q) +result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3b40)), f_q), result, f_q) +mstore(15200, result) + } +mstore(0x3b80, mulmod(3209408481237076479025468386201293941554240476766691830436732310949352383503, mload(0x38e0), f_q)) +mstore(0x3ba0, mulmod(mload(0x3b80), 12619617507853212586156872920672483948819476989779550311307282715684870266992, f_q)) +{ + let result := mulmod(mload(0xe40), mload(0x3b80), f_q) +result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3ba0)), f_q), result, f_q) +mstore(15296, result) + } +mstore(0x3be0, mulmod(1, mload(0x3980), f_q)) +mstore(0x3c00, mulmod(mload(0x3be0), mload(0x39c0), f_q)) +mstore(0x3c20, mulmod(mload(0x3c00), mload(0x3a00), f_q)) +mstore(0x3c40, mulmod(mload(0x3c20), mload(0x3a40), f_q)) +mstore(0x3c60, mulmod(10676941854703594198666993839846402519342119846958189386823924046696287912228, mload(0xa80), f_q)) +mstore(0x3c80, mulmod(mload(0x3c60), 1, f_q)) +{ + let result := mulmod(mload(0xe40), mload(0x3c60), f_q) +result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3c80)), f_q), result, f_q) +mstore(15520, result) + } +mstore(0x3cc0, mulmod(11211301017135681023579411905410872569206244553457844956874280139879520583389, mload(0xa80), f_q)) +mstore(0x3ce0, mulmod(mload(0x3cc0), 11211301017135681023579411905410872569206244553457844956874280139879520583390, f_q)) +{ + let result := mulmod(mload(0xe40), mload(0x3cc0), f_q) +result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3ce0)), f_q), result, f_q) +mstore(15616, result) + } +mstore(0x3d20, mulmod(13154116519010929542673167886091370382741775939114889923107781597533678454430, mload(0xa80), f_q)) +mstore(0x3d40, mulmod(mload(0x3d20), 1, f_q)) +{ + let result := mulmod(mload(0xe40), mload(0x3d20), f_q) +result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3d40)), f_q), result, f_q) +mstore(15712, result) + } +mstore(0x3d80, mulmod(8734126352828345679573237859165904705806588461301144420590422589042130041187, mload(0xa80), f_q)) +mstore(0x3da0, mulmod(mload(0x3d80), 8734126352828345679573237859165904705806588461301144420590422589042130041188, f_q)) +{ + let result := mulmod(mload(0xe40), mload(0x3d80), f_q) +result := addmod(mulmod(mload(0xa80), sub(f_q, mload(0x3da0)), f_q), result, f_q) +mstore(15808, result) + } +mstore(0x3de0, mulmod(mload(0x3be0), mload(0x3940), f_q)) +{ + let result := mulmod(mload(0xe40), 1, f_q) +result := addmod(mulmod(mload(0xa80), 21888242871839275222246405745257275088548364400416034343698204186575808495616, f_q), result, f_q) +mstore(15872, result) + } +{ + let prod := mload(0x3aa0) prod := mulmod(mload(0x3b00), prod, f_q) mstore(0x3e20, prod) - + prod := mulmod(mload(0x3b60), prod, f_q) mstore(0x3e40, prod) - + prod := mulmod(mload(0x3bc0), prod, f_q) mstore(0x3e60, prod) - + prod := mulmod(mload(0x3ca0), prod, f_q) mstore(0x3e80, prod) - + prod := mulmod(mload(0x3d00), prod, f_q) mstore(0x3ea0, prod) - + prod := mulmod(mload(0x3c00), prod, f_q) mstore(0x3ec0, prod) - + prod := mulmod(mload(0x3d60), prod, f_q) mstore(0x3ee0, prod) - + prod := mulmod(mload(0x3dc0), prod, f_q) mstore(0x3f00, prod) - + prod := mulmod(mload(0x3de0), prod, f_q) mstore(0x3f20, prod) - + prod := mulmod(mload(0x3e00), prod, f_q) mstore(0x3f40, prod) - + prod := mulmod(mload(0x3be0), prod, f_q) mstore(0x3f60, prod) - } - mstore(0x3fa0, 32) - mstore(0x3fc0, 32) - mstore(0x3fe0, 32) - mstore(0x4000, mload(0x3f60)) - mstore(0x4020, 21888242871839275222246405745257275088548364400416034343698204186575808495615) - mstore(0x4040, 21888242871839275222246405745257275088548364400416034343698204186575808495617) - success := and(eq(staticcall(gas(), 0x5, 0x3fa0, 0xc0, 0x3f80, 0x20), 1), success) - { - let inv := mload(0x3f80) - let v - - v := mload(0x3be0) - mstore(15328, mulmod(mload(0x3f40), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x3e00) - mstore(15872, mulmod(mload(0x3f20), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x3de0) - mstore(15840, mulmod(mload(0x3f00), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x3dc0) - mstore(15808, mulmod(mload(0x3ee0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x3d60) - mstore(15712, mulmod(mload(0x3ec0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x3c00) - mstore(15360, mulmod(mload(0x3ea0), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x3d00) - mstore(15616, mulmod(mload(0x3e80), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x3ca0) - mstore(15520, mulmod(mload(0x3e60), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x3bc0) - mstore(15296, mulmod(mload(0x3e40), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x3b60) - mstore(15200, mulmod(mload(0x3e20), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x3b00) - mstore(15104, mulmod(mload(0x3aa0), inv, f_q)) - inv := mulmod(v, inv, f_q) + + } +mstore(0x3fa0, 32) +mstore(0x3fc0, 32) +mstore(0x3fe0, 32) +mstore(0x4000, mload(0x3f60)) +mstore(0x4020, 21888242871839275222246405745257275088548364400416034343698204186575808495615) +mstore(0x4040, 21888242871839275222246405745257275088548364400416034343698204186575808495617) +success := and(eq(staticcall(gas(), 0x5, 0x3fa0, 0xc0, 0x3f80, 0x20), 1), success) +{ + + let inv := mload(0x3f80) + let v + + v := mload(0x3be0) + mstore(15328, mulmod(mload(0x3f40), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3e00) + mstore(15872, mulmod(mload(0x3f20), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3de0) + mstore(15840, mulmod(mload(0x3f00), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3dc0) + mstore(15808, mulmod(mload(0x3ee0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3d60) + mstore(15712, mulmod(mload(0x3ec0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3c00) + mstore(15360, mulmod(mload(0x3ea0), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3d00) + mstore(15616, mulmod(mload(0x3e80), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3ca0) + mstore(15520, mulmod(mload(0x3e60), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3bc0) + mstore(15296, mulmod(mload(0x3e40), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3b60) + mstore(15200, mulmod(mload(0x3e20), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x3b00) + mstore(15104, mulmod(mload(0x3aa0), inv, f_q)) + inv := mulmod(v, inv, f_q) mstore(0x3aa0, inv) - } - { - let result := mload(0x3aa0) - result := addmod(mload(0x3b00), result, f_q) - result := addmod(mload(0x3b60), result, f_q) - result := addmod(mload(0x3bc0), result, f_q) - mstore(16480, result) - } - mstore(0x4080, mulmod(mload(0x3c40), mload(0x3c00), f_q)) - { - let result := mload(0x3ca0) - result := addmod(mload(0x3d00), result, f_q) - mstore(16544, result) - } - mstore(0x40c0, mulmod(mload(0x3c40), mload(0x3de0), f_q)) - { - let result := mload(0x3d60) - result := addmod(mload(0x3dc0), result, f_q) - mstore(16608, result) - } - mstore(0x4100, mulmod(mload(0x3c40), mload(0x3be0), f_q)) - { - let result := mload(0x3e00) - mstore(16672, result) - } - { - let prod := mload(0x4060) + + } +{ + let result := mload(0x3aa0) +result := addmod(mload(0x3b00), result, f_q) +result := addmod(mload(0x3b60), result, f_q) +result := addmod(mload(0x3bc0), result, f_q) +mstore(16480, result) + } +mstore(0x4080, mulmod(mload(0x3c40), mload(0x3c00), f_q)) +{ + let result := mload(0x3ca0) +result := addmod(mload(0x3d00), result, f_q) +mstore(16544, result) + } +mstore(0x40c0, mulmod(mload(0x3c40), mload(0x3de0), f_q)) +{ + let result := mload(0x3d60) +result := addmod(mload(0x3dc0), result, f_q) +mstore(16608, result) + } +mstore(0x4100, mulmod(mload(0x3c40), mload(0x3be0), f_q)) +{ + let result := mload(0x3e00) +mstore(16672, result) + } +{ + let prod := mload(0x4060) prod := mulmod(mload(0x40a0), prod, f_q) mstore(0x4140, prod) - + prod := mulmod(mload(0x40e0), prod, f_q) mstore(0x4160, prod) - + prod := mulmod(mload(0x4120), prod, f_q) mstore(0x4180, prod) - } - mstore(0x41c0, 32) - mstore(0x41e0, 32) - mstore(0x4200, 32) - mstore(0x4220, mload(0x4180)) - mstore(0x4240, 21888242871839275222246405745257275088548364400416034343698204186575808495615) - mstore(0x4260, 21888242871839275222246405745257275088548364400416034343698204186575808495617) - success := and(eq(staticcall(gas(), 0x5, 0x41c0, 0xc0, 0x41a0, 0x20), 1), success) - { - let inv := mload(0x41a0) - let v - - v := mload(0x4120) - mstore(16672, mulmod(mload(0x4160), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x40e0) - mstore(16608, mulmod(mload(0x4140), inv, f_q)) - inv := mulmod(v, inv, f_q) - - v := mload(0x40a0) - mstore(16544, mulmod(mload(0x4060), inv, f_q)) - inv := mulmod(v, inv, f_q) + + } +mstore(0x41c0, 32) +mstore(0x41e0, 32) +mstore(0x4200, 32) +mstore(0x4220, mload(0x4180)) +mstore(0x4240, 21888242871839275222246405745257275088548364400416034343698204186575808495615) +mstore(0x4260, 21888242871839275222246405745257275088548364400416034343698204186575808495617) +success := and(eq(staticcall(gas(), 0x5, 0x41c0, 0xc0, 0x41a0, 0x20), 1), success) +{ + + let inv := mload(0x41a0) + let v + + v := mload(0x4120) + mstore(16672, mulmod(mload(0x4160), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x40e0) + mstore(16608, mulmod(mload(0x4140), inv, f_q)) + inv := mulmod(v, inv, f_q) + + v := mload(0x40a0) + mstore(16544, mulmod(mload(0x4060), inv, f_q)) + inv := mulmod(v, inv, f_q) mstore(0x4060, inv) - } - mstore(0x4280, mulmod(mload(0x4080), mload(0x40a0), f_q)) - mstore(0x42a0, mulmod(mload(0x40c0), mload(0x40e0), f_q)) - mstore(0x42c0, mulmod(mload(0x4100), mload(0x4120), f_q)) - mstore(0x42e0, mulmod(mload(0xd40), mload(0xd40), f_q)) - mstore(0x4300, mulmod(mload(0x42e0), mload(0xd40), f_q)) - mstore(0x4320, mulmod(mload(0x4300), mload(0xd40), f_q)) - mstore(0x4340, mulmod(mload(0x4320), mload(0xd40), f_q)) - mstore(0x4360, mulmod(mload(0x4340), mload(0xd40), f_q)) - mstore(0x4380, mulmod(mload(0x4360), mload(0xd40), f_q)) - mstore(0x43a0, mulmod(mload(0x4380), mload(0xd40), f_q)) - mstore(0x43c0, mulmod(mload(0x43a0), mload(0xd40), f_q)) - mstore(0x43e0, mulmod(mload(0x43c0), mload(0xd40), f_q)) - mstore(0x4400, mulmod(mload(0xda0), mload(0xda0), f_q)) - mstore(0x4420, mulmod(mload(0x4400), mload(0xda0), f_q)) - mstore(0x4440, mulmod(mload(0x4420), mload(0xda0), f_q)) - { - let result := mulmod(mload(0xac0), mload(0x3aa0), f_q) - result := addmod(mulmod(mload(0xae0), mload(0x3b00), f_q), result, f_q) - result := addmod(mulmod(mload(0xb00), mload(0x3b60), f_q), result, f_q) - result := addmod(mulmod(mload(0xb20), mload(0x3bc0), f_q), result, f_q) - mstore(17504, result) - } - mstore(0x4480, mulmod(mload(0x4460), mload(0x4060), f_q)) - mstore(0x44a0, mulmod(sub(f_q, mload(0x4480)), 1, f_q)) - mstore(0x44c0, mulmod(mload(0x44a0), 1, f_q)) - mstore(0x44e0, mulmod(1, mload(0x4080), f_q)) - { - let result := mulmod(mload(0xc40), mload(0x3ca0), f_q) - result := addmod(mulmod(mload(0xc60), mload(0x3d00), f_q), result, f_q) - mstore(17664, result) - } - mstore(0x4520, mulmod(mload(0x4500), mload(0x4280), f_q)) - mstore(0x4540, mulmod(sub(f_q, mload(0x4520)), 1, f_q)) - mstore(0x4560, mulmod(mload(0x44e0), 1, f_q)) - { - let result := mulmod(mload(0xc80), mload(0x3ca0), f_q) - result := addmod(mulmod(mload(0xca0), mload(0x3d00), f_q), result, f_q) - mstore(17792, result) - } - mstore(0x45a0, mulmod(mload(0x4580), mload(0x4280), f_q)) - mstore(0x45c0, mulmod(sub(f_q, mload(0x45a0)), mload(0xd40), f_q)) - mstore(0x45e0, mulmod(mload(0x44e0), mload(0xd40), f_q)) - mstore(0x4600, addmod(mload(0x4540), mload(0x45c0), f_q)) - mstore(0x4620, mulmod(mload(0x4600), mload(0xda0), f_q)) - mstore(0x4640, mulmod(mload(0x4560), mload(0xda0), f_q)) - mstore(0x4660, mulmod(mload(0x45e0), mload(0xda0), f_q)) - mstore(0x4680, addmod(mload(0x44c0), mload(0x4620), f_q)) - mstore(0x46a0, mulmod(1, mload(0x40c0), f_q)) - { - let result := mulmod(mload(0xcc0), mload(0x3d60), f_q) - result := addmod(mulmod(mload(0xce0), mload(0x3dc0), f_q), result, f_q) - mstore(18112, result) - } - mstore(0x46e0, mulmod(mload(0x46c0), mload(0x42a0), f_q)) - mstore(0x4700, mulmod(sub(f_q, mload(0x46e0)), 1, f_q)) - mstore(0x4720, mulmod(mload(0x46a0), 1, f_q)) - mstore(0x4740, mulmod(mload(0x4700), mload(0x4400), f_q)) - mstore(0x4760, mulmod(mload(0x4720), mload(0x4400), f_q)) - mstore(0x4780, addmod(mload(0x4680), mload(0x4740), f_q)) - mstore(0x47a0, mulmod(1, mload(0x4100), f_q)) - { - let result := mulmod(mload(0xd00), mload(0x3e00), f_q) - mstore(18368, result) - } - mstore(0x47e0, mulmod(mload(0x47c0), mload(0x42c0), f_q)) - mstore(0x4800, mulmod(sub(f_q, mload(0x47e0)), 1, f_q)) - mstore(0x4820, mulmod(mload(0x47a0), 1, f_q)) - { - let result := mulmod(mload(0xb40), mload(0x3e00), f_q) - mstore(18496, result) - } - mstore(0x4860, mulmod(mload(0x4840), mload(0x42c0), f_q)) - mstore(0x4880, mulmod(sub(f_q, mload(0x4860)), mload(0xd40), f_q)) - mstore(0x48a0, mulmod(mload(0x47a0), mload(0xd40), f_q)) - mstore(0x48c0, addmod(mload(0x4800), mload(0x4880), f_q)) - { - let result := mulmod(mload(0xb60), mload(0x3e00), f_q) - mstore(18656, result) - } - mstore(0x4900, mulmod(mload(0x48e0), mload(0x42c0), f_q)) - mstore(0x4920, mulmod(sub(f_q, mload(0x4900)), mload(0x42e0), f_q)) - mstore(0x4940, mulmod(mload(0x47a0), mload(0x42e0), f_q)) - mstore(0x4960, addmod(mload(0x48c0), mload(0x4920), f_q)) - { - let result := mulmod(mload(0xb80), mload(0x3e00), f_q) - mstore(18816, result) - } - mstore(0x49a0, mulmod(mload(0x4980), mload(0x42c0), f_q)) - mstore(0x49c0, mulmod(sub(f_q, mload(0x49a0)), mload(0x4300), f_q)) - mstore(0x49e0, mulmod(mload(0x47a0), mload(0x4300), f_q)) - mstore(0x4a00, addmod(mload(0x4960), mload(0x49c0), f_q)) - { - let result := mulmod(mload(0xba0), mload(0x3e00), f_q) - mstore(18976, result) - } - mstore(0x4a40, mulmod(mload(0x4a20), mload(0x42c0), f_q)) - mstore(0x4a60, mulmod(sub(f_q, mload(0x4a40)), mload(0x4320), f_q)) - mstore(0x4a80, mulmod(mload(0x47a0), mload(0x4320), f_q)) - mstore(0x4aa0, addmod(mload(0x4a00), mload(0x4a60), f_q)) - { - let result := mulmod(mload(0xbe0), mload(0x3e00), f_q) - mstore(19136, result) - } - mstore(0x4ae0, mulmod(mload(0x4ac0), mload(0x42c0), f_q)) - mstore(0x4b00, mulmod(sub(f_q, mload(0x4ae0)), mload(0x4340), f_q)) - mstore(0x4b20, mulmod(mload(0x47a0), mload(0x4340), f_q)) - mstore(0x4b40, addmod(mload(0x4aa0), mload(0x4b00), f_q)) - { - let result := mulmod(mload(0xc00), mload(0x3e00), f_q) - mstore(19296, result) - } - mstore(0x4b80, mulmod(mload(0x4b60), mload(0x42c0), f_q)) - mstore(0x4ba0, mulmod(sub(f_q, mload(0x4b80)), mload(0x4360), f_q)) - mstore(0x4bc0, mulmod(mload(0x47a0), mload(0x4360), f_q)) - mstore(0x4be0, addmod(mload(0x4b40), mload(0x4ba0), f_q)) - { - let result := mulmod(mload(0xc20), mload(0x3e00), f_q) - mstore(19456, result) - } - mstore(0x4c20, mulmod(mload(0x4c00), mload(0x42c0), f_q)) - mstore(0x4c40, mulmod(sub(f_q, mload(0x4c20)), mload(0x4380), f_q)) - mstore(0x4c60, mulmod(mload(0x47a0), mload(0x4380), f_q)) - mstore(0x4c80, addmod(mload(0x4be0), mload(0x4c40), f_q)) - mstore(0x4ca0, mulmod(mload(0x3860), mload(0x4100), f_q)) - mstore(0x4cc0, mulmod(mload(0x3880), mload(0x4100), f_q)) - mstore(0x4ce0, mulmod(mload(0x38a0), mload(0x4100), f_q)) - { - let result := mulmod(mload(0x38c0), mload(0x3e00), f_q) - mstore(19712, result) - } - mstore(0x4d20, mulmod(mload(0x4d00), mload(0x42c0), f_q)) - mstore(0x4d40, mulmod(sub(f_q, mload(0x4d20)), mload(0x43a0), f_q)) - mstore(0x4d60, mulmod(mload(0x47a0), mload(0x43a0), f_q)) - mstore(0x4d80, mulmod(mload(0x4ca0), mload(0x43a0), f_q)) - mstore(0x4da0, mulmod(mload(0x4cc0), mload(0x43a0), f_q)) - mstore(0x4dc0, mulmod(mload(0x4ce0), mload(0x43a0), f_q)) - mstore(0x4de0, addmod(mload(0x4c80), mload(0x4d40), f_q)) - { - let result := mulmod(mload(0xbc0), mload(0x3e00), f_q) - mstore(19968, result) - } - mstore(0x4e20, mulmod(mload(0x4e00), mload(0x42c0), f_q)) - mstore(0x4e40, mulmod(sub(f_q, mload(0x4e20)), mload(0x43c0), f_q)) - mstore(0x4e60, mulmod(mload(0x47a0), mload(0x43c0), f_q)) - mstore(0x4e80, addmod(mload(0x4de0), mload(0x4e40), f_q)) - mstore(0x4ea0, mulmod(mload(0x4e80), mload(0x4420), f_q)) - mstore(0x4ec0, mulmod(mload(0x4820), mload(0x4420), f_q)) - mstore(0x4ee0, mulmod(mload(0x48a0), mload(0x4420), f_q)) - mstore(0x4f00, mulmod(mload(0x4940), mload(0x4420), f_q)) - mstore(0x4f20, mulmod(mload(0x49e0), mload(0x4420), f_q)) - mstore(0x4f40, mulmod(mload(0x4a80), mload(0x4420), f_q)) - mstore(0x4f60, mulmod(mload(0x4b20), mload(0x4420), f_q)) - mstore(0x4f80, mulmod(mload(0x4bc0), mload(0x4420), f_q)) - mstore(0x4fa0, mulmod(mload(0x4c60), mload(0x4420), f_q)) - mstore(0x4fc0, mulmod(mload(0x4d60), mload(0x4420), f_q)) - mstore(0x4fe0, mulmod(mload(0x4d80), mload(0x4420), f_q)) - mstore(0x5000, mulmod(mload(0x4da0), mload(0x4420), f_q)) - mstore(0x5020, mulmod(mload(0x4dc0), mload(0x4420), f_q)) - mstore(0x5040, mulmod(mload(0x4e60), mload(0x4420), f_q)) - mstore(0x5060, addmod(mload(0x4780), mload(0x4ea0), f_q)) - mstore(0x5080, mulmod(1, mload(0x3c40), f_q)) - mstore(0x50a0, mulmod(1, mload(0xe40), f_q)) - mstore(0x50c0, 0x0000000000000000000000000000000000000000000000000000000000000001) - mstore(0x50e0, 0x0000000000000000000000000000000000000000000000000000000000000002) - mstore(0x5100, mload(0x5060)) - success := and(eq(staticcall(gas(), 0x7, 0x50c0, 0x60, 0x50c0, 0x40), 1), success) - mstore(0x5120, mload(0x50c0)) - mstore(0x5140, mload(0x50e0)) - mstore(0x5160, mload(0x660)) - mstore(0x5180, mload(0x680)) - success := and(eq(staticcall(gas(), 0x6, 0x5120, 0x80, 0x5120, 0x40), 1), success) - mstore(0x51a0, mload(0x840)) - mstore(0x51c0, mload(0x860)) - mstore(0x51e0, mload(0x4640)) - success := and(eq(staticcall(gas(), 0x7, 0x51a0, 0x60, 0x51a0, 0x40), 1), success) - mstore(0x5200, mload(0x5120)) - mstore(0x5220, mload(0x5140)) - mstore(0x5240, mload(0x51a0)) - mstore(0x5260, mload(0x51c0)) - success := and(eq(staticcall(gas(), 0x6, 0x5200, 0x80, 0x5200, 0x40), 1), success) - mstore(0x5280, mload(0x880)) - mstore(0x52a0, mload(0x8a0)) - mstore(0x52c0, mload(0x4660)) - success := and(eq(staticcall(gas(), 0x7, 0x5280, 0x60, 0x5280, 0x40), 1), success) - mstore(0x52e0, mload(0x5200)) - mstore(0x5300, mload(0x5220)) - mstore(0x5320, mload(0x5280)) - mstore(0x5340, mload(0x52a0)) - success := and(eq(staticcall(gas(), 0x6, 0x52e0, 0x80, 0x52e0, 0x40), 1), success) - mstore(0x5360, mload(0x700)) - mstore(0x5380, mload(0x720)) - mstore(0x53a0, mload(0x4760)) - success := and(eq(staticcall(gas(), 0x7, 0x5360, 0x60, 0x5360, 0x40), 1), success) - mstore(0x53c0, mload(0x52e0)) - mstore(0x53e0, mload(0x5300)) - mstore(0x5400, mload(0x5360)) - mstore(0x5420, mload(0x5380)) - success := and(eq(staticcall(gas(), 0x6, 0x53c0, 0x80, 0x53c0, 0x40), 1), success) - mstore(0x5440, mload(0x740)) - mstore(0x5460, mload(0x760)) - mstore(0x5480, mload(0x4ec0)) - success := and(eq(staticcall(gas(), 0x7, 0x5440, 0x60, 0x5440, 0x40), 1), success) - mstore(0x54a0, mload(0x53c0)) - mstore(0x54c0, mload(0x53e0)) - mstore(0x54e0, mload(0x5440)) - mstore(0x5500, mload(0x5460)) - success := and(eq(staticcall(gas(), 0x6, 0x54a0, 0x80, 0x54a0, 0x40), 1), success) - mstore(0x5520, 0x215365efc7b867c1204aab35fb060db538521b93b08872e3a9700c7ee4a285c2) - mstore(0x5540, 0x26da76077e618e9351d4e53058afcb50f9ecb808ef537ffed4c95f1e964a8c58) - mstore(0x5560, mload(0x4ee0)) - success := and(eq(staticcall(gas(), 0x7, 0x5520, 0x60, 0x5520, 0x40), 1), success) - mstore(0x5580, mload(0x54a0)) - mstore(0x55a0, mload(0x54c0)) - mstore(0x55c0, mload(0x5520)) - mstore(0x55e0, mload(0x5540)) - success := and(eq(staticcall(gas(), 0x6, 0x5580, 0x80, 0x5580, 0x40), 1), success) - mstore(0x5600, 0x21c6ea7d6dbcd767ffb9d9beeb4f9c2f8243bc65290f2d75a59aea4f65ba8f3d) - mstore(0x5620, 0x24d0a0acb031c9a5687da08cdaf96650aae5c60435739bda8bbd574eb962622c) - mstore(0x5640, mload(0x4f00)) - success := and(eq(staticcall(gas(), 0x7, 0x5600, 0x60, 0x5600, 0x40), 1), success) - mstore(0x5660, mload(0x5580)) - mstore(0x5680, mload(0x55a0)) - mstore(0x56a0, mload(0x5600)) - mstore(0x56c0, mload(0x5620)) - success := and(eq(staticcall(gas(), 0x6, 0x5660, 0x80, 0x5660, 0x40), 1), success) - mstore(0x56e0, 0x289feda4952fe4464c9716d071e291bbecdcd5432356042dc79b76ed38cbbb0d) - mstore(0x5700, 0x07f3ca14a8801fa413462ad72ea448da5d7cf8c5218534cdc39bb23779b70bb9) - mstore(0x5720, mload(0x4f20)) - success := and(eq(staticcall(gas(), 0x7, 0x56e0, 0x60, 0x56e0, 0x40), 1), success) - mstore(0x5740, mload(0x5660)) - mstore(0x5760, mload(0x5680)) - mstore(0x5780, mload(0x56e0)) - mstore(0x57a0, mload(0x5700)) - success := and(eq(staticcall(gas(), 0x6, 0x5740, 0x80, 0x5740, 0x40), 1), success) - mstore(0x57c0, 0x259670bd2f2f6fce3b18100f92a2e59874da3b66a9ddd61e163eb4b071e24a97) - mstore(0x57e0, 0x097f07272f7ca89070ad9c06d9a3da1bb6e91d0e69bf7872f44cc5d332291eb5) - mstore(0x5800, mload(0x4f40)) - success := and(eq(staticcall(gas(), 0x7, 0x57c0, 0x60, 0x57c0, 0x40), 1), success) - mstore(0x5820, mload(0x5740)) - mstore(0x5840, mload(0x5760)) - mstore(0x5860, mload(0x57c0)) - mstore(0x5880, mload(0x57e0)) - success := and(eq(staticcall(gas(), 0x6, 0x5820, 0x80, 0x5820, 0x40), 1), success) - mstore(0x58a0, 0x1e9efbe537998d8260c28c8e2ca8d83118f378f1e83daed033c2ae772806280a) - mstore(0x58c0, 0x15e04128b5f6b9bb6c758886eda92c27e8414c25809bd547e4987c332c38a430) - mstore(0x58e0, mload(0x4f60)) - success := and(eq(staticcall(gas(), 0x7, 0x58a0, 0x60, 0x58a0, 0x40), 1), success) - mstore(0x5900, mload(0x5820)) - mstore(0x5920, mload(0x5840)) - mstore(0x5940, mload(0x58a0)) - mstore(0x5960, mload(0x58c0)) - success := and(eq(staticcall(gas(), 0x6, 0x5900, 0x80, 0x5900, 0x40), 1), success) - mstore(0x5980, 0x2db56ede49a6f38ee215d1fa9557ac54cb085bbb6170e9a2cda8db3c996c496e) - mstore(0x59a0, 0x017bd7af014917e84cda777f32c3b586cf6de90f0d649cbbce320ee837513cb8) - mstore(0x59c0, mload(0x4f80)) - success := and(eq(staticcall(gas(), 0x7, 0x5980, 0x60, 0x5980, 0x40), 1), success) - mstore(0x59e0, mload(0x5900)) - mstore(0x5a00, mload(0x5920)) - mstore(0x5a20, mload(0x5980)) - mstore(0x5a40, mload(0x59a0)) - success := and(eq(staticcall(gas(), 0x6, 0x59e0, 0x80, 0x59e0, 0x40), 1), success) - mstore(0x5a60, 0x0f76818adad3c635f139fde306f33aba7249952bdbbf72cf477a51f9d84f3ccc) - mstore(0x5a80, 0x23f89f9896b1cc39de92659098ea839186ff2e997ffa3413c1a7af4f31abe4ce) - mstore(0x5aa0, mload(0x4fa0)) - success := and(eq(staticcall(gas(), 0x7, 0x5a60, 0x60, 0x5a60, 0x40), 1), success) - mstore(0x5ac0, mload(0x59e0)) - mstore(0x5ae0, mload(0x5a00)) - mstore(0x5b00, mload(0x5a60)) - mstore(0x5b20, mload(0x5a80)) - success := and(eq(staticcall(gas(), 0x6, 0x5ac0, 0x80, 0x5ac0, 0x40), 1), success) - mstore(0x5b40, mload(0x960)) - mstore(0x5b60, mload(0x980)) - mstore(0x5b80, mload(0x4fc0)) - success := and(eq(staticcall(gas(), 0x7, 0x5b40, 0x60, 0x5b40, 0x40), 1), success) - mstore(0x5ba0, mload(0x5ac0)) - mstore(0x5bc0, mload(0x5ae0)) - mstore(0x5be0, mload(0x5b40)) - mstore(0x5c00, mload(0x5b60)) - success := and(eq(staticcall(gas(), 0x6, 0x5ba0, 0x80, 0x5ba0, 0x40), 1), success) - mstore(0x5c20, mload(0x9a0)) - mstore(0x5c40, mload(0x9c0)) - mstore(0x5c60, mload(0x4fe0)) - success := and(eq(staticcall(gas(), 0x7, 0x5c20, 0x60, 0x5c20, 0x40), 1), success) - mstore(0x5c80, mload(0x5ba0)) - mstore(0x5ca0, mload(0x5bc0)) - mstore(0x5cc0, mload(0x5c20)) - mstore(0x5ce0, mload(0x5c40)) - success := and(eq(staticcall(gas(), 0x6, 0x5c80, 0x80, 0x5c80, 0x40), 1), success) - mstore(0x5d00, mload(0x9e0)) - mstore(0x5d20, mload(0xa00)) - mstore(0x5d40, mload(0x5000)) - success := and(eq(staticcall(gas(), 0x7, 0x5d00, 0x60, 0x5d00, 0x40), 1), success) - mstore(0x5d60, mload(0x5c80)) - mstore(0x5d80, mload(0x5ca0)) - mstore(0x5da0, mload(0x5d00)) - mstore(0x5dc0, mload(0x5d20)) - success := and(eq(staticcall(gas(), 0x6, 0x5d60, 0x80, 0x5d60, 0x40), 1), success) - mstore(0x5de0, mload(0xa20)) - mstore(0x5e00, mload(0xa40)) - mstore(0x5e20, mload(0x5020)) - success := and(eq(staticcall(gas(), 0x7, 0x5de0, 0x60, 0x5de0, 0x40), 1), success) - mstore(0x5e40, mload(0x5d60)) - mstore(0x5e60, mload(0x5d80)) - mstore(0x5e80, mload(0x5de0)) - mstore(0x5ea0, mload(0x5e00)) - success := and(eq(staticcall(gas(), 0x6, 0x5e40, 0x80, 0x5e40, 0x40), 1), success) - mstore(0x5ec0, mload(0x8c0)) - mstore(0x5ee0, mload(0x8e0)) - mstore(0x5f00, mload(0x5040)) - success := and(eq(staticcall(gas(), 0x7, 0x5ec0, 0x60, 0x5ec0, 0x40), 1), success) - mstore(0x5f20, mload(0x5e40)) - mstore(0x5f40, mload(0x5e60)) - mstore(0x5f60, mload(0x5ec0)) - mstore(0x5f80, mload(0x5ee0)) - success := and(eq(staticcall(gas(), 0x6, 0x5f20, 0x80, 0x5f20, 0x40), 1), success) - mstore(0x5fa0, mload(0xde0)) - mstore(0x5fc0, mload(0xe00)) - mstore(0x5fe0, sub(f_q, mload(0x5080))) - success := and(eq(staticcall(gas(), 0x7, 0x5fa0, 0x60, 0x5fa0, 0x40), 1), success) - mstore(0x6000, mload(0x5f20)) - mstore(0x6020, mload(0x5f40)) - mstore(0x6040, mload(0x5fa0)) - mstore(0x6060, mload(0x5fc0)) - success := and(eq(staticcall(gas(), 0x6, 0x6000, 0x80, 0x6000, 0x40), 1), success) - mstore(0x6080, mload(0xe80)) - mstore(0x60a0, mload(0xea0)) - mstore(0x60c0, mload(0x50a0)) - success := and(eq(staticcall(gas(), 0x7, 0x6080, 0x60, 0x6080, 0x40), 1), success) - mstore(0x60e0, mload(0x6000)) - mstore(0x6100, mload(0x6020)) - mstore(0x6120, mload(0x6080)) - mstore(0x6140, mload(0x60a0)) - success := and(eq(staticcall(gas(), 0x6, 0x60e0, 0x80, 0x60e0, 0x40), 1), success) - mstore(0x6160, mload(0x60e0)) - mstore(0x6180, mload(0x6100)) - mstore(0x61a0, mload(0xe80)) - mstore(0x61c0, mload(0xea0)) - mstore(0x61e0, mload(0xec0)) - mstore(0x6200, mload(0xee0)) - mstore(0x6220, mload(0xf00)) - mstore(0x6240, mload(0xf20)) - mstore(0x6260, keccak256(0x6160, 256)) - mstore(25216, mod(mload(25184), f_q)) - mstore(0x62a0, mulmod(mload(0x6280), mload(0x6280), f_q)) - mstore(0x62c0, mulmod(1, mload(0x6280), f_q)) - mstore(0x62e0, mload(0x61e0)) - mstore(0x6300, mload(0x6200)) - mstore(0x6320, mload(0x62c0)) - success := and(eq(staticcall(gas(), 0x7, 0x62e0, 0x60, 0x62e0, 0x40), 1), success) - mstore(0x6340, mload(0x6160)) - mstore(0x6360, mload(0x6180)) - mstore(0x6380, mload(0x62e0)) - mstore(0x63a0, mload(0x6300)) - success := and(eq(staticcall(gas(), 0x6, 0x6340, 0x80, 0x6340, 0x40), 1), success) - mstore(0x63c0, mload(0x6220)) - mstore(0x63e0, mload(0x6240)) - mstore(0x6400, mload(0x62c0)) - success := and(eq(staticcall(gas(), 0x7, 0x63c0, 0x60, 0x63c0, 0x40), 1), success) - mstore(0x6420, mload(0x61a0)) - mstore(0x6440, mload(0x61c0)) - mstore(0x6460, mload(0x63c0)) - mstore(0x6480, mload(0x63e0)) - success := and(eq(staticcall(gas(), 0x6, 0x6420, 0x80, 0x6420, 0x40), 1), success) - mstore(0x64a0, mload(0x6340)) - mstore(0x64c0, mload(0x6360)) - mstore(0x64e0, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) + + } +mstore(0x4280, mulmod(mload(0x4080), mload(0x40a0), f_q)) +mstore(0x42a0, mulmod(mload(0x40c0), mload(0x40e0), f_q)) +mstore(0x42c0, mulmod(mload(0x4100), mload(0x4120), f_q)) +mstore(0x42e0, mulmod(mload(0xd40), mload(0xd40), f_q)) +mstore(0x4300, mulmod(mload(0x42e0), mload(0xd40), f_q)) +mstore(0x4320, mulmod(mload(0x4300), mload(0xd40), f_q)) +mstore(0x4340, mulmod(mload(0x4320), mload(0xd40), f_q)) +mstore(0x4360, mulmod(mload(0x4340), mload(0xd40), f_q)) +mstore(0x4380, mulmod(mload(0x4360), mload(0xd40), f_q)) +mstore(0x43a0, mulmod(mload(0x4380), mload(0xd40), f_q)) +mstore(0x43c0, mulmod(mload(0x43a0), mload(0xd40), f_q)) +mstore(0x43e0, mulmod(mload(0x43c0), mload(0xd40), f_q)) +mstore(0x4400, mulmod(mload(0xda0), mload(0xda0), f_q)) +mstore(0x4420, mulmod(mload(0x4400), mload(0xda0), f_q)) +mstore(0x4440, mulmod(mload(0x4420), mload(0xda0), f_q)) +{ + let result := mulmod(mload(0xac0), mload(0x3aa0), f_q) +result := addmod(mulmod(mload(0xae0), mload(0x3b00), f_q), result, f_q) +result := addmod(mulmod(mload(0xb00), mload(0x3b60), f_q), result, f_q) +result := addmod(mulmod(mload(0xb20), mload(0x3bc0), f_q), result, f_q) +mstore(17504, result) + } +mstore(0x4480, mulmod(mload(0x4460), mload(0x4060), f_q)) +mstore(0x44a0, mulmod(sub(f_q, mload(0x4480)), 1, f_q)) +mstore(0x44c0, mulmod(mload(0x44a0), 1, f_q)) +mstore(0x44e0, mulmod(1, mload(0x4080), f_q)) +{ + let result := mulmod(mload(0xc40), mload(0x3ca0), f_q) +result := addmod(mulmod(mload(0xc60), mload(0x3d00), f_q), result, f_q) +mstore(17664, result) + } +mstore(0x4520, mulmod(mload(0x4500), mload(0x4280), f_q)) +mstore(0x4540, mulmod(sub(f_q, mload(0x4520)), 1, f_q)) +mstore(0x4560, mulmod(mload(0x44e0), 1, f_q)) +{ + let result := mulmod(mload(0xc80), mload(0x3ca0), f_q) +result := addmod(mulmod(mload(0xca0), mload(0x3d00), f_q), result, f_q) +mstore(17792, result) + } +mstore(0x45a0, mulmod(mload(0x4580), mload(0x4280), f_q)) +mstore(0x45c0, mulmod(sub(f_q, mload(0x45a0)), mload(0xd40), f_q)) +mstore(0x45e0, mulmod(mload(0x44e0), mload(0xd40), f_q)) +mstore(0x4600, addmod(mload(0x4540), mload(0x45c0), f_q)) +mstore(0x4620, mulmod(mload(0x4600), mload(0xda0), f_q)) +mstore(0x4640, mulmod(mload(0x4560), mload(0xda0), f_q)) +mstore(0x4660, mulmod(mload(0x45e0), mload(0xda0), f_q)) +mstore(0x4680, addmod(mload(0x44c0), mload(0x4620), f_q)) +mstore(0x46a0, mulmod(1, mload(0x40c0), f_q)) +{ + let result := mulmod(mload(0xcc0), mload(0x3d60), f_q) +result := addmod(mulmod(mload(0xce0), mload(0x3dc0), f_q), result, f_q) +mstore(18112, result) + } +mstore(0x46e0, mulmod(mload(0x46c0), mload(0x42a0), f_q)) +mstore(0x4700, mulmod(sub(f_q, mload(0x46e0)), 1, f_q)) +mstore(0x4720, mulmod(mload(0x46a0), 1, f_q)) +mstore(0x4740, mulmod(mload(0x4700), mload(0x4400), f_q)) +mstore(0x4760, mulmod(mload(0x4720), mload(0x4400), f_q)) +mstore(0x4780, addmod(mload(0x4680), mload(0x4740), f_q)) +mstore(0x47a0, mulmod(1, mload(0x4100), f_q)) +{ + let result := mulmod(mload(0xd00), mload(0x3e00), f_q) +mstore(18368, result) + } +mstore(0x47e0, mulmod(mload(0x47c0), mload(0x42c0), f_q)) +mstore(0x4800, mulmod(sub(f_q, mload(0x47e0)), 1, f_q)) +mstore(0x4820, mulmod(mload(0x47a0), 1, f_q)) +{ + let result := mulmod(mload(0xb40), mload(0x3e00), f_q) +mstore(18496, result) + } +mstore(0x4860, mulmod(mload(0x4840), mload(0x42c0), f_q)) +mstore(0x4880, mulmod(sub(f_q, mload(0x4860)), mload(0xd40), f_q)) +mstore(0x48a0, mulmod(mload(0x47a0), mload(0xd40), f_q)) +mstore(0x48c0, addmod(mload(0x4800), mload(0x4880), f_q)) +{ + let result := mulmod(mload(0xb60), mload(0x3e00), f_q) +mstore(18656, result) + } +mstore(0x4900, mulmod(mload(0x48e0), mload(0x42c0), f_q)) +mstore(0x4920, mulmod(sub(f_q, mload(0x4900)), mload(0x42e0), f_q)) +mstore(0x4940, mulmod(mload(0x47a0), mload(0x42e0), f_q)) +mstore(0x4960, addmod(mload(0x48c0), mload(0x4920), f_q)) +{ + let result := mulmod(mload(0xb80), mload(0x3e00), f_q) +mstore(18816, result) + } +mstore(0x49a0, mulmod(mload(0x4980), mload(0x42c0), f_q)) +mstore(0x49c0, mulmod(sub(f_q, mload(0x49a0)), mload(0x4300), f_q)) +mstore(0x49e0, mulmod(mload(0x47a0), mload(0x4300), f_q)) +mstore(0x4a00, addmod(mload(0x4960), mload(0x49c0), f_q)) +{ + let result := mulmod(mload(0xba0), mload(0x3e00), f_q) +mstore(18976, result) + } +mstore(0x4a40, mulmod(mload(0x4a20), mload(0x42c0), f_q)) +mstore(0x4a60, mulmod(sub(f_q, mload(0x4a40)), mload(0x4320), f_q)) +mstore(0x4a80, mulmod(mload(0x47a0), mload(0x4320), f_q)) +mstore(0x4aa0, addmod(mload(0x4a00), mload(0x4a60), f_q)) +{ + let result := mulmod(mload(0xbe0), mload(0x3e00), f_q) +mstore(19136, result) + } +mstore(0x4ae0, mulmod(mload(0x4ac0), mload(0x42c0), f_q)) +mstore(0x4b00, mulmod(sub(f_q, mload(0x4ae0)), mload(0x4340), f_q)) +mstore(0x4b20, mulmod(mload(0x47a0), mload(0x4340), f_q)) +mstore(0x4b40, addmod(mload(0x4aa0), mload(0x4b00), f_q)) +{ + let result := mulmod(mload(0xc00), mload(0x3e00), f_q) +mstore(19296, result) + } +mstore(0x4b80, mulmod(mload(0x4b60), mload(0x42c0), f_q)) +mstore(0x4ba0, mulmod(sub(f_q, mload(0x4b80)), mload(0x4360), f_q)) +mstore(0x4bc0, mulmod(mload(0x47a0), mload(0x4360), f_q)) +mstore(0x4be0, addmod(mload(0x4b40), mload(0x4ba0), f_q)) +{ + let result := mulmod(mload(0xc20), mload(0x3e00), f_q) +mstore(19456, result) + } +mstore(0x4c20, mulmod(mload(0x4c00), mload(0x42c0), f_q)) +mstore(0x4c40, mulmod(sub(f_q, mload(0x4c20)), mload(0x4380), f_q)) +mstore(0x4c60, mulmod(mload(0x47a0), mload(0x4380), f_q)) +mstore(0x4c80, addmod(mload(0x4be0), mload(0x4c40), f_q)) +mstore(0x4ca0, mulmod(mload(0x3860), mload(0x4100), f_q)) +mstore(0x4cc0, mulmod(mload(0x3880), mload(0x4100), f_q)) +mstore(0x4ce0, mulmod(mload(0x38a0), mload(0x4100), f_q)) +{ + let result := mulmod(mload(0x38c0), mload(0x3e00), f_q) +mstore(19712, result) + } +mstore(0x4d20, mulmod(mload(0x4d00), mload(0x42c0), f_q)) +mstore(0x4d40, mulmod(sub(f_q, mload(0x4d20)), mload(0x43a0), f_q)) +mstore(0x4d60, mulmod(mload(0x47a0), mload(0x43a0), f_q)) +mstore(0x4d80, mulmod(mload(0x4ca0), mload(0x43a0), f_q)) +mstore(0x4da0, mulmod(mload(0x4cc0), mload(0x43a0), f_q)) +mstore(0x4dc0, mulmod(mload(0x4ce0), mload(0x43a0), f_q)) +mstore(0x4de0, addmod(mload(0x4c80), mload(0x4d40), f_q)) +{ + let result := mulmod(mload(0xbc0), mload(0x3e00), f_q) +mstore(19968, result) + } +mstore(0x4e20, mulmod(mload(0x4e00), mload(0x42c0), f_q)) +mstore(0x4e40, mulmod(sub(f_q, mload(0x4e20)), mload(0x43c0), f_q)) +mstore(0x4e60, mulmod(mload(0x47a0), mload(0x43c0), f_q)) +mstore(0x4e80, addmod(mload(0x4de0), mload(0x4e40), f_q)) +mstore(0x4ea0, mulmod(mload(0x4e80), mload(0x4420), f_q)) +mstore(0x4ec0, mulmod(mload(0x4820), mload(0x4420), f_q)) +mstore(0x4ee0, mulmod(mload(0x48a0), mload(0x4420), f_q)) +mstore(0x4f00, mulmod(mload(0x4940), mload(0x4420), f_q)) +mstore(0x4f20, mulmod(mload(0x49e0), mload(0x4420), f_q)) +mstore(0x4f40, mulmod(mload(0x4a80), mload(0x4420), f_q)) +mstore(0x4f60, mulmod(mload(0x4b20), mload(0x4420), f_q)) +mstore(0x4f80, mulmod(mload(0x4bc0), mload(0x4420), f_q)) +mstore(0x4fa0, mulmod(mload(0x4c60), mload(0x4420), f_q)) +mstore(0x4fc0, mulmod(mload(0x4d60), mload(0x4420), f_q)) +mstore(0x4fe0, mulmod(mload(0x4d80), mload(0x4420), f_q)) +mstore(0x5000, mulmod(mload(0x4da0), mload(0x4420), f_q)) +mstore(0x5020, mulmod(mload(0x4dc0), mload(0x4420), f_q)) +mstore(0x5040, mulmod(mload(0x4e60), mload(0x4420), f_q)) +mstore(0x5060, addmod(mload(0x4780), mload(0x4ea0), f_q)) +mstore(0x5080, mulmod(1, mload(0x3c40), f_q)) +mstore(0x50a0, mulmod(1, mload(0xe40), f_q)) +mstore(0x50c0, 0x0000000000000000000000000000000000000000000000000000000000000001) + mstore(0x50e0, 0x0000000000000000000000000000000000000000000000000000000000000002) +mstore(0x5100, mload(0x5060)) +success := and(eq(staticcall(gas(), 0x7, 0x50c0, 0x60, 0x50c0, 0x40), 1), success) +mstore(0x5120, mload(0x50c0)) + mstore(0x5140, mload(0x50e0)) +mstore(0x5160, mload(0x660)) + mstore(0x5180, mload(0x680)) +success := and(eq(staticcall(gas(), 0x6, 0x5120, 0x80, 0x5120, 0x40), 1), success) +mstore(0x51a0, mload(0x840)) + mstore(0x51c0, mload(0x860)) +mstore(0x51e0, mload(0x4640)) +success := and(eq(staticcall(gas(), 0x7, 0x51a0, 0x60, 0x51a0, 0x40), 1), success) +mstore(0x5200, mload(0x5120)) + mstore(0x5220, mload(0x5140)) +mstore(0x5240, mload(0x51a0)) + mstore(0x5260, mload(0x51c0)) +success := and(eq(staticcall(gas(), 0x6, 0x5200, 0x80, 0x5200, 0x40), 1), success) +mstore(0x5280, mload(0x880)) + mstore(0x52a0, mload(0x8a0)) +mstore(0x52c0, mload(0x4660)) +success := and(eq(staticcall(gas(), 0x7, 0x5280, 0x60, 0x5280, 0x40), 1), success) +mstore(0x52e0, mload(0x5200)) + mstore(0x5300, mload(0x5220)) +mstore(0x5320, mload(0x5280)) + mstore(0x5340, mload(0x52a0)) +success := and(eq(staticcall(gas(), 0x6, 0x52e0, 0x80, 0x52e0, 0x40), 1), success) +mstore(0x5360, mload(0x700)) + mstore(0x5380, mload(0x720)) +mstore(0x53a0, mload(0x4760)) +success := and(eq(staticcall(gas(), 0x7, 0x5360, 0x60, 0x5360, 0x40), 1), success) +mstore(0x53c0, mload(0x52e0)) + mstore(0x53e0, mload(0x5300)) +mstore(0x5400, mload(0x5360)) + mstore(0x5420, mload(0x5380)) +success := and(eq(staticcall(gas(), 0x6, 0x53c0, 0x80, 0x53c0, 0x40), 1), success) +mstore(0x5440, mload(0x740)) + mstore(0x5460, mload(0x760)) +mstore(0x5480, mload(0x4ec0)) +success := and(eq(staticcall(gas(), 0x7, 0x5440, 0x60, 0x5440, 0x40), 1), success) +mstore(0x54a0, mload(0x53c0)) + mstore(0x54c0, mload(0x53e0)) +mstore(0x54e0, mload(0x5440)) + mstore(0x5500, mload(0x5460)) +success := and(eq(staticcall(gas(), 0x6, 0x54a0, 0x80, 0x54a0, 0x40), 1), success) +mstore(0x5520, 0x215365efc7b867c1204aab35fb060db538521b93b08872e3a9700c7ee4a285c2) + mstore(0x5540, 0x26da76077e618e9351d4e53058afcb50f9ecb808ef537ffed4c95f1e964a8c58) +mstore(0x5560, mload(0x4ee0)) +success := and(eq(staticcall(gas(), 0x7, 0x5520, 0x60, 0x5520, 0x40), 1), success) +mstore(0x5580, mload(0x54a0)) + mstore(0x55a0, mload(0x54c0)) +mstore(0x55c0, mload(0x5520)) + mstore(0x55e0, mload(0x5540)) +success := and(eq(staticcall(gas(), 0x6, 0x5580, 0x80, 0x5580, 0x40), 1), success) +mstore(0x5600, 0x21c6ea7d6dbcd767ffb9d9beeb4f9c2f8243bc65290f2d75a59aea4f65ba8f3d) + mstore(0x5620, 0x24d0a0acb031c9a5687da08cdaf96650aae5c60435739bda8bbd574eb962622c) +mstore(0x5640, mload(0x4f00)) +success := and(eq(staticcall(gas(), 0x7, 0x5600, 0x60, 0x5600, 0x40), 1), success) +mstore(0x5660, mload(0x5580)) + mstore(0x5680, mload(0x55a0)) +mstore(0x56a0, mload(0x5600)) + mstore(0x56c0, mload(0x5620)) +success := and(eq(staticcall(gas(), 0x6, 0x5660, 0x80, 0x5660, 0x40), 1), success) +mstore(0x56e0, 0x289feda4952fe4464c9716d071e291bbecdcd5432356042dc79b76ed38cbbb0d) + mstore(0x5700, 0x07f3ca14a8801fa413462ad72ea448da5d7cf8c5218534cdc39bb23779b70bb9) +mstore(0x5720, mload(0x4f20)) +success := and(eq(staticcall(gas(), 0x7, 0x56e0, 0x60, 0x56e0, 0x40), 1), success) +mstore(0x5740, mload(0x5660)) + mstore(0x5760, mload(0x5680)) +mstore(0x5780, mload(0x56e0)) + mstore(0x57a0, mload(0x5700)) +success := and(eq(staticcall(gas(), 0x6, 0x5740, 0x80, 0x5740, 0x40), 1), success) +mstore(0x57c0, 0x259670bd2f2f6fce3b18100f92a2e59874da3b66a9ddd61e163eb4b071e24a97) + mstore(0x57e0, 0x097f07272f7ca89070ad9c06d9a3da1bb6e91d0e69bf7872f44cc5d332291eb5) +mstore(0x5800, mload(0x4f40)) +success := and(eq(staticcall(gas(), 0x7, 0x57c0, 0x60, 0x57c0, 0x40), 1), success) +mstore(0x5820, mload(0x5740)) + mstore(0x5840, mload(0x5760)) +mstore(0x5860, mload(0x57c0)) + mstore(0x5880, mload(0x57e0)) +success := and(eq(staticcall(gas(), 0x6, 0x5820, 0x80, 0x5820, 0x40), 1), success) +mstore(0x58a0, 0x1e9efbe537998d8260c28c8e2ca8d83118f378f1e83daed033c2ae772806280a) + mstore(0x58c0, 0x15e04128b5f6b9bb6c758886eda92c27e8414c25809bd547e4987c332c38a430) +mstore(0x58e0, mload(0x4f60)) +success := and(eq(staticcall(gas(), 0x7, 0x58a0, 0x60, 0x58a0, 0x40), 1), success) +mstore(0x5900, mload(0x5820)) + mstore(0x5920, mload(0x5840)) +mstore(0x5940, mload(0x58a0)) + mstore(0x5960, mload(0x58c0)) +success := and(eq(staticcall(gas(), 0x6, 0x5900, 0x80, 0x5900, 0x40), 1), success) +mstore(0x5980, 0x2db56ede49a6f38ee215d1fa9557ac54cb085bbb6170e9a2cda8db3c996c496e) + mstore(0x59a0, 0x017bd7af014917e84cda777f32c3b586cf6de90f0d649cbbce320ee837513cb8) +mstore(0x59c0, mload(0x4f80)) +success := and(eq(staticcall(gas(), 0x7, 0x5980, 0x60, 0x5980, 0x40), 1), success) +mstore(0x59e0, mload(0x5900)) + mstore(0x5a00, mload(0x5920)) +mstore(0x5a20, mload(0x5980)) + mstore(0x5a40, mload(0x59a0)) +success := and(eq(staticcall(gas(), 0x6, 0x59e0, 0x80, 0x59e0, 0x40), 1), success) +mstore(0x5a60, 0x0f76818adad3c635f139fde306f33aba7249952bdbbf72cf477a51f9d84f3ccc) + mstore(0x5a80, 0x23f89f9896b1cc39de92659098ea839186ff2e997ffa3413c1a7af4f31abe4ce) +mstore(0x5aa0, mload(0x4fa0)) +success := and(eq(staticcall(gas(), 0x7, 0x5a60, 0x60, 0x5a60, 0x40), 1), success) +mstore(0x5ac0, mload(0x59e0)) + mstore(0x5ae0, mload(0x5a00)) +mstore(0x5b00, mload(0x5a60)) + mstore(0x5b20, mload(0x5a80)) +success := and(eq(staticcall(gas(), 0x6, 0x5ac0, 0x80, 0x5ac0, 0x40), 1), success) +mstore(0x5b40, mload(0x960)) + mstore(0x5b60, mload(0x980)) +mstore(0x5b80, mload(0x4fc0)) +success := and(eq(staticcall(gas(), 0x7, 0x5b40, 0x60, 0x5b40, 0x40), 1), success) +mstore(0x5ba0, mload(0x5ac0)) + mstore(0x5bc0, mload(0x5ae0)) +mstore(0x5be0, mload(0x5b40)) + mstore(0x5c00, mload(0x5b60)) +success := and(eq(staticcall(gas(), 0x6, 0x5ba0, 0x80, 0x5ba0, 0x40), 1), success) +mstore(0x5c20, mload(0x9a0)) + mstore(0x5c40, mload(0x9c0)) +mstore(0x5c60, mload(0x4fe0)) +success := and(eq(staticcall(gas(), 0x7, 0x5c20, 0x60, 0x5c20, 0x40), 1), success) +mstore(0x5c80, mload(0x5ba0)) + mstore(0x5ca0, mload(0x5bc0)) +mstore(0x5cc0, mload(0x5c20)) + mstore(0x5ce0, mload(0x5c40)) +success := and(eq(staticcall(gas(), 0x6, 0x5c80, 0x80, 0x5c80, 0x40), 1), success) +mstore(0x5d00, mload(0x9e0)) + mstore(0x5d20, mload(0xa00)) +mstore(0x5d40, mload(0x5000)) +success := and(eq(staticcall(gas(), 0x7, 0x5d00, 0x60, 0x5d00, 0x40), 1), success) +mstore(0x5d60, mload(0x5c80)) + mstore(0x5d80, mload(0x5ca0)) +mstore(0x5da0, mload(0x5d00)) + mstore(0x5dc0, mload(0x5d20)) +success := and(eq(staticcall(gas(), 0x6, 0x5d60, 0x80, 0x5d60, 0x40), 1), success) +mstore(0x5de0, mload(0xa20)) + mstore(0x5e00, mload(0xa40)) +mstore(0x5e20, mload(0x5020)) +success := and(eq(staticcall(gas(), 0x7, 0x5de0, 0x60, 0x5de0, 0x40), 1), success) +mstore(0x5e40, mload(0x5d60)) + mstore(0x5e60, mload(0x5d80)) +mstore(0x5e80, mload(0x5de0)) + mstore(0x5ea0, mload(0x5e00)) +success := and(eq(staticcall(gas(), 0x6, 0x5e40, 0x80, 0x5e40, 0x40), 1), success) +mstore(0x5ec0, mload(0x8c0)) + mstore(0x5ee0, mload(0x8e0)) +mstore(0x5f00, mload(0x5040)) +success := and(eq(staticcall(gas(), 0x7, 0x5ec0, 0x60, 0x5ec0, 0x40), 1), success) +mstore(0x5f20, mload(0x5e40)) + mstore(0x5f40, mload(0x5e60)) +mstore(0x5f60, mload(0x5ec0)) + mstore(0x5f80, mload(0x5ee0)) +success := and(eq(staticcall(gas(), 0x6, 0x5f20, 0x80, 0x5f20, 0x40), 1), success) +mstore(0x5fa0, mload(0xde0)) + mstore(0x5fc0, mload(0xe00)) +mstore(0x5fe0, sub(f_q, mload(0x5080))) +success := and(eq(staticcall(gas(), 0x7, 0x5fa0, 0x60, 0x5fa0, 0x40), 1), success) +mstore(0x6000, mload(0x5f20)) + mstore(0x6020, mload(0x5f40)) +mstore(0x6040, mload(0x5fa0)) + mstore(0x6060, mload(0x5fc0)) +success := and(eq(staticcall(gas(), 0x6, 0x6000, 0x80, 0x6000, 0x40), 1), success) +mstore(0x6080, mload(0xe80)) + mstore(0x60a0, mload(0xea0)) +mstore(0x60c0, mload(0x50a0)) +success := and(eq(staticcall(gas(), 0x7, 0x6080, 0x60, 0x6080, 0x40), 1), success) +mstore(0x60e0, mload(0x6000)) + mstore(0x6100, mload(0x6020)) +mstore(0x6120, mload(0x6080)) + mstore(0x6140, mload(0x60a0)) +success := and(eq(staticcall(gas(), 0x6, 0x60e0, 0x80, 0x60e0, 0x40), 1), success) +mstore(0x6160, mload(0x60e0)) + mstore(0x6180, mload(0x6100)) +mstore(0x61a0, mload(0xe80)) + mstore(0x61c0, mload(0xea0)) +mstore(0x61e0, mload(0xec0)) + mstore(0x6200, mload(0xee0)) +mstore(0x6220, mload(0xf00)) + mstore(0x6240, mload(0xf20)) +mstore(0x6260, keccak256(0x6160, 256)) +mstore(25216, mod(mload(25184), f_q)) +mstore(0x62a0, mulmod(mload(0x6280), mload(0x6280), f_q)) +mstore(0x62c0, mulmod(1, mload(0x6280), f_q)) +mstore(0x62e0, mload(0x61e0)) + mstore(0x6300, mload(0x6200)) +mstore(0x6320, mload(0x62c0)) +success := and(eq(staticcall(gas(), 0x7, 0x62e0, 0x60, 0x62e0, 0x40), 1), success) +mstore(0x6340, mload(0x6160)) + mstore(0x6360, mload(0x6180)) +mstore(0x6380, mload(0x62e0)) + mstore(0x63a0, mload(0x6300)) +success := and(eq(staticcall(gas(), 0x6, 0x6340, 0x80, 0x6340, 0x40), 1), success) +mstore(0x63c0, mload(0x6220)) + mstore(0x63e0, mload(0x6240)) +mstore(0x6400, mload(0x62c0)) +success := and(eq(staticcall(gas(), 0x7, 0x63c0, 0x60, 0x63c0, 0x40), 1), success) +mstore(0x6420, mload(0x61a0)) + mstore(0x6440, mload(0x61c0)) +mstore(0x6460, mload(0x63c0)) + mstore(0x6480, mload(0x63e0)) +success := and(eq(staticcall(gas(), 0x6, 0x6420, 0x80, 0x6420, 0x40), 1), success) +mstore(0x64a0, mload(0x6340)) + mstore(0x64c0, mload(0x6360)) +mstore(0x64e0, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) mstore(0x6500, 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) mstore(0x6520, 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) mstore(0x6540, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa) - mstore(0x6560, mload(0x6420)) - mstore(0x6580, mload(0x6440)) - mstore(0x65a0, 0x172aa93c41f16e1e04d62ac976a5d945f4be0acab990c6dc19ac4a7cf68bf77b) +mstore(0x6560, mload(0x6420)) + mstore(0x6580, mload(0x6440)) +mstore(0x65a0, 0x172aa93c41f16e1e04d62ac976a5d945f4be0acab990c6dc19ac4a7cf68bf77b) mstore(0x65c0, 0x2ae0c8c3a090f7200ff398ee9845bbae8f8c1445ae7b632212775f60a0e21600) mstore(0x65e0, 0x190fa476a5b352809ed41d7a0d7fe12b8f685e3c12a6d83855dba27aaf469643) mstore(0x6600, 0x1c0a500618907df9e4273d5181e31088deb1f05132de037cbfe73888f97f77c9) - success := and(eq(staticcall(gas(), 0x8, 0x64a0, 0x180, 0x64a0, 0x20), 1), success) - success := and(eq(mload(0x64a0), 1), success) +success := and(eq(staticcall(gas(), 0x8, 0x64a0, 0x180, 0x64a0, 0x20), 1), success) +success := and(eq(mload(0x64a0), 1), success) // Revert if anything fails if iszero(success) { revert(0, 0) } // Return empty bytes on success return(0, 0) + } } } + \ No newline at end of file From f37ff50e314a5c690bfccfeb37a19442b1cd45a1 Mon Sep 17 00:00:00 2001 From: Ho Date: Thu, 9 Oct 2025 15:13:28 +0900 Subject: [PATCH 77/84] [Fix] Issues for validium mode (#194) * fix issues in e2e test with coordinator * add debug fields * update commits * Soundness issues in Validium (#196) * fix: soundness issues in validium mode * chore: rename method validium pi_hash * chore: rename another pi_hash validium * update commit --------- Co-authored-by: Zhuo Zhang Co-authored-by: Rohit Narurkar --- .../batch-circuit/batch_exe_commit.rs | 2 +- .../bundle-circuit/bundle_exe_commit.rs | 2 +- .../chunk-circuit/chunk_exe_commit.rs | 2 +- crates/integration/src/utils/mod.rs | 65 +----- crates/types/base/src/public_inputs/batch.rs | 20 +- crates/types/base/src/public_inputs/chunk.rs | 8 +- crates/types/batch/src/builder/validium.rs | 49 ++-- crates/types/batch/src/header/mod.rs | 6 + crates/types/batch/src/header/validium.rs | 16 ++ crates/types/batch/src/payload/mod.rs | 2 - crates/types/batch/src/payload/validium.rs | 209 ------------------ crates/types/batch/src/witness.rs | 2 +- crates/types/chunk/src/execute.rs | 11 +- 13 files changed, 92 insertions(+), 302 deletions(-) delete mode 100644 crates/types/batch/src/payload/validium.rs diff --git a/crates/circuits/batch-circuit/batch_exe_commit.rs b/crates/circuits/batch-circuit/batch_exe_commit.rs index a4f03d2b..f8d1e24c 100644 --- a/crates/circuits/batch-circuit/batch_exe_commit.rs +++ b/crates/circuits/batch-circuit/batch_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1950246364, 1636590102, 198747183, 721429575, 920539053, 838315603, 215973995, 453669913]; +pub const COMMIT: [u32; 8] = [378983583, 1588043245, 997558768, 232971842, 98921912, 1094114240, 1668965390, 439165940]; diff --git a/crates/circuits/bundle-circuit/bundle_exe_commit.rs b/crates/circuits/bundle-circuit/bundle_exe_commit.rs index 5440031d..2787960d 100644 --- a/crates/circuits/bundle-circuit/bundle_exe_commit.rs +++ b/crates/circuits/bundle-circuit/bundle_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1948048916, 1022190518, 1051765913, 997565840, 1008935769, 1678268764, 1464235949, 1741788930]; +pub const COMMIT: [u32; 8] = [1319970937, 1591263281, 1491142464, 295379798, 1634034263, 1525537339, 1450517202, 914878096]; diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index b481bcd0..d60c5546 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [404732286, 1668992133, 680101068, 1459241968, 1634825407, 869878951, 1443138776, 876807865]; +pub const COMMIT: [u32; 8] = [686772141, 1415860009, 661100161, 25568772, 174445417, 1760732590, 769291679, 1509851629]; diff --git a/crates/integration/src/utils/mod.rs b/crates/integration/src/utils/mod.rs index 9d50e1fb..b712e14e 100644 --- a/crates/integration/src/utils/mod.rs +++ b/crates/integration/src/utils/mod.rs @@ -352,7 +352,7 @@ pub fn build_batch_witnesses_validium( .collect::>>()?; // collect tx bytes from chunk tasks - let (meta_chunk_sizes, chunk_digests, chunk_tx_bytes) = chunks.iter().fold( + let (_, chunk_digests, _) = chunks.iter().fold( (Vec::new(), Vec::new(), Vec::new()), |(mut meta_chunk_sizes, mut chunk_digests, mut payload_bytes), chunk_wit| { let tx_bytes = blks_tx_bytes(chunk_wit.blocks.iter()); @@ -368,69 +368,8 @@ pub fn build_batch_witnesses_validium( assert_eq!(digest, &chunk_info.tx_data_digest); } - const LEGACY_MAX_CHUNKS: usize = 45; - - let meta_chunk_bytes = { - let valid_chunk_size = chunks.len() as u16; - meta_chunk_sizes - .into_iter() - .chain(std::iter::repeat(0)) - .take(LEGACY_MAX_CHUNKS) - .fold( - Vec::from(valid_chunk_size.to_be_bytes()), - |mut bytes, len| { - bytes.extend_from_slice(&(len as u32).to_be_bytes()); - bytes - }, - ) - }; - // collect all data together for payload let version = testing_version_validium(); - let mut payload = if version.fork >= ForkName::EuclidV2 { - Vec::new() - } else { - meta_chunk_bytes.clone() - }; - - if version.fork >= ForkName::EuclidV2 { - let num_blocks = chunks.iter().map(|w| w.blocks.len()).sum::() as u16; - let prev_msg_queue_hash = chunks[0].prev_msg_queue_hash; - let initial_block_number = chunks[0].blocks[0].header.number; - let post_msg_queue_hash = chunk_infos - .last() - .expect("at least one chunk") - .post_msg_queue_hash; - - payload.extend_from_slice(prev_msg_queue_hash.as_slice()); - payload.extend_from_slice(post_msg_queue_hash.as_slice()); - payload.extend(initial_block_number.to_be_bytes()); - payload.extend(num_blocks.to_be_bytes()); - assert_eq!(payload.len(), 74); - for chunk_info in &chunk_infos { - for ctx in &chunk_info.block_ctxs { - payload.extend(ctx.to_bytes()); - } - } - assert_eq!(payload.len(), 74 + 52 * num_blocks as usize); - } - payload.extend(chunk_tx_bytes); - // compress ... - let compressed_payload = zstd_encode(&payload); - - let heading = compressed_payload.len() as u32 + ((version.as_version_byte() as u32) << 24); - - let blob_bytes = if version.fork >= ForkName::EuclidV2 { - let mut blob_bytes = Vec::from(heading.to_be_bytes()); - blob_bytes.push(1u8); // compressed flag - blob_bytes.extend(compressed_payload); - blob_bytes.resize(4096 * 31, 0); - blob_bytes - } else { - let mut blob_bytes = vec![1]; - blob_bytes.extend(compressed_payload); - blob_bytes - }; let last_chunk = chunk_infos.last().expect("at least 1 chunk in batch"); let reference_header = @@ -464,7 +403,7 @@ pub fn build_batch_witnesses_validium( chunk_proofs, chunk_infos, reference_header, - blob_bytes, + blob_bytes: Vec::default(), point_eval_witness: None, fork_name: version.fork, }) diff --git a/crates/types/base/src/public_inputs/batch.rs b/crates/types/base/src/public_inputs/batch.rs index 45a9ff7a..ed1bb31c 100644 --- a/crates/types/base/src/public_inputs/batch.rs +++ b/crates/types/base/src/public_inputs/batch.rs @@ -83,7 +83,7 @@ impl BatchInfo { /// withdraw root || /// prev msg queue hash || /// post msg queue hash - /// ) + /// ) fn pi_hash_euclidv2(&self) -> B256 { keccak256( std::iter::empty() @@ -108,9 +108,23 @@ impl BatchInfo { } /// Public input hash for a L3 validium @ v1. - fn pi_hash_validium_v1(&self) -> B256 { + /// + /// keccak( + /// version || + /// parent state root || + /// parent batch hash || + /// state root || + /// batch hash || + /// chain id || + /// withdraw root || + /// prev msg queue hash || + /// post msg queue hash + /// encryption key + /// ) + fn pi_hash_validium(&self, version: Version) -> B256 { keccak256( std::iter::empty() + .chain(&[version.as_version_byte()]) .chain(self.parent_state_root.as_slice()) .chain(self.parent_batch_hash.as_slice()) .chain(self.state_root.as_slice()) @@ -142,7 +156,7 @@ impl MultiVersionPublicInputs for BatchInfo { (Domain::Scroll, STFVersion::V6) => self.pi_hash_by_fork(ForkName::EuclidV1), (Domain::Scroll, STFVersion::V7) => self.pi_hash_by_fork(ForkName::EuclidV2), (Domain::Scroll, STFVersion::V8) => self.pi_hash_by_fork(ForkName::Feynman), - (Domain::Validium, STFVersion::V1) => self.pi_hash_validium_v1(), + (Domain::Validium, STFVersion::V1) => self.pi_hash_validium(version), (domain, stf_version) => { unreachable!("unsupported version=({domain:?}, {stf_version:?})") } diff --git a/crates/types/base/src/public_inputs/chunk.rs b/crates/types/base/src/public_inputs/chunk.rs index a8e0c55d..37a43226 100644 --- a/crates/types/base/src/public_inputs/chunk.rs +++ b/crates/types/base/src/public_inputs/chunk.rs @@ -181,6 +181,8 @@ impl std::fmt::Display for ChunkInfo { .field("post_msg_queue_hash", &self.0.post_msg_queue_hash) .field("tx_data_length", &self.0.tx_data_length) .field("initial_block_number", &self.0.initial_block_number) + .field("prev_blockhash", &self.0.prev_blockhash) + .field("post_blockhash", &self.0.post_blockhash) .field("block_ctxs", &"") .finish() } @@ -273,6 +275,7 @@ impl ChunkInfo { /// Public input hash for a given chunk for L3 validium @ v1: /// /// keccak( + /// version || /// chain id || /// prev state root || /// post state root || @@ -286,9 +289,10 @@ impl ChunkInfo { /// post blockhash || /// encryption key /// ) - pub fn pi_hash_validium_v1(&self) -> B256 { + pub fn pi_hash_validium(&self, version: Version) -> B256 { keccak256( std::iter::empty() + .chain(&[version.as_version_byte()]) .chain(&self.chain_id.to_be_bytes()) .chain(self.prev_state_root.as_slice()) .chain(self.post_state_root.as_slice()) @@ -337,7 +341,7 @@ impl MultiVersionPublicInputs for ChunkInfo { (Domain::Scroll, STFVersion::V6) => self.pi_hash_by_fork(ForkName::EuclidV1), (Domain::Scroll, STFVersion::V7) => self.pi_hash_by_fork(ForkName::EuclidV2), (Domain::Scroll, STFVersion::V8) => self.pi_hash_by_fork(ForkName::Feynman), - (Domain::Validium, STFVersion::V1) => self.pi_hash_validium_v1(), + (Domain::Validium, STFVersion::V1) => self.pi_hash_validium(version), (domain, stf_version) => { unreachable!("unsupported version=({domain:?}, {stf_version:?})") } diff --git a/crates/types/batch/src/builder/validium.rs b/crates/types/batch/src/builder/validium.rs index 468261f9..f3de0a48 100644 --- a/crates/types/batch/src/builder/validium.rs +++ b/crates/types/batch/src/builder/validium.rs @@ -1,26 +1,22 @@ -use types_base::public_inputs::{batch::BatchInfo, chunk::ChunkInfo}; - -use crate::{ - header::{BatchHeader, ValidiumBatchHeader, validium::BatchHeaderValidium}, - payload::validium::{ValidiumEnvelopeV1, ValidiumPayloadV1}, +use types_base::{ + public_inputs::{batch::BatchInfo, chunk::ChunkInfo}, + version::Version, }; +use crate::header::{BatchHeader, ValidiumBatchHeader, validium::BatchHeaderValidium}; + pub struct ValidiumBuilderArgs { + pub version: u8, pub header: BatchHeaderValidium, pub chunk_infos: Vec, - pub batch_bytes: Vec, } impl ValidiumBuilderArgs { - pub fn new( - header: BatchHeaderValidium, - chunk_infos: Vec, - batch_bytes: Vec, - ) -> Self { + pub fn new(version: u8, header: BatchHeaderValidium, chunk_infos: Vec) -> Self { Self { + version, header, chunk_infos, - batch_bytes, } } } @@ -29,15 +25,34 @@ pub struct ValidiumBatchInfoBuilder; impl ValidiumBatchInfoBuilder { pub fn build(args: ValidiumBuilderArgs) -> BatchInfo { - let envelope = ValidiumEnvelopeV1::from_bytes(args.batch_bytes.as_slice()); - let payload = ValidiumPayloadV1::from_envelope(&envelope); + // Check that the batch's STF-version is correct. + let version = Version::from(args.version); + assert_eq!(version.stf_version as u8, args.header.version()); + + match &args.header { + BatchHeaderValidium::V1(_) => { + // nothing to do for v1 header since blob data is not included in validium + } + } - // Validate payload (batch data). - let (first_chunk, last_chunk) = payload.validate(&args.header, args.chunk_infos.as_slice()); + let (first_chunk, last_chunk) = ( + args.chunk_infos + .first() + .expect("at least one chunk in batch"), + args.chunk_infos + .last() + .expect("at least one chunk in batch"), + ); - // Additionally check that the batch's commitment field is set correctly. + // Check that the batch's commitment field is set correctly. assert_eq!(last_chunk.post_blockhash.to_vec(), args.header.commitment()); + // Check that the batch's state root is correct. + assert_eq!(last_chunk.post_state_root, args.header.post_state_root()); + + // Check that the batch's withdraw root is correct. + assert_eq!(last_chunk.withdraw_root, args.header.withdraw_root()); + BatchInfo { parent_state_root: first_chunk.prev_state_root, parent_batch_hash: args.header.parent_batch_hash(), diff --git a/crates/types/batch/src/header/mod.rs b/crates/types/batch/src/header/mod.rs index 1c8b8f04..befec940 100644 --- a/crates/types/batch/src/header/mod.rs +++ b/crates/types/batch/src/header/mod.rs @@ -28,6 +28,12 @@ pub trait BatchHeader { pub trait ValidiumBatchHeader: BatchHeader { /// The commitment attached to the batch header. fn commitment(&self) -> Vec; + + /// The state root after applying batch. + fn post_state_root(&self) -> B256; + + /// The withdraw root from the last block in the batch. + fn withdraw_root(&self) -> B256; } /// Reference header indicate the version of batch header base on which batch hash diff --git a/crates/types/batch/src/header/validium.rs b/crates/types/batch/src/header/validium.rs index 3cb54565..6c8ded07 100644 --- a/crates/types/batch/src/header/validium.rs +++ b/crates/types/batch/src/header/validium.rs @@ -63,12 +63,28 @@ impl ValidiumBatchHeader for BatchHeaderValidium { Self::V1(header) => header.commitment(), } } + fn post_state_root(&self) -> B256 { + match self { + Self::V1(header) => header.post_state_root(), + } + } + fn withdraw_root(&self) -> B256 { + match self { + Self::V1(header) => header.withdraw_root(), + } + } } impl ValidiumBatchHeader for BatchHeaderValidiumV1 { fn commitment(&self) -> Vec { self.commitment.to_vec() } + fn post_state_root(&self) -> B256 { + self.post_state_root + } + fn withdraw_root(&self) -> B256 { + self.withdraw_root + } } impl BatchHeader for BatchHeaderValidium { diff --git a/crates/types/batch/src/payload/mod.rs b/crates/types/batch/src/payload/mod.rs index 88d58986..1d3b9d6f 100644 --- a/crates/types/batch/src/payload/mod.rs +++ b/crates/types/batch/src/payload/mod.rs @@ -9,8 +9,6 @@ pub mod v7; pub mod v8; -pub mod validium; - /// The number data bytes we pack each BLS12-381 scalar into. The most-significant byte is 0. pub const N_DATA_BYTES_PER_COEFFICIENT: usize = 31; diff --git a/crates/types/batch/src/payload/validium.rs b/crates/types/batch/src/payload/validium.rs deleted file mode 100644 index 3d9272f3..00000000 --- a/crates/types/batch/src/payload/validium.rs +++ /dev/null @@ -1,209 +0,0 @@ -use alloy_primitives::{B256, keccak256}; -use types_base::{ - public_inputs::chunk::{BlockContextV2, ChunkInfo, SIZE_BLOCK_CTX}, - version::VALIDIUM_V1, -}; - -use crate::{BatchHeader, header::validium::BatchHeaderValidium}; - -use super::v7::{ - INDEX_BLOCK_CTX, INDEX_L2_BLOCK_NUM, INDEX_NUM_BLOCKS, INDEX_POST_MSG_QUEUE_HASH, - INDEX_PREV_MSG_QUEUE_HASH, -}; - -pub struct ValidiumEnvelope { - /// The original envelope bytes supplied. - /// - /// Caching just for re-use later in challenge digest computation. - #[allow(dead_code)] - pub envelope_bytes: Vec, - /// The [`Version`][version] byte as per new versioning system. - /// - /// [version]: types_base::version::Version - pub version: u8, - /// A single byte boolean flag (value is 0 or 1) to denote whether or not the following - /// bytes represent a batch in its zstd-encoded or raw form. - pub is_encoded: u8, - /// The unpadded bytes that can be decoded to the [`ValidiumPayload`]. - pub unpadded_bytes: Vec, -} - -pub struct ValidiumPayload { - /// The [`Version`][version] byte as per new versioning system. - /// - /// [version]: types_base::version::Version - pub version: u8, - /// Message queue hash at the end of the previous validium batch. - pub prev_msg_queue_hash: B256, - /// Message queue hash at the end of the current validium batch. - pub post_msg_queue_hash: B256, - /// The block number of the first block in the validium batch. - pub initial_block_number: u64, - /// The number of blocks in the validium batch. - pub num_blocks: u16, - /// The block contexts of each block in the validium batch. - pub block_contexts: Vec, - /// The L3 tx data flattened over every tx in every block in the batch. - pub tx_data: Vec, -} - -impl ValidiumEnvelope { - pub fn from_bytes(bytes: &[u8]) -> Self { - // Check the version of the batch. - let version = bytes[0]; - assert_eq!(version, VERSION); - - // Calculate the unpadded size of the encoded payload. - let unpadded_size = - (bytes[1] as usize) * 256 * 256 + (bytes[2] as usize) * 256 + bytes[3] as usize; - - // Whether the envelope represents encoded payload or raw payload. - // - // Is a boolean. - let is_encoded = bytes[4]; - assert!(is_encoded <= 1); - - // The padded bytes are all 0s. - for &padded_byte in bytes.iter().skip(5 + unpadded_size) { - assert_eq!(padded_byte, 0); - } - - Self { - version, - is_encoded, - unpadded_bytes: bytes[5..(5 + unpadded_size)].to_vec(), - envelope_bytes: bytes.to_vec(), - } - } -} - -impl ValidiumPayload { - pub fn from_envelope(envelope: &ValidiumEnvelope) -> Self { - // Conditionally decode depending on the flag set in the envelope. - let payload_bytes = if envelope.is_encoded & 1 == 1 { - vm_zstd::process(&envelope.unpadded_bytes) - .expect("zstd decode should succeed") - .decoded_data - } else { - envelope.unpadded_bytes.to_vec() - }; - - // Sanity check on the payload size. - assert!(payload_bytes.len() >= INDEX_BLOCK_CTX); - let num_blocks = u16::from_be_bytes( - payload_bytes[INDEX_NUM_BLOCKS..INDEX_BLOCK_CTX] - .try_into() - .expect("should not fail"), - ); - assert!(payload_bytes.len() >= INDEX_BLOCK_CTX + ((num_blocks as usize) * SIZE_BLOCK_CTX)); - - // Deserialize the other fields. - let prev_msg_queue_hash = - B256::from_slice(&payload_bytes[INDEX_PREV_MSG_QUEUE_HASH..INDEX_POST_MSG_QUEUE_HASH]); - let post_msg_queue_hash = - B256::from_slice(&payload_bytes[INDEX_POST_MSG_QUEUE_HASH..INDEX_L2_BLOCK_NUM]); - let initial_block_number = u64::from_be_bytes( - payload_bytes[INDEX_L2_BLOCK_NUM..INDEX_NUM_BLOCKS] - .try_into() - .expect("should not fail"), - ); - - // Deserialize block contexts depending on the number of blocks in the batch. - let mut block_contexts = Vec::with_capacity(num_blocks as usize); - for i in 0..num_blocks { - let start = (i as usize) * SIZE_BLOCK_CTX + INDEX_BLOCK_CTX; - block_contexts.push(BlockContextV2::from( - &payload_bytes[start..(start + SIZE_BLOCK_CTX)], - )); - } - - // All remaining bytes are flattened L2 txs. - let tx_data = - payload_bytes[INDEX_BLOCK_CTX + ((num_blocks as usize) * SIZE_BLOCK_CTX)..].to_vec(); - - Self { - version: envelope.version, - prev_msg_queue_hash, - post_msg_queue_hash, - initial_block_number, - num_blocks, - block_contexts, - tx_data, - } - } - - pub fn validate<'a>( - &self, - header: &BatchHeaderValidium, - chunk_infos: &'a [ChunkInfo], - ) -> (&'a ChunkInfo, &'a ChunkInfo) { - // Get the first and last chunks' info, to construct the batch info. - let (first_chunk, last_chunk) = ( - chunk_infos.first().expect("at least one chunk in batch"), - chunk_infos.last().expect("at least one chunk in batch"), - ); - - // version from payload is what's present in the on-chain batch header - assert_eq!(self.version, header.version()); - - // number of blocks in the batch - assert_eq!( - usize::from(self.num_blocks), - chunk_infos - .iter() - .flat_map(|chunk_info| chunk_info.block_ctxs.as_slice()) - .count() - ); - assert_eq!(usize::from(self.num_blocks), self.block_contexts.len()); - - // the block number of the first block in the batch - assert_eq!(self.initial_block_number, first_chunk.initial_block_number); - - // prev message queue hash - assert_eq!( - self.prev_msg_queue_hash.0, - first_chunk.prev_msg_queue_hash.0 - ); - - // post message queue hash - assert_eq!(self.post_msg_queue_hash.0, last_chunk.post_msg_queue_hash.0); - - // for each chunk, the tx_data_digest, i.e. keccak digest of the rlp-encoded L2 tx bytes - // flattened over every tx in the chunk, should be re-computed and matched against the - // public input of the chunk-circuit. - // - // first check that the total size of rlp-encoded tx data flattened over all txs in the - // chunk is in fact the size available from the payload. - assert_eq!( - u64::try_from(self.tx_data.len()).expect("len(tx-data) is u64"), - chunk_infos - .iter() - .map(|chunk_info| chunk_info.tx_data_length) - .sum::(), - ); - let mut index: usize = 0; - for chunk_info in chunk_infos.iter() { - let chunk_size = chunk_info.tx_data_length as usize; - let chunk_tx_data_digest = - keccak256(&self.tx_data.as_slice()[index..(index + chunk_size)]); - assert_eq!(chunk_tx_data_digest.0, chunk_info.tx_data_digest.0); - index += chunk_size; - } - - // for each block in the batch, check that the block context matches what's provided as - // witness. - for (block_ctx, witness_block_ctx) in self.block_contexts.iter().zip( - chunk_infos - .iter() - .flat_map(|chunk_info| chunk_info.block_ctxs.as_slice()), - ) { - assert_eq!(block_ctx, witness_block_ctx); - } - - (first_chunk, last_chunk) - } -} - -pub type ValidiumEnvelopeV1 = ValidiumEnvelope<{ VALIDIUM_V1 }>; - -pub type ValidiumPayloadV1 = ValidiumPayload<{ VALIDIUM_V1 }>; diff --git a/crates/types/batch/src/witness.rs b/crates/types/batch/src/witness.rs index df1772fe..19baa665 100644 --- a/crates/types/batch/src/witness.rs +++ b/crates/types/batch/src/witness.rs @@ -236,7 +236,7 @@ impl From<&BatchWitness> for BatchInfo { BatchInfoBuilderV8::build(args) } ReferenceHeader::Validium(header) => ValidiumBatchInfoBuilder::build( - ValidiumBuilderArgs::new(*header, chunk_infos, witness.blob_bytes.to_vec()), + ValidiumBuilderArgs::new(witness.version, *header, chunk_infos), ), } } diff --git a/crates/types/chunk/src/execute.rs b/crates/types/chunk/src/execute.rs index 63f20748..19b1902b 100644 --- a/crates/types/chunk/src/execute.rs +++ b/crates/types/chunk/src/execute.rs @@ -20,6 +20,13 @@ use types_base::{ /// But in guest mode, it must be provided. pub fn execute(witness: ChunkWitness) -> Result { let chain = Chain::from_id(witness.blocks[0].chain_id); + let prev_blockhash = witness.blocks[0].header.parent_hash(); + let post_blockhash = witness + .blocks + .last() + .expect("witnesses can not be empty") + .header + .hash_slow(); let chain_spec = build_chain_spec_force_hardfork( chain, match witness.fork_name { @@ -70,8 +77,8 @@ pub fn execute(witness: ChunkWitness) -> Result { prev_msg_queue_hash: witness.prev_msg_queue_hash, post_msg_queue_hash, block_ctxs: blocks.iter().map(block_to_context).collect(), - prev_blockhash: B256::default(), - post_blockhash: B256::default(), + prev_blockhash, + post_blockhash, encryption_key: witness.validium.map(|input| { SecretKey::try_from_bytes(input.secret_key) .expect("validium key") From 1d5d73b30a2fed68c905ba7e432d51359017640b Mon Sep 17 00:00:00 2001 From: Ho Date: Thu, 23 Oct 2025 15:35:57 +0900 Subject: [PATCH 78/84] update sbv and reth --- Cargo.lock | 97 ++++++++++--------- .../batch-circuit/batch_exe_commit.rs | 2 +- .../bundle-circuit/bundle_exe_commit.rs | 2 +- .../chunk-circuit/chunk_exe_commit.rs | 2 +- crates/types/chunk/Cargo.toml | 5 +- 5 files changed, 56 insertions(+), 52 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7ad0a702..8a3eab27 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1673,7 +1673,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -2347,7 +2347,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.0", + "windows-sys 0.52.0", ] [[package]] @@ -6281,7 +6281,7 @@ dependencies = [ [[package]] name = "reth-chainspec" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-chains", "alloy-consensus", @@ -6301,7 +6301,7 @@ dependencies = [ [[package]] name = "reth-codecs" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -6319,7 +6319,7 @@ dependencies = [ [[package]] name = "reth-codecs-derive" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "proc-macro2", "quote", @@ -6329,7 +6329,7 @@ dependencies = [ [[package]] name = "reth-consensus" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -6342,7 +6342,7 @@ dependencies = [ [[package]] name = "reth-consensus-common" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -6354,7 +6354,7 @@ dependencies = [ [[package]] name = "reth-db-models" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-eips 1.0.38", "alloy-primitives", @@ -6364,7 +6364,7 @@ dependencies = [ [[package]] name = "reth-errors" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "reth-consensus", "reth-execution-errors", @@ -6375,7 +6375,7 @@ dependencies = [ [[package]] name = "reth-ethereum-consensus" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -6391,7 +6391,7 @@ dependencies = [ [[package]] name = "reth-ethereum-forks" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-eip2124", "alloy-hardforks", @@ -6403,7 +6403,7 @@ dependencies = [ [[package]] name = "reth-ethereum-primitives" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -6420,7 +6420,7 @@ dependencies = [ [[package]] name = "reth-evm" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -6442,7 +6442,7 @@ dependencies = [ [[package]] name = "reth-evm-ethereum" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -6462,7 +6462,7 @@ dependencies = [ [[package]] name = "reth-execution-errors" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-evm", "alloy-primitives", @@ -6475,7 +6475,7 @@ dependencies = [ [[package]] name = "reth-execution-types" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -6491,7 +6491,7 @@ dependencies = [ [[package]] name = "reth-network-peers" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -6503,7 +6503,7 @@ dependencies = [ [[package]] name = "reth-primitives" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "once_cell", @@ -6516,7 +6516,7 @@ dependencies = [ [[package]] name = "reth-primitives-traits" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -6544,7 +6544,7 @@ dependencies = [ [[package]] name = "reth-prune-types" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-primitives", "derive_more 2.0.1", @@ -6554,7 +6554,7 @@ dependencies = [ [[package]] name = "reth-revm" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-primitives", "reth-primitives-traits", @@ -6566,7 +6566,7 @@ dependencies = [ [[package]] name = "reth-scroll-chainspec" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-chains", "alloy-consensus", @@ -6591,7 +6591,7 @@ dependencies = [ [[package]] name = "reth-scroll-evm" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -6621,7 +6621,7 @@ dependencies = [ [[package]] name = "reth-scroll-forks" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-chains", "alloy-primitives", @@ -6635,7 +6635,7 @@ dependencies = [ [[package]] name = "reth-scroll-primitives" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -6652,7 +6652,7 @@ dependencies = [ [[package]] name = "reth-stages-types" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-primitives", "reth-trie-common", @@ -6661,7 +6661,7 @@ dependencies = [ [[package]] name = "reth-stateless" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -6687,7 +6687,7 @@ dependencies = [ [[package]] name = "reth-static-file-types" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-primitives", "derive_more 2.0.1", @@ -6698,7 +6698,7 @@ dependencies = [ [[package]] name = "reth-storage-api" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -6720,7 +6720,7 @@ dependencies = [ [[package]] name = "reth-storage-errors" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-eips 1.0.38", "alloy-primitives", @@ -6736,7 +6736,7 @@ dependencies = [ [[package]] name = "reth-trie" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -6758,7 +6758,7 @@ dependencies = [ [[package]] name = "reth-trie-common" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -6774,7 +6774,7 @@ dependencies = [ [[package]] name = "reth-trie-sparse" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -6790,7 +6790,7 @@ dependencies = [ [[package]] name = "reth-zstd-compressors" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "zstd", ] @@ -7136,7 +7136,7 @@ dependencies = [ [[package]] name = "revm-scroll" version = "0.1.0" -source = "git+https://github.com/scroll-tech/scroll-revm#307f050ebe267492c483570356cc44990df42acf" +source = "git+https://github.com/scroll-tech/scroll-revm#d6b77e226ce20646d0ddf3dfe3b1fb3ec8a58cc3" dependencies = [ "auto_impl", "enumn", @@ -7352,7 +7352,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.0", + "windows-sys 0.52.0", ] [[package]] @@ -7391,7 +7391,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "sbv-core" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#f11065e9267413ee50f51a06d29de5a49fbfa81f" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#d1b5f2ed2bd5ba4b646213b3f6ae1433ca5b396b" dependencies = [ "auto_impl", "itertools 0.14.0", @@ -7408,7 +7408,7 @@ dependencies = [ [[package]] name = "sbv-helpers" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#f11065e9267413ee50f51a06d29de5a49fbfa81f" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#d1b5f2ed2bd5ba4b646213b3f6ae1433ca5b396b" dependencies = [ "tracing", ] @@ -7416,7 +7416,7 @@ dependencies = [ [[package]] name = "sbv-primitives" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#f11065e9267413ee50f51a06d29de5a49fbfa81f" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#d1b5f2ed2bd5ba4b646213b3f6ae1433ca5b396b" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -7453,7 +7453,7 @@ dependencies = [ [[package]] name = "sbv-trie" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#f11065e9267413ee50f51a06d29de5a49fbfa81f" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#d1b5f2ed2bd5ba4b646213b3f6ae1433ca5b396b" dependencies = [ "alloy-rlp", "alloy-trie 0.9.1", @@ -7470,7 +7470,7 @@ dependencies = [ [[package]] name = "sbv-utils" version = "2.0.0" -source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#f11065e9267413ee50f51a06d29de5a49fbfa81f" +source = "git+https://github.com/scroll-tech/stateless-block-verifier?branch=master#d1b5f2ed2bd5ba4b646213b3f6ae1433ca5b396b" dependencies = [ "alloy-provider", "alloy-rpc-client", @@ -7525,7 +7525,7 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scroll-alloy-consensus" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -7541,7 +7541,7 @@ dependencies = [ [[package]] name = "scroll-alloy-evm" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -7559,7 +7559,7 @@ dependencies = [ [[package]] name = "scroll-alloy-hardforks" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-hardforks", "auto_impl", @@ -7569,7 +7569,7 @@ dependencies = [ [[package]] name = "scroll-alloy-network" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-network", @@ -7584,7 +7584,7 @@ dependencies = [ [[package]] name = "scroll-alloy-rpc-types" version = "1.8.2" -source = "git+https://github.com/scroll-tech/reth?branch=scroll#32019bcde9d08524caad5b359b693e8f0c3951b8" +source = "git+https://github.com/scroll-tech/reth?branch=scroll#5edac541f81be7271d6e0b74a8f13f74e9facbb9" dependencies = [ "alloy-consensus", "alloy-eips 1.0.38", @@ -7824,6 +7824,7 @@ dependencies = [ "sbv-trie", "scroll-zkvm-types-base", "serde", + "serde_json", "thiserror 2.0.16", ] @@ -8335,7 +8336,7 @@ dependencies = [ "cfg-if", "libc", "psm", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -8508,7 +8509,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.61.0", + "windows-sys 0.52.0", ] [[package]] diff --git a/crates/circuits/batch-circuit/batch_exe_commit.rs b/crates/circuits/batch-circuit/batch_exe_commit.rs index 929d58db..34a56e6a 100644 --- a/crates/circuits/batch-circuit/batch_exe_commit.rs +++ b/crates/circuits/batch-circuit/batch_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [775328021, 994686220, 311977693, 1767703568, 225895022, 1451295799, 448321152, 1883850545]; +pub const COMMIT: [u32; 8] = [1442379743, 604025164, 211993523, 1029802940, 1928734307, 836806171, 1302267442, 1581617026]; diff --git a/crates/circuits/bundle-circuit/bundle_exe_commit.rs b/crates/circuits/bundle-circuit/bundle_exe_commit.rs index 3b506b54..50f1527a 100644 --- a/crates/circuits/bundle-circuit/bundle_exe_commit.rs +++ b/crates/circuits/bundle-circuit/bundle_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [999309839, 356817756, 1745788356, 1022091692, 38049001, 1787346163, 1855806929, 1587605488]; +pub const COMMIT: [u32; 8] = [1259429324, 1241987, 250141556, 1136063794, 37547628, 1733634558, 715410229, 327172405]; diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index 0261dfe5..5b20a82a 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [975311006, 1373163213, 724059054, 1653301253, 267007718, 518639920, 720799142, 310936841]; +pub const COMMIT: [u32; 8] = [94244902, 1589052552, 882794382, 782715436, 941408577, 1477804230, 1419217880, 1851228162]; diff --git a/crates/types/chunk/Cargo.toml b/crates/types/chunk/Cargo.toml index 892139d0..591ec724 100644 --- a/crates/types/chunk/Cargo.toml +++ b/crates/types/chunk/Cargo.toml @@ -8,7 +8,7 @@ repository.workspace = true version.workspace = true [dependencies] -alloy-primitives = { workspace = true, features = ["native-keccak"] } +alloy-primitives = { workspace = true } alloy-consensus = { workspace = true, features = ["crypto-backend"] } alloy-sol-types.workspace = true ecies.workspace = true @@ -29,6 +29,9 @@ openvm-pairing = { workspace = true, features = ["bn254"] } types-base = { path = "../base", package = "scroll-zkvm-types-base"} +[dev-dependencies] +serde_json.workspace = true + [features] default = [] host = ["scroll-compress-ratio"] From 204a49cd495e182546adb00267ef618eee0c29d9 Mon Sep 17 00:00:00 2001 From: Ho Date: Thu, 23 Oct 2025 19:04:51 +0900 Subject: [PATCH 79/84] Merge remote-tracking branch 'origin/master' into feat/validium --- .github/workflows/build-guest-release.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-guest-release.yml b/.github/workflows/build-guest-release.yml index 6cd6d858..8f6f2f83 100644 --- a/.github/workflows/build-guest-release.yml +++ b/.github/workflows/build-guest-release.yml @@ -3,7 +3,8 @@ name: Build ZKVM-Prover Guest on: push: tags: - - 'v0.[0-9]+.[0-9]+(-.*)?' + - 'v0.[0-9]+.[0-9]+' + - 'v0.[0-9]+.[0-9]+-*' jobs: build-guest: From c981b5999bea503389f03bdab1061c6ada9d7aca Mon Sep 17 00:00:00 2001 From: Ho Date: Thu, 23 Oct 2025 19:37:46 +0900 Subject: [PATCH 80/84] release.sh be compatible with sh --- release.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/release.sh b/release.sh index 6785457a..1cf343e9 100644 --- a/release.sh +++ b/release.sh @@ -1,7 +1,7 @@ -#!/bin/bash +#!/bin/sh set -uex -if [ -z "${SCROLL_ZKVM_VERSION}" ]; then +if [ -z "${SCROLL_ZKVM_VERSION:-}" ]; then echo "SCROLL_ZKVM_VERSION not set" exit 1 else @@ -10,12 +10,12 @@ fi DEV_DIR="releases/dev" # Output sha256 checksums -find $DEV_DIR -type f ! -name sha256sums.txt -exec sha256sum {} \; >$DEV_DIR/sha256sums.txt +find "$DEV_DIR" -type f ! -name sha256sums.txt -exec sha256sum {} \; >"$DEV_DIR/sha256sums.txt" # Read FORKNAME from release-fork file FORKNAME=$(head -n 1 release-fork) -function release_new() { +release_new() { VK_JSON="$DEV_DIR/verifier/openVmVk.json" RELEASES_DIR="releases/$FORKNAME" @@ -35,12 +35,12 @@ function release_new() { mkdir -p "$RELEASES_DIR/batch/$batch_vk" mkdir -p "$RELEASES_DIR/bundle/$bundle_vk" - # Copy files from releases/dev to the new directories - cp -r "$DEV_DIR/chunk"/* "$RELEASES_DIR/chunk/$chunk_vk/" - cp -r "$DEV_DIR/batch"/* "$RELEASES_DIR/batch/$batch_vk/" - cp -r "$DEV_DIR/bundle"/* "$RELEASES_DIR/bundle/$bundle_vk/" - mkdir -p $VERIFIER_RELEASES_DIR - mv $DEV_DIR/* $VERIFIER_RELEASES_DIR + # Copy contents (including hidden files) safely with POSIX cp -R + cp -R "$DEV_DIR/chunk/." "$RELEASES_DIR/chunk/$chunk_vk/" + cp -R "$DEV_DIR/batch/." "$RELEASES_DIR/batch/$batch_vk/" + cp -R "$DEV_DIR/bundle/." "$RELEASES_DIR/bundle/$bundle_vk/" + mkdir -p "$VERIFIER_RELEASES_DIR" + mv "$DEV_DIR"/* "$VERIFIER_RELEASES_DIR" echo "Files organized for release successfully:" echo " chunk files -> $RELEASES_DIR/chunk/$chunk_vk" @@ -52,8 +52,8 @@ function release_new() { #aws --profile default s3 cp releases s3://circuit-release/scroll-zkvm --recursive } -function release_old() { - aws --profile default s3 cp $DEV_DIR s3://circuit-release/scroll-zkvm/$VERIFIER_RELEASES_DIR --recursive +release_old() { + aws --profile default s3 cp "$DEV_DIR" "s3://circuit-release/scroll-zkvm/$VERIFIER_RELEASES_DIR" --recursive } release_new From 2b46ca162f431bb58f51ce49b376372874f6968e Mon Sep 17 00:00:00 2001 From: Ho Date: Thu, 23 Oct 2025 20:14:42 +0900 Subject: [PATCH 81/84] resume features removed by mistake allow chunk can be built in host --- crates/types/chunk/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/types/chunk/Cargo.toml b/crates/types/chunk/Cargo.toml index 591ec724..a85c57b5 100644 --- a/crates/types/chunk/Cargo.toml +++ b/crates/types/chunk/Cargo.toml @@ -8,7 +8,7 @@ repository.workspace = true version.workspace = true [dependencies] -alloy-primitives = { workspace = true } +alloy-primitives = { workspace = true, features = ["native-keccak"] } alloy-consensus = { workspace = true, features = ["crypto-backend"] } alloy-sol-types.workspace = true ecies.workspace = true @@ -34,7 +34,7 @@ serde_json.workspace = true [features] default = [] -host = ["scroll-compress-ratio"] +host = ["scroll-compress-ratio", "alloy-primitives/tiny-keccak"] scroll = [ "sbv-core/scroll", "sbv-primitives/scroll-evm-types", From 546172b7e2b37f5a80ce6e2ded5d75a5d70e92fc Mon Sep 17 00:00:00 2001 From: Ho Date: Fri, 24 Oct 2025 22:12:35 +0900 Subject: [PATCH 82/84] fix soundness issue update commit --- crates/circuits/batch-circuit/batch_exe_commit.rs | 2 +- crates/circuits/bundle-circuit/bundle_exe_commit.rs | 2 +- crates/circuits/chunk-circuit/chunk_exe_commit.rs | 2 +- crates/types/chunk/src/scroll/types.rs | 5 +++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/crates/circuits/batch-circuit/batch_exe_commit.rs b/crates/circuits/batch-circuit/batch_exe_commit.rs index 34a56e6a..3daf5d0d 100644 --- a/crates/circuits/batch-circuit/batch_exe_commit.rs +++ b/crates/circuits/batch-circuit/batch_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1442379743, 604025164, 211993523, 1029802940, 1928734307, 836806171, 1302267442, 1581617026]; +pub const COMMIT: [u32; 8] = [895296330, 1148458384, 132512161, 428973880, 1840310420, 1233162636, 1450429136, 1332854351]; diff --git a/crates/circuits/bundle-circuit/bundle_exe_commit.rs b/crates/circuits/bundle-circuit/bundle_exe_commit.rs index 50f1527a..8dbaf3f4 100644 --- a/crates/circuits/bundle-circuit/bundle_exe_commit.rs +++ b/crates/circuits/bundle-circuit/bundle_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [1259429324, 1241987, 250141556, 1136063794, 37547628, 1733634558, 715410229, 327172405]; +pub const COMMIT: [u32; 8] = [1257908223, 1206458759, 1468660351, 59874919, 689770277, 1592610906, 773480905, 1252681164]; diff --git a/crates/circuits/chunk-circuit/chunk_exe_commit.rs b/crates/circuits/chunk-circuit/chunk_exe_commit.rs index 5b20a82a..84cc5287 100644 --- a/crates/circuits/chunk-circuit/chunk_exe_commit.rs +++ b/crates/circuits/chunk-circuit/chunk_exe_commit.rs @@ -1,4 +1,4 @@ #![cfg_attr(rustfmt, rustfmt_skip)] //! Generated by crates/build-guest. DO NOT EDIT! -pub const COMMIT: [u32; 8] = [94244902, 1589052552, 882794382, 782715436, 941408577, 1477804230, 1419217880, 1851228162]; +pub const COMMIT: [u32; 8] = [988980860, 377520490, 1389793144, 1577198725, 851225072, 192704613, 306102683, 816798173]; diff --git a/crates/types/chunk/src/scroll/types.rs b/crates/types/chunk/src/scroll/types.rs index 7e90d15b..63c7853c 100644 --- a/crates/types/chunk/src/scroll/types.rs +++ b/crates/types/chunk/src/scroll/types.rs @@ -208,8 +208,9 @@ impl BlockExt for RecoveredBlock { Ok(decrypted) => { assert_eq!(decrypted, *tx_in_block); } - Err(e) => { - eprintln!("{}", e); + Err(_) => { + // when decryption has failed, the validium_tx is just used for execution with its encrypted bytes + assert_eq!(*validium_tx, *tx_in_block); } } From a2717c7a1813e7a2496e4af7640e6e932dccaa91 Mon Sep 17 00:00:00 2001 From: Ho Date: Wed, 29 Oct 2025 09:00:46 +0900 Subject: [PATCH 83/84] fix batch gen. in integration --- crates/integration/src/utils/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/integration/src/utils/mod.rs b/crates/integration/src/utils/mod.rs index ab029277..ecb2a150 100644 --- a/crates/integration/src/utils/mod.rs +++ b/crates/integration/src/utils/mod.rs @@ -376,7 +376,7 @@ pub fn build_batch_witnesses_validium( let last_chunk = chunk_infos.last().expect("at least 1 chunk in batch"); let reference_header = ReferenceHeader::Validium(BatchHeaderValidium::V1(BatchHeaderValidiumV1 { - version: version.as_version_byte(), + version: version.stf_version as u8, batch_index: last_header.batch_index + 1, parent_batch_hash: last_header.batch_hash, post_state_root: last_chunk.post_state_root, From d60fe68e892c4433ccb45bf32a861ce0378c2f1b Mon Sep 17 00:00:00 2001 From: Ho Date: Wed, 29 Oct 2025 09:01:07 +0900 Subject: [PATCH 84/84] hack some test stuff to fit the integration tests --- .../testdata/validium/witnesses/347_validium_txs.json | 4 ++-- .../testdata/validium/witnesses/367_validium_txs.json | 4 ++-- .../testdata/validium/witnesses/397_validium_txs.json | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/integration/testdata/validium/witnesses/347_validium_txs.json b/crates/integration/testdata/validium/witnesses/347_validium_txs.json index 8b14b017..34c5502d 100644 --- a/crates/integration/testdata/validium/witnesses/347_validium_txs.json +++ b/crates/integration/testdata/validium/witnesses/347_validium_txs.json @@ -5,8 +5,8 @@ "from": "0xfeea7a92fd46c25a475829f1975876ba48c13ceb", "gas": "0xf4240", "gasPrice": "0x0", - "hash": "0xfe9e8470c8d5840f9f6c25d1105f1e2ef51d31cc9407cfde40d474cbd4d1ab4b", - "input": "0x8ef1332e000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562000000000000000000000000694c7feee8bdad3c5d58dcbeb3da08b122ff27760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f00000000000000000000000038cb00e044d3cdd3c9f90b7efde61ef62e38fdf3000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a49000000000000000000000000cf360f1fc8763a38e3e1a19947bceb9f764a7a7c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504702f69ffc4e76bc4edda15f0dad49cfcb80198cd4d171a5b33a286d77cf4a249d3c7e1160b2d5f79268b44cc05431f9de21b0b56478b712727afe647ad9297ec352bfec52d17a9c4ea7ce40737abacb9c841f8fcc5ee8ebfffa58d43047afe2306f3ac2fdf6cf9fa3c4d293714767b4f2709a336000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbbca21975276ee293d2cdd03017f10e924d6b8a9538b24ed6289f7ebb558be31", + "input": "0x8ef1332e000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562000000000000000000000000694c7feee8bdad3c5d58dcbeb3da08b122ff27760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c100000000000000000000000038cb00e044d3cdd3c9f90b7efde61ef62e38fdf3000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a49000000000000000000000000cf360f1fc8763a38e3e1a19947bceb9f764a7a7c000000000000000000000000aaa2a36dc9ae3574cc5bd08b3564867b0b2ed0f3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0", "to": "0xdf45f4790e20509959fccc0d09245b216abdaa37", "transactionIndex": "0x0", diff --git a/crates/integration/testdata/validium/witnesses/367_validium_txs.json b/crates/integration/testdata/validium/witnesses/367_validium_txs.json index 84306180..f09c9a3c 100644 --- a/crates/integration/testdata/validium/witnesses/367_validium_txs.json +++ b/crates/integration/testdata/validium/witnesses/367_validium_txs.json @@ -5,8 +5,8 @@ "from": "0xfeea7a92fd46c25a475829f1975876ba48c13ceb", "gas": "0xf4240", "gasPrice": "0x0", - "hash": "0xb9be91cef46b54b88af78f16b5b0305d57b564b7aca4c2f17f00648bc14b5286", - "input": "0x8ef1332e000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562000000000000000000000000694c7feee8bdad3c5d58dcbeb3da08b122ff27760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f00000000000000000000000038cb00e044d3cdd3c9f90b7efde61ef62e38fdf3000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a49000000000000000000000000cf360f1fc8763a38e3e1a19947bceb9f764a7a7c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504fc98849efec8cbd82c82f88170e30cfeee13a16814fdbce13b08b3c33fb7a7bbeb6ff6ed96b0f5e773582ef20c9901f952068dbfdd76ad18f47ccd228d0d38dabb6563a8b033af894af4567cbc96ff3c421620319f44a70c4e0563d169c88fec22e90d2ad36694bc6ea06004d27259e346cbb81d000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb3d13d24b87a716f270e24ecb5e6d6fb7b8b49e761d815a06daf4cbf19d63340", + "input": "0x8ef1332e000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562000000000000000000000000694c7feee8bdad3c5d58dcbeb3da08b122ff27760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c100000000000000000000000038cb00e044d3cdd3c9f90b7efde61ef62e38fdf3000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a49000000000000000000000000cf360f1fc8763a38e3e1a19947bceb9f764a7a7c0000000000000000000000003c21c3f27cfed594105e8fccdb8acbae5e7c7a04000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0", "to": "0xdf45f4790e20509959fccc0d09245b216abdaa37", "transactionIndex": "0x0", diff --git a/crates/integration/testdata/validium/witnesses/397_validium_txs.json b/crates/integration/testdata/validium/witnesses/397_validium_txs.json index 94e1bd81..9c66d726 100644 --- a/crates/integration/testdata/validium/witnesses/397_validium_txs.json +++ b/crates/integration/testdata/validium/witnesses/397_validium_txs.json @@ -5,8 +5,8 @@ "from": "0xfeea7a92fd46c25a475829f1975876ba48c13ceb", "gas": "0xf4240", "gasPrice": "0x0", - "hash": "0x48594f3ac763e40087a762e9e49d2f472fe63b45a08802117e86dfc8293a5e1c", - "input": "0x8ef1332e000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562000000000000000000000000694c7feee8bdad3c5d58dcbeb3da08b122ff27760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000344f839517f00000000000000000000000038cb00e044d3cdd3c9f90b7efde61ef62e38fdf3000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a49000000000000000000000000cf360f1fc8763a38e3e1a19947bceb9f764a7a7c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000007504a928b626e9f3420e05aa33c24616c6a7389bf9925390caeff341a9613f065788b8efbba5f2424ddb48a0c4f6254a67aa57753116d44905cd5ab6d9ca5a9715cfa11cff5a3047a766e7444ff1bdc786bb5bfe5a91f6ff4dfa59394bca5c2b3e203f98cf6e06ae19790c00b6ee488f980aa6d0f039000000000000000000000000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfbc06aac379325a19cb199253cc42b4fcd8cb5971a215636420dcf8ca1652ae8", + "input": "0x8ef1332e000000000000000000000000fbe0c68e2241aa4e65c553e558a1f87ae920e562000000000000000000000000694c7feee8bdad3c5d58dcbeb3da08b122ff27760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002a48431f5c100000000000000000000000038cb00e044d3cdd3c9f90b7efde61ef62e38fdf3000000000000000000000000928a1909db63ae7813e6318d098fd17439ec0a49000000000000000000000000cf360f1fc8763a38e3e1a19947bceb9f764a7a7c00000000000000000000000028d77629c6a8220538c351cc6bab30da0d395e34000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000045745544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d577261707065642045746865720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0", "to": "0xdf45f4790e20509959fccc0d09245b216abdaa37", "transactionIndex": "0x0",