From ab699dbe8cffa8bd291d6054579061b47fd4aa0e Mon Sep 17 00:00:00 2001 From: Akosh Farkash Date: Wed, 10 Jul 2024 20:19:31 +0100 Subject: [PATCH] feat: L1 batch signing (BFT-474) (#2414) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ Implements the methods on `PersistentBatchStore` required by consensus to sign and publish attestations over L1 batches. Calculates the hash value which needs to be signed by attestors using `SignedBatchInfo::hash()`. ## Why ❔ This allows consensus to figure out which is the first batch that needs to be signed after the node starts, and subsequently to retrieve the payload to be signed as well. ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [x] Tests for the changes have been added / updated. - [x] Documentation comments have been added / updated. - [x] Code has been formatted via `zk fmt` and `zk lint`. --------- Co-authored-by: Bruno França --- Cargo.lock | 41 +++++----- Cargo.toml | 20 ++--- core/lib/config/src/configs/consensus.rs | 7 ++ core/lib/config/src/testonly.rs | 1 + core/lib/dal/src/consensus_dal.rs | 40 ++++------ core/lib/protobuf_config/src/consensus.rs | 26 ++++++- .../src/proto/core/consensus.proto | 3 + core/node/consensus/src/config.rs | 1 + core/node/consensus/src/storage/connection.rs | 25 +++++- core/node/consensus/src/storage/store.rs | 78 +++++++++++++++---- core/node/consensus/src/testonly.rs | 1 + prover/Cargo.lock | 29 +++---- zk_toolbox/Cargo.lock | 16 ++-- 13 files changed, 189 insertions(+), 99 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ef4bfbd41ad0..de8460372bba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8108,9 +8108,9 @@ dependencies = [ [[package]] name = "zksync_concurrency" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28279a743cd2ec5a0e3f0fec31b2e4fdd509d0b513e0aaeb000200ce464123e5" +checksum = "1af85d9a31c534a29877c88474cf5f1c46ad25f7c48efff61ea40f4aa83c5459" dependencies = [ "anyhow", "once_cell", @@ -8142,9 +8142,9 @@ dependencies = [ [[package]] name = "zksync_consensus_bft" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "011210cdeb207516fe95ec2c8a77b3c36e444e2cd17e7db57afdc55a263025d6" +checksum = "ddbee11ed4fafe461092fb73d3879325f08243fe50351baab6b5f593fee88f06" dependencies = [ "anyhow", "async-trait", @@ -8164,9 +8164,9 @@ dependencies = [ [[package]] name = "zksync_consensus_crypto" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dbbc36ff78548f022192f20fb76909b1b0a460fc85289ccc54ce0ce54263165" +checksum = "7b3867f9b4778616d87f157d1049e47290a3bca5ec9db208164f8902524ae92c" dependencies = [ "anyhow", "blst", @@ -8188,9 +8188,9 @@ dependencies = [ [[package]] name = "zksync_consensus_executor" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f6811105b9b0fffb5983382c504d466a415f41f4a3b0f6743837bcbfc0b332" +checksum = "2e7d50aa34616a9c1f4cdc7c47aae2df61474e137e41125c9d5fbfc1e5a1faaa" dependencies = [ "anyhow", "rand 0.8.5", @@ -8208,9 +8208,9 @@ dependencies = [ [[package]] name = "zksync_consensus_network" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79538ef206af7006c94c8d047582cf214ac493f7dd8340d40cace4f248d8c35" +checksum = "ced7deafe460c74321edf79486980f9f75da121a1e52e5805392946dabafdf82" dependencies = [ "anyhow", "async-trait", @@ -8243,9 +8243,9 @@ dependencies = [ [[package]] name = "zksync_consensus_roles" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0070c54eed2f5cf26e76d9ec3ccdf05fdafb18c0712c8d97ef4987634972396" +checksum = "55dacdf1bad5d9efe7dd9db200421afa0c3bf5cfc7fdce4a64720a5dd0685807" dependencies = [ "anyhow", "bit-vec", @@ -8265,9 +8265,9 @@ dependencies = [ [[package]] name = "zksync_consensus_storage" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d221fbd8e22f49175132c252a4923a945c1fa4a548ad66c3fc0366789cc9e53" +checksum = "f796020459775391094b9dcd133f01b5127059fe167cf412b2d1aed23fe0e52f" dependencies = [ "anyhow", "async-trait", @@ -8277,6 +8277,7 @@ dependencies = [ "tracing", "vise", "zksync_concurrency", + "zksync_consensus_crypto", "zksync_consensus_roles", "zksync_protobuf", "zksync_protobuf_build", @@ -8284,9 +8285,9 @@ dependencies = [ [[package]] name = "zksync_consensus_utils" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c3d9b3b6b795ce16e0ead2b8813a2f7a1a01c9a9e3fb50993d6ecbfcdbca98" +checksum = "587de103f745d0b88b49a9fb98cb002c4b7ce6ad042e17845091dce67b8aa984" dependencies = [ "anyhow", "rand 0.8.5", @@ -9231,9 +9232,9 @@ dependencies = [ [[package]] name = "zksync_protobuf" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe77d262206bb22f4bc26e75b68466b2e7043baa4963fe97190ce8540a5d700" +checksum = "d86baa84d8bbbbeea269c0f99aca88364e4fd2a08e6ae7051ff87317132b4ef9" dependencies = [ "anyhow", "bit-vec", @@ -9252,9 +9253,9 @@ dependencies = [ [[package]] name = "zksync_protobuf_build" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1205d607aa7291e3e016ce202d97cd7eb7d232913076dd873cbe48d564bf656" +checksum = "f221ce83f4622c3d8732d09f4461d116d7b10f1cc9d1d1cd014c1fa836c168e6" dependencies = [ "anyhow", "heck 0.5.0", diff --git a/Cargo.toml b/Cargo.toml index b9e24fe6fb53..f36af0a33c3e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -207,16 +207,16 @@ zk_evm_1_4_1 = { package = "zk_evm", version = "0.141.0" } zk_evm_1_5_0 = { package = "zk_evm", version = "0.150.0" } # Consensus dependencies. -zksync_concurrency = "=0.1.0-rc.1" -zksync_consensus_bft = "=0.1.0-rc.1" -zksync_consensus_crypto = "=0.1.0-rc.1" -zksync_consensus_executor = "=0.1.0-rc.1" -zksync_consensus_network = "=0.1.0-rc.1" -zksync_consensus_roles = "=0.1.0-rc.1" -zksync_consensus_storage = "=0.1.0-rc.1" -zksync_consensus_utils = "=0.1.0-rc.1" -zksync_protobuf = "=0.1.0-rc.1" -zksync_protobuf_build = "=0.1.0-rc.1" +zksync_concurrency = "=0.1.0-rc.2" +zksync_consensus_bft = "=0.1.0-rc.2" +zksync_consensus_crypto = "=0.1.0-rc.2" +zksync_consensus_executor = "=0.1.0-rc.2" +zksync_consensus_network = "=0.1.0-rc.2" +zksync_consensus_roles = "=0.1.0-rc.2" +zksync_consensus_storage = "=0.1.0-rc.2" +zksync_consensus_utils = "=0.1.0-rc.2" +zksync_protobuf = "=0.1.0-rc.2" +zksync_protobuf_build = "=0.1.0-rc.2" # "Local" dependencies zksync_multivm = { path = "core/lib/multivm" } diff --git a/core/lib/config/src/configs/consensus.rs b/core/lib/config/src/configs/consensus.rs index ec4edd486ac0..50885a6ec6fe 100644 --- a/core/lib/config/src/configs/consensus.rs +++ b/core/lib/config/src/configs/consensus.rs @@ -120,6 +120,13 @@ pub struct ConsensusConfig { /// Maximal allowed size of the payload in bytes. pub max_payload_size: usize, + /// Maximal allowed size of the sync-batch payloads in bytes. + /// + /// The batch consists of block payloads and a Merkle proof of inclusion on L1 (~1kB), + /// so the maximum batch size should be the maximum payload size times the maximum number + /// of blocks in a batch. + pub max_batch_size: usize, + /// Limit on the number of inbound connections outside /// of the `static_inbound` set. pub gossip_dynamic_inbound_limit: usize, diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index c41180fe42b3..b9a78676697e 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -755,6 +755,7 @@ impl Distribution for EncodeDist { server_addr: self.sample(rng), public_addr: Host(self.sample(rng)), max_payload_size: self.sample(rng), + max_batch_size: self.sample(rng), gossip_dynamic_inbound_limit: self.sample(rng), gossip_static_inbound: self .sample_range(rng) diff --git a/core/lib/dal/src/consensus_dal.rs b/core/lib/dal/src/consensus_dal.rs index 3efdf5ee577b..7655abbe230c 100644 --- a/core/lib/dal/src/consensus_dal.rs +++ b/core/lib/dal/src/consensus_dal.rs @@ -7,7 +7,7 @@ use zksync_db_connection::{ error::{DalError, DalResult, SqlxContext}, instrument::{InstrumentExt, Instrumented}, }; -use zksync_types::{L1BatchNumber, L2BlockNumber}; +use zksync_types::L2BlockNumber; pub use crate::consensus::Payload; use crate::{Core, CoreDal}; @@ -409,29 +409,12 @@ impl ConsensusDal<'_, '_> { /// /// Insertion is allowed even if it creates gaps in the L1 batch history. /// - /// It fails if the batch payload is missing or it's not consistent with the QC. + /// This method assumes that all payload validation has been carried out by the caller. pub async fn insert_batch_certificate( &mut self, cert: &attester::BatchQC, ) -> Result<(), InsertCertificateError> { - use InsertCertificateError as E; - let mut txn = self.storage.start_transaction().await?; - - let l1_batch_number = L1BatchNumber(cert.message.number.0 as u32); - let _l1_batch_header = txn - .blocks_dal() - .get_l1_batch_header(l1_batch_number) - .await? - .ok_or(E::MissingPayload)?; - - // TODO: Verify that the certificate matches the stored batch: - // * add the hash of the batch to the `BatchQC` - // * find out which field in the `l1_batches` table contains the hash we need to match - // * ideally move the responsibility of validation outside this method - - // if header.payload != want_payload.encode().hash() { - // return Err(E::PayloadMismatch); - // } + let l1_batch_number = cert.message.number.0 as i64; let res = sqlx::query!( r#" @@ -441,20 +424,18 @@ impl ConsensusDal<'_, '_> { ($1, $2, NOW(), NOW()) ON CONFLICT (l1_batch_number) DO NOTHING "#, - i64::from(l1_batch_number.0), + l1_batch_number, zksync_protobuf::serde::serialize(cert, serde_json::value::Serializer).unwrap(), ) .instrument("insert_batch_certificate") .report_latency() - .execute(&mut txn) + .execute(self.storage) .await?; if res.rows_affected().is_zero() { - tracing::debug!(%l1_batch_number, "duplicate batch certificate"); + tracing::debug!(l1_batch_number, "duplicate batch certificate"); } - txn.commit().await.context("commit")?; - Ok(()) } @@ -551,7 +532,8 @@ mod tests { // Insert some mock L2 blocks and L1 batches let mut block_number = 0; let mut batch_number = 0; - for _ in 0..3 { + let num_batches = 3; + for _ in 0..num_batches { for _ in 0..3 { block_number += 1; let l2_block = create_l2_block_header(block_number); @@ -612,5 +594,11 @@ mod tests { .insert_batch_certificate(&cert3) .await .expect_err("missing payload"); + + // Insert one more L1 batch without a certificate. + conn.blocks_dal() + .insert_mock_l1_batch(&create_l1_batch_header(batch_number + 1)) + .await + .unwrap(); } } diff --git a/core/lib/protobuf_config/src/consensus.rs b/core/lib/protobuf_config/src/consensus.rs index c04120edcc54..a659a6f16abc 100644 --- a/core/lib/protobuf_config/src/consensus.rs +++ b/core/lib/protobuf_config/src/consensus.rs @@ -4,7 +4,7 @@ use zksync_config::configs::consensus::{ AttesterPublicKey, ConsensusConfig, GenesisSpec, Host, NodePublicKey, ProtocolVersion, RpcConfig, ValidatorPublicKey, WeightedAttester, WeightedValidator, }; -use zksync_protobuf::{read_optional, repr::ProtoRepr, required, ProtoFmt}; +use zksync_protobuf::{kB, read_optional, repr::ProtoRepr, required, ProtoFmt}; use crate::{proto::consensus as proto, read_optional_repr}; @@ -100,14 +100,31 @@ impl ProtoRepr for proto::Config { let addr = Host(required(&e.addr).context("addr")?.clone()); anyhow::Ok((key, addr)) }; + + let max_payload_size = required(&self.max_payload_size) + .and_then(|x| Ok((*x).try_into()?)) + .context("max_payload_size")?; + + let max_batch_size = match self.max_batch_size { + Some(x) => x.try_into().context("max_batch_size")?, + None => { + // Compute a default batch size, so operators are not caught out by the missing setting + // while we're still working on batch syncing. The batch interval is ~1 minute, + // so there will be ~60 blocks, and an Ethereum Merkle proof is ~1kB, but under high + // traffic there can be thousands of huge transactions that quickly fill up blocks + // and there could be more blocks in a batch then expected. We chose a generous + // limit so as not to prevent any legitimate batch from being transmitted. + max_payload_size * 5000 + kB + } + }; + Ok(Self::Type { server_addr: required(&self.server_addr) .and_then(|x| Ok(x.parse()?)) .context("server_addr")?, public_addr: Host(required(&self.public_addr).context("public_addr")?.clone()), - max_payload_size: required(&self.max_payload_size) - .and_then(|x| Ok((*x).try_into()?)) - .context("max_payload_size")?, + max_payload_size, + max_batch_size, gossip_dynamic_inbound_limit: required(&self.gossip_dynamic_inbound_limit) .and_then(|x| Ok((*x).try_into()?)) .context("gossip_dynamic_inbound_limit")?, @@ -132,6 +149,7 @@ impl ProtoRepr for proto::Config { server_addr: Some(this.server_addr.to_string()), public_addr: Some(this.public_addr.0.clone()), max_payload_size: Some(this.max_payload_size.try_into().unwrap()), + max_batch_size: Some(this.max_batch_size.try_into().unwrap()), gossip_dynamic_inbound_limit: Some( this.gossip_dynamic_inbound_limit.try_into().unwrap(), ), diff --git a/core/lib/protobuf_config/src/proto/core/consensus.proto b/core/lib/protobuf_config/src/proto/core/consensus.proto index 2adc70886e9e..c64c993be7c8 100644 --- a/core/lib/protobuf_config/src/proto/core/consensus.proto +++ b/core/lib/protobuf_config/src/proto/core/consensus.proto @@ -78,6 +78,9 @@ message Config { // Maximal allowed size of the payload. optional uint64 max_payload_size = 4; // required; bytes + // Maximal allowed size of the sync batches. + optional uint64 max_batch_size = 10; // required; bytes + // Inbound connections that should be unconditionally accepted on the gossip network. repeated string gossip_static_inbound = 5; // required; NodePublicKey diff --git a/core/node/consensus/src/config.rs b/core/node/consensus/src/config.rs index 75e329d6c347..f2ca16956a2d 100644 --- a/core/node/consensus/src/config.rs +++ b/core/node/consensus/src/config.rs @@ -126,6 +126,7 @@ pub(super) fn executor( server_addr: cfg.server_addr, public_addr: net::Host(cfg.public_addr.0.clone()), max_payload_size: cfg.max_payload_size, + max_batch_size: cfg.max_batch_size, node_key: node_key(secrets) .context("node_key")? .context("missing node_key")?, diff --git a/core/node/consensus/src/storage/connection.rs b/core/node/consensus/src/storage/connection.rs index 1d8dfc3aed57..ad27490bfa81 100644 --- a/core/node/consensus/src/storage/connection.rs +++ b/core/node/consensus/src/storage/connection.rs @@ -3,6 +3,7 @@ use zksync_concurrency::{ctx, error::Wrap as _, time}; use zksync_consensus_roles::{attester, validator}; use zksync_consensus_storage::{self as storage, BatchStoreState}; use zksync_dal::{consensus_dal::Payload, Core, CoreDal, DalError}; +use zksync_l1_contract_interface::i_executor::structures::StoredBatchInfo; use zksync_node_sync::{fetcher::IoCursorExt as _, ActionQueueSender, SyncState}; use zksync_state_keeper::io::common::IoCursor; use zksync_types::{commitment::L1BatchWithMetadata, L1BatchNumber}; @@ -120,6 +121,26 @@ impl<'a> Connection<'a> { ctx: &ctx::Ctx, cert: &attester::BatchQC, ) -> Result<(), InsertCertificateError> { + use crate::storage::consensus_dal::InsertCertificateError as E; + + let l1_batch_number = L1BatchNumber(cert.message.number.0 as u32); + + let Some(l1_batch) = self + .0 + .blocks_dal() + .get_l1_batch_metadata(l1_batch_number) + .await + .map_err(E::Dal)? + else { + return Err(E::MissingPayload.into()); + }; + + let l1_batch_info = StoredBatchInfo::from(&l1_batch); + + if l1_batch_info.hash().0 != *cert.message.hash.0.as_bytes() { + return Err(E::PayloadMismatch.into()); + } + Ok(ctx .wait(self.0.consensus_dal().insert_batch_certificate(cert)) .await??) @@ -344,8 +365,8 @@ impl<'a> Connection<'a> { // TODO: Fill out the proof when we have the stateless L1 batch validation story finished. // It is supposed to be a Merkle proof that the rolling hash of the batch has been included - // in the L1 state tree. The state root hash of L1 won't be available in the DB, it requires - // an API client. + // in the L1 system contract state tree. It is *not* the Ethereum state root hash, so producing + // it can be done without an L1 client, which is only required for validation. let batch = attester::SyncBatch { number, payloads, diff --git a/core/node/consensus/src/storage/store.rs b/core/node/consensus/src/storage/store.rs index c196989c300b..ad8f4948831b 100644 --- a/core/node/consensus/src/storage/store.rs +++ b/core/node/consensus/src/storage/store.rs @@ -3,11 +3,13 @@ use std::sync::Arc; use anyhow::Context as _; use zksync_concurrency::{ctx, error::Wrap as _, scope, sync, time}; use zksync_consensus_bft::PayloadManager; +use zksync_consensus_crypto::keccak256::Keccak256; use zksync_consensus_roles::{attester, validator}; use zksync_consensus_storage::{self as storage, BatchStoreState}; use zksync_dal::consensus_dal::{self, Payload}; +use zksync_l1_contract_interface::i_executor::structures::StoredBatchInfo; use zksync_node_sync::fetcher::{FetchedBlock, FetchedTransaction}; -use zksync_types::L2BlockNumber; +use zksync_types::{L1BatchNumber, L2BlockNumber}; use super::{Connection, PayloadQueue}; use crate::storage::{ConnectionPool, InsertCertificateError}; @@ -441,20 +443,36 @@ impl PayloadManager for Store { impl storage::PersistentBatchStore for Store { /// Range of batches persisted in storage. fn persisted(&self) -> sync::watch::Receiver { - // Normally we'd return this, but it causes the following test to run forever: - // RUST_LOG=info zk test rust test_full_nodes --no-capture - // - // The error seems to be related to the size of messages, although I'm not sure - // why it retries it forever. Since the gossip of SyncBatch is not fully functional - // yet, for now let's just return a fake response that never changes, which should - // disable gossiping on honest nodes. - let _ = self.batches_persisted.clone(); - - sync::watch::channel(storage::BatchStoreState { - first: attester::BatchNumber(0), - last: None, - }) - .1 + self.batches_persisted.clone() + } + + /// Get the earliest L1 batch number which has to be (re)signed by a node. + /// + /// Ideally we would make this decision by looking up the last batch submitted to L1, + /// and so it might require a quorum of attesters to sign a certificate for it. + async fn earliest_batch_number_to_sign( + &self, + ctx: &ctx::Ctx, + ) -> ctx::Result> { + // This is the rough roadmap of how this logic will evolve: + // 1. Make best effort at gossiping and collecting votes; the `BatchVotes` in consensus only considers the last vote per attesters. + // Still, we can re-sign more than the last batch, anticipating step 2. + // 2. Change `BatchVotes` to handle multiple pending batch numbers, anticipating that batch intervals might decrease dramatically. + // 3. Ask the Main Node what is the earliest batch number that it still expects votes for (ie. what is the last submission + 1). + // 4. Look at L1 to figure out what is the last submssion, and sign after that. + + // Originally this method returned all unsigned batch numbers by doing a DAL query, but we decided it shoudl be okay and cheap + // to resend signatures for already signed batches, and we don't have to worry about skipping them. Because of that, we also + // didn't think it makes sense to query the database for the earliest unsigned batch *after* the submission, because we might + // as well just re-sign everything. Until we have a way to argue about the "last submission" we just re-sign the last 10 to + // try to produce as many QCs as the voting register allows, within reason. + + let Some(last_batch_number) = self.last_batch(ctx).await? else { + return Ok(None); + }; + Ok(Some(attester::BatchNumber( + last_batch_number.0.saturating_sub(10), + ))) } /// Get the highest L1 batch number from storage. @@ -498,6 +516,36 @@ impl storage::PersistentBatchStore for Store { .wrap("get_batch") } + /// Returns the [attester::Batch] with the given number, which is the `message` that + /// appears in [attester::BatchQC], and represents the content that needs to be signed + /// by the attesters. + async fn get_batch_to_sign( + &self, + ctx: &ctx::Ctx, + number: attester::BatchNumber, + ) -> ctx::Result> { + let Some(batch) = self + .conn(ctx) + .await? + .batch( + ctx, + L1BatchNumber(u32::try_from(number.0).context("number")?), + ) + .await + .wrap("batch")? + else { + return Ok(None); + }; + + let info = StoredBatchInfo::from(&batch); + let hash = Keccak256::from_bytes(info.hash().0); + + Ok(Some(attester::Batch { + number, + hash: attester::BatchHash(hash), + })) + } + /// Returns the QC of the batch with the given number. async fn get_batch_qc( &self, diff --git a/core/node/consensus/src/testonly.rs b/core/node/consensus/src/testonly.rs index 7ca518a183a7..922b53f11f8d 100644 --- a/core/node/consensus/src/testonly.rs +++ b/core/node/consensus/src/testonly.rs @@ -79,6 +79,7 @@ pub(super) fn config(cfg: &network::Config) -> (config::ConsensusConfig, config: server_addr: *cfg.server_addr, public_addr: config::Host(cfg.public_addr.0.clone()), max_payload_size: usize::MAX, + max_batch_size: usize::MAX, gossip_dynamic_inbound_limit: cfg.gossip.dynamic_inbound_limit, gossip_static_inbound: cfg .gossip diff --git a/prover/Cargo.lock b/prover/Cargo.lock index 0bb525c98664..5bc006faa457 100644 --- a/prover/Cargo.lock +++ b/prover/Cargo.lock @@ -7763,9 +7763,9 @@ dependencies = [ [[package]] name = "zksync_concurrency" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28279a743cd2ec5a0e3f0fec31b2e4fdd509d0b513e0aaeb000200ce464123e5" +checksum = "1af85d9a31c534a29877c88474cf5f1c46ad25f7c48efff61ea40f4aa83c5459" dependencies = [ "anyhow", "once_cell", @@ -7797,9 +7797,9 @@ dependencies = [ [[package]] name = "zksync_consensus_crypto" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dbbc36ff78548f022192f20fb76909b1b0a460fc85289ccc54ce0ce54263165" +checksum = "7b3867f9b4778616d87f157d1049e47290a3bca5ec9db208164f8902524ae92c" dependencies = [ "anyhow", "blst", @@ -7821,9 +7821,9 @@ dependencies = [ [[package]] name = "zksync_consensus_roles" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0070c54eed2f5cf26e76d9ec3ccdf05fdafb18c0712c8d97ef4987634972396" +checksum = "55dacdf1bad5d9efe7dd9db200421afa0c3bf5cfc7fdce4a64720a5dd0685807" dependencies = [ "anyhow", "bit-vec", @@ -7843,9 +7843,9 @@ dependencies = [ [[package]] name = "zksync_consensus_storage" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d221fbd8e22f49175132c252a4923a945c1fa4a548ad66c3fc0366789cc9e53" +checksum = "f796020459775391094b9dcd133f01b5127059fe167cf412b2d1aed23fe0e52f" dependencies = [ "anyhow", "async-trait", @@ -7855,6 +7855,7 @@ dependencies = [ "tracing", "vise", "zksync_concurrency", + "zksync_consensus_crypto", "zksync_consensus_roles", "zksync_protobuf", "zksync_protobuf_build", @@ -7862,9 +7863,9 @@ dependencies = [ [[package]] name = "zksync_consensus_utils" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c3d9b3b6b795ce16e0ead2b8813a2f7a1a01c9a9e3fb50993d6ecbfcdbca98" +checksum = "587de103f745d0b88b49a9fb98cb002c4b7ce6ad042e17845091dce67b8aa984" dependencies = [ "anyhow", "rand 0.8.5", @@ -8182,9 +8183,9 @@ dependencies = [ [[package]] name = "zksync_protobuf" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe77d262206bb22f4bc26e75b68466b2e7043baa4963fe97190ce8540a5d700" +checksum = "d86baa84d8bbbbeea269c0f99aca88364e4fd2a08e6ae7051ff87317132b4ef9" dependencies = [ "anyhow", "bit-vec", @@ -8203,9 +8204,9 @@ dependencies = [ [[package]] name = "zksync_protobuf_build" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1205d607aa7291e3e016ce202d97cd7eb7d232913076dd873cbe48d564bf656" +checksum = "f221ce83f4622c3d8732d09f4461d116d7b10f1cc9d1d1cd014c1fa836c168e6" dependencies = [ "anyhow", "heck 0.5.0", diff --git a/zk_toolbox/Cargo.lock b/zk_toolbox/Cargo.lock index 29547a4b47fe..5b85dc5f8e99 100644 --- a/zk_toolbox/Cargo.lock +++ b/zk_toolbox/Cargo.lock @@ -6380,9 +6380,9 @@ dependencies = [ [[package]] name = "zksync_concurrency" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28279a743cd2ec5a0e3f0fec31b2e4fdd509d0b513e0aaeb000200ce464123e5" +checksum = "1af85d9a31c534a29877c88474cf5f1c46ad25f7c48efff61ea40f4aa83c5459" dependencies = [ "anyhow", "once_cell", @@ -6414,9 +6414,9 @@ dependencies = [ [[package]] name = "zksync_consensus_utils" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c3d9b3b6b795ce16e0ead2b8813a2f7a1a01c9a9e3fb50993d6ecbfcdbca98" +checksum = "587de103f745d0b88b49a9fb98cb002c4b7ce6ad042e17845091dce67b8aa984" dependencies = [ "anyhow", "rand", @@ -6476,9 +6476,9 @@ dependencies = [ [[package]] name = "zksync_protobuf" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe77d262206bb22f4bc26e75b68466b2e7043baa4963fe97190ce8540a5d700" +checksum = "d86baa84d8bbbbeea269c0f99aca88364e4fd2a08e6ae7051ff87317132b4ef9" dependencies = [ "anyhow", "bit-vec", @@ -6497,9 +6497,9 @@ dependencies = [ [[package]] name = "zksync_protobuf_build" -version = "0.1.0-rc.1" +version = "0.1.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1205d607aa7291e3e016ce202d97cd7eb7d232913076dd873cbe48d564bf656" +checksum = "f221ce83f4622c3d8732d09f4461d116d7b10f1cc9d1d1cd014c1fa836c168e6" dependencies = [ "anyhow", "heck 0.5.0",