From ff06e9bc3cbf0143f3bcc71e38892be8ba90f1aa Mon Sep 17 00:00:00 2001 From: Saketh Are Date: Fri, 11 Oct 2024 15:43:53 +0100 Subject: [PATCH 1/2] fix(state sync): handle StateResponse on state_parts_future_spawner (#12205) Before this PR, when a state part arrived via a network message from a peer, it was validated and stored by the client actor. As a result, the client actor could become slow to apply blocks causing the node to fall behind the chain. Instead, the state parts should be handled async on `state_parts_future_spawner` the same way they are when downloaded from external storage. --------- Co-authored-by: Marcelo Diop-Gonzalez --- chain/client/src/client_actor.rs | 4 + chain/client/src/sync/state.rs | 175 +++++++++++++++++++++---------- 2 files changed, 123 insertions(+), 56 deletions(-) diff --git a/chain/client/src/client_actor.rs b/chain/client/src/client_actor.rs index ca1af1f4513..a34291c5171 100644 --- a/chain/client/src/client_actor.rs +++ b/chain/client/src/client_actor.rs @@ -620,6 +620,8 @@ impl Handler for ClientActorInner { shard_id, state_response, &mut self.client.chain, + self.state_parts_future_spawner.as_ref(), + self.client.runtime_adapter.clone(), ); return; } @@ -637,6 +639,8 @@ impl Handler for ClientActorInner { shard_id, state_response, &mut self.client.chain, + self.state_parts_future_spawner.as_ref(), + self.client.runtime_adapter.clone(), ); return; } diff --git a/chain/client/src/sync/state.rs b/chain/client/src/sync/state.rs index 681f32a01e1..9f945dc792d 100644 --- a/chain/client/src/sync/state.rs +++ b/chain/client/src/sync/state.rs @@ -27,7 +27,7 @@ use crate::sync::external::{ use borsh::BorshDeserialize; use futures::{future, FutureExt}; use near_async::futures::{FutureSpawner, FutureSpawnerExt}; -use near_async::messaging::{CanSend, SendAsync}; +use near_async::messaging::SendAsync; use near_async::time::{Clock, Duration, Utc}; use near_chain::chain::{ApplyStatePartsRequest, LoadMemtrieRequest}; use near_chain::near_chain_primitives; @@ -40,7 +40,7 @@ use near_client_primitives::types::{ use near_epoch_manager::EpochManagerAdapter; use near_network::types::{ HighestHeightPeerInfo, NetworkRequests, NetworkResponses, PeerManagerAdapter, - PeerManagerMessageRequest, StateSyncEvent, + PeerManagerMessageRequest, }; use near_primitives::hash::CryptoHash; use near_primitives::network::PeerId; @@ -83,6 +83,12 @@ pub enum StateSyncFileDownloadResult { StatePart { part_length: u64 }, } +#[derive(PartialEq, Eq)] +enum PartProvenance { + Peers, + External, +} + /// Signals that a state part was downloaded and saved to RocksDB. /// Or failed to do so. pub struct StateSyncGetFileResult { @@ -90,6 +96,7 @@ pub struct StateSyncGetFileResult { shard_id: ShardId, part_id: Option, result: Result, + provenance: PartProvenance, } struct StateSyncExternal { @@ -346,8 +353,13 @@ impl StateSync { sync_hash: CryptoHash, shard_sync: &mut HashMap, ) { - for StateSyncGetFileResult { sync_hash: msg_sync_hash, shard_id, part_id, result } in - self.state_parts_mpsc_rx.try_iter() + for StateSyncGetFileResult { + sync_hash: msg_sync_hash, + shard_id, + part_id, + result, + provenance, + } in self.state_parts_mpsc_rx.try_iter() { if msg_sync_hash != sync_hash { tracing::debug!(target: "sync", @@ -399,6 +411,7 @@ impl StateSync { download, file_type, download_result, + provenance, ); } } @@ -721,22 +734,24 @@ impl StateSync { pub fn update_download_on_state_response_message( &mut self, shard_sync_download: &mut ShardSyncDownload, - hash: CryptoHash, + sync_hash: CryptoHash, shard_id: u64, state_response: ShardStateSyncResponse, chain: &mut Chain, + state_parts_future_spawner: &dyn FutureSpawner, + runtime_adapter: Arc, ) { match shard_sync_download.status { ShardSyncStatus::StateDownloadHeader => { let header_download = shard_sync_download.get_header_download_mut().unwrap(); if let Some(header) = state_response.take_header() { if !header_download.done { - match chain.set_state_header(shard_id, hash, header) { + match chain.set_state_header(shard_id, sync_hash, header) { Ok(()) => { header_download.done = true; } Err(err) => { - tracing::error!(target: "sync", %shard_id, %hash, ?err, "State sync set_state_header error"); + tracing::error!(target: "sync", %shard_id, %sync_hash, ?err, "State sync set_state_header error"); header_download.error = true; } } @@ -745,7 +760,7 @@ impl StateSync { // No header found. // It may happen because requested node couldn't build state response. if !header_download.done { - tracing::info!(target: "sync", %shard_id, %hash, "state_response doesn't have header, should be re-requested"); + tracing::info!(target: "sync", %shard_id, %sync_hash, "state_response doesn't have header, should be re-requested"); header_download.error = true; } } @@ -755,27 +770,43 @@ impl StateSync { let num_parts = shard_sync_download.downloads.len() as u64; let (part_id, data) = part; if part_id >= num_parts { - tracing::error!(target: "sync", %shard_id, %hash, part_id, "State sync received incorrect part_id, potential malicious peer"); + tracing::error!(target: "sync", %shard_id, %sync_hash, part_id, "State sync received incorrect part_id, potential malicious peer"); return; } if !shard_sync_download.downloads[part_id as usize].done { - match chain.set_state_part( - shard_id, - hash, - PartId::new(part_id, num_parts), - &data, - ) { - Ok(()) => { - tracing::debug!(target: "sync", %shard_id, %hash, part_id, "Received correct start part"); - self.network_adapter - .send(StateSyncEvent::StatePartReceived(shard_id, part_id)); - shard_sync_download.downloads[part_id as usize].done = true; - } - Err(err) => { - tracing::error!(target: "sync", %shard_id, %hash, part_id, ?err, "State sync set_state_part error"); - shard_sync_download.downloads[part_id as usize].error = true; + let state_root = chain + .get_state_header(shard_id, sync_hash) + .unwrap() + .chunk_prev_state_root(); + let runtime_adapter = runtime_adapter.clone(); + let part_id = PartId { idx: part_id, total: num_parts }; + let state_parts_mpsc_tx = self.state_parts_mpsc_tx.clone(); + state_parts_future_spawner.spawn( + "update_download_on_state_response_message", + async move { + let result = try_validate_and_store_received_state_part( + part_id, + shard_id, + sync_hash, + state_root, + data, + runtime_adapter + ); + + match state_parts_mpsc_tx.send(StateSyncGetFileResult { + sync_hash, + shard_id, + part_id: Some(part_id), + result, + provenance: PartProvenance::Peers, + }) { + Ok(_) => tracing::debug!(target: "sync", %shard_id, ?part_id, "Download response sent to processing thread."), + Err(err) => { + tracing::error!(target: "sync", ?err, %shard_id, ?part_id, "Unable to send part download response to processing thread."); + }, + } } - } + ); } } } @@ -1110,6 +1141,7 @@ fn request_header_from_external_storage( shard_id, part_id: None, result, + provenance: PartProvenance::External, }) { Ok(_) => tracing::debug!(target: "sync", %shard_id, "Download header response sent to processing thread."), Err(err) => { @@ -1130,26 +1162,19 @@ async fn download_and_store_part_from_external_storage( external: ExternalConnection, runtime_adapter: Arc, ) -> Result { - external - .get_file(shard_id, &location, file_type) - .await - .map_err(|err| err.to_string()) - .and_then(|data| { - info!(target: "sync", ?shard_id, ?part_id, "downloaded state part"); - if runtime_adapter.validate_state_part(&state_root, part_id, &data) { - let mut store_update = runtime_adapter.store().store_update(); - borsh::to_vec(&StatePartKey(sync_hash, shard_id, part_id.idx)) - .and_then(|key| { - store_update.set(DBCol::StateParts, &key, &data); - store_update.commit() - }) - .map_err(|err| format!("Failed to store a state part. err={err:?}, state_root={state_root:?}, part_id={part_id:?}, shard_id={shard_id:?}")) - .map(|_| data.len() as u64) - .map(|part_length| StateSyncFileDownloadResult::StatePart { part_length }) - } else { - Err(format!("validate_state_part failed. state_root={state_root:?}, part_id={part_id:?}, shard_id={shard_id}")) - } - }) + external.get_file(shard_id, &location, file_type).await.map_err(|err| err.to_string()).and_then( + |data| { + info!(target: "sync", ?shard_id, ?part_id, "downloaded state part"); + try_validate_and_store_received_state_part( + part_id, + shard_id, + sync_hash, + state_root, + data, + runtime_adapter, + ) + }, + ) } /// Starts an asynchronous network request to external storage to fetch the given state part. fn request_part_from_external_storage( @@ -1206,6 +1231,7 @@ fn request_part_from_external_storage( shard_id, part_id: Some(part_id), result, + provenance: PartProvenance::External, }) { Ok(_) => tracing::debug!(target: "sync", %shard_id, ?part_id, "Download response sent to processing thread."), Err(err) => { @@ -1262,6 +1288,33 @@ fn request_part_from_peers( ); } +/// Takes a received state part and attempts to validate and store the part. +/// Used both for parts downloaded from external storage and parts received from peers. +/// This process is slow and should only occur on state_parts_future_spawner. +/// Returns a result to be passed back via state_parts_mpsc_tx. +fn try_validate_and_store_received_state_part( + part_id: PartId, + shard_id: ShardId, + sync_hash: CryptoHash, + state_root: StateRoot, + data: Vec, + runtime_adapter: Arc, +) -> Result { + if runtime_adapter.validate_state_part(&state_root, part_id, &data) { + let mut store_update = runtime_adapter.store().store_update(); + borsh::to_vec(&StatePartKey(sync_hash, shard_id, part_id.idx)) + .and_then(|key| { + store_update.set(DBCol::StateParts, &key, &data); + store_update.commit() + }) + .map_err(|err| format!("Failed to store a state part. err={err:?}, state_root={state_root:?}, part_id={part_id:?}, shard_id={shard_id:?}")) + .map(|_| data.len() as u64) + .map(|part_length| StateSyncFileDownloadResult::StatePart { part_length }) + } else { + Err(format!("validate_state_part failed. state_root={state_root:?}, part_id={part_id:?}, shard_id={shard_id}")) + } +} + /// Works around how data requests to external storage are done. /// This function investigates if the response is valid and updates `done` and `error` appropriately. /// If the response is successful, then the downloaded state file was written to the DB. @@ -1271,23 +1324,28 @@ fn process_download_response( download: Option<&mut DownloadStatus>, file_type: String, download_result: Result, + provenance: PartProvenance, ) { match download_result { Ok(data_len) => { // No error, aka Success. - metrics::STATE_SYNC_EXTERNAL_PARTS_DONE - .with_label_values(&[&shard_id.to_string(), &file_type]) - .inc(); - metrics::STATE_SYNC_EXTERNAL_PARTS_SIZE_DOWNLOADED - .with_label_values(&[&shard_id.to_string(), &file_type]) - .inc_by(data_len); + if provenance == PartProvenance::External { + metrics::STATE_SYNC_EXTERNAL_PARTS_DONE + .with_label_values(&[&shard_id.to_string(), &file_type]) + .inc(); + metrics::STATE_SYNC_EXTERNAL_PARTS_SIZE_DOWNLOADED + .with_label_values(&[&shard_id.to_string(), &file_type]) + .inc_by(data_len); + } download.map(|download| download.done = true); } // The request failed without reaching the external storage. Err(err) => { - metrics::STATE_SYNC_EXTERNAL_PARTS_FAILED - .with_label_values(&[&shard_id.to_string(), &file_type]) - .inc(); + if provenance == PartProvenance::External { + metrics::STATE_SYNC_EXTERNAL_PARTS_FAILED + .with_label_values(&[&shard_id.to_string(), &file_type]) + .inc(); + } tracing::debug!(target: "sync", ?err, %shard_id, %sync_hash, ?file_type, "Failed to get a file from external storage, will retry"); download.map(|download| download.done = false); } @@ -1373,6 +1431,9 @@ mod test { }; run_actix(async { + let state_parts_future_spawner = + ActixArbiterHandleFutureSpawner(Arbiter::new().handle()); + state_sync .run( &None, @@ -1384,9 +1445,9 @@ mod test { vec![0], &noop().into_sender(), &noop().into_sender(), - &ActixArbiterHandleFutureSpawner(Arbiter::new().handle()), + &state_parts_future_spawner, false, - runtime, + runtime.clone(), ) .unwrap(); @@ -1433,6 +1494,8 @@ mod test { 0, state_response, &mut chain, + &state_parts_future_spawner, + runtime, ); let download = new_shard_sync.get(&0).unwrap(); From 5901601a3380d684b01f4a9b76a1c8e66ed2c48e Mon Sep 17 00:00:00 2001 From: Marcelo Diop-Gonzalez Date: Fri, 11 Oct 2024 16:23:38 +0100 Subject: [PATCH 2/2] 2.3.0-rc.3 --- Cargo.lock | 178 ++++++++++++++++++++++++++--------------------------- Cargo.toml | 2 +- 2 files changed, 90 insertions(+), 90 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 318d28e62a2..e82e579029e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1321,7 +1321,7 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "chainsync-loadtest" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "anyhow", @@ -1485,7 +1485,7 @@ dependencies = [ [[package]] name = "cold-store-tool" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "borsh 1.2.0", @@ -1518,7 +1518,7 @@ dependencies = [ [[package]] name = "congestion-model" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "bytesize", "chrono", @@ -2360,7 +2360,7 @@ dependencies = [ [[package]] name = "estimator-warehouse" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "chrono", @@ -2762,7 +2762,7 @@ dependencies = [ [[package]] name = "genesis-csv-to-json" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "chrono", "clap", @@ -2779,7 +2779,7 @@ dependencies = [ [[package]] name = "genesis-populate" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "borsh 1.2.0", "clap", @@ -3194,7 +3194,7 @@ dependencies = [ [[package]] name = "indexer-example" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "anyhow", @@ -3269,7 +3269,7 @@ dependencies = [ [[package]] name = "integration-tests" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "actix-rt", @@ -3418,7 +3418,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "keypair-generator" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "clap", "near-crypto", @@ -3852,7 +3852,7 @@ dependencies = [ [[package]] name = "mock-node" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "actix-rt", @@ -3922,7 +3922,7 @@ dependencies = [ [[package]] name = "near-actix-test-utils" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix-rt", "near-store", @@ -3930,7 +3930,7 @@ dependencies = [ [[package]] name = "near-amend-genesis" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "borsh 1.2.0", @@ -3949,7 +3949,7 @@ dependencies = [ [[package]] name = "near-async" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "derive-enum-from-into", @@ -3970,7 +3970,7 @@ dependencies = [ [[package]] name = "near-async-derive" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "pretty_assertions", "proc-macro2", @@ -3980,7 +3980,7 @@ dependencies = [ [[package]] name = "near-cache" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "bencher", "lru 0.12.3", @@ -3989,7 +3989,7 @@ dependencies = [ [[package]] name = "near-chain" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "assert_matches", @@ -4040,7 +4040,7 @@ dependencies = [ [[package]] name = "near-chain-configs" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "bytesize", @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "near-chain-primitives" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "near-crypto", "near-primitives", @@ -4075,7 +4075,7 @@ dependencies = [ [[package]] name = "near-chunks" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "assert_matches", @@ -4108,7 +4108,7 @@ dependencies = [ [[package]] name = "near-chunks-primitives" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "near-chain-primitives", "near-primitives", @@ -4116,7 +4116,7 @@ dependencies = [ [[package]] name = "near-client" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "actix-rt", @@ -4175,7 +4175,7 @@ dependencies = [ [[package]] name = "near-client-primitives" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "chrono", @@ -4196,7 +4196,7 @@ dependencies = [ [[package]] name = "near-config-utils" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "json_comments", @@ -4206,7 +4206,7 @@ dependencies = [ [[package]] name = "near-crypto" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "blake2", "bolero", @@ -4234,7 +4234,7 @@ dependencies = [ [[package]] name = "near-database-tool" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "borsh 1.2.0", @@ -4260,7 +4260,7 @@ dependencies = [ [[package]] name = "near-dyn-configs" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "near-chain-configs", @@ -4278,7 +4278,7 @@ dependencies = [ [[package]] name = "near-epoch-manager" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "borsh 1.2.0", "chrono", @@ -4304,7 +4304,7 @@ dependencies = [ [[package]] name = "near-flat-storage" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "borsh 1.2.0", @@ -4322,14 +4322,14 @@ dependencies = [ [[package]] name = "near-fmt" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "near-primitives-core", ] [[package]] name = "near-fork-network" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "anyhow", @@ -4355,7 +4355,7 @@ dependencies = [ [[package]] name = "near-indexer" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "anyhow", @@ -4381,7 +4381,7 @@ dependencies = [ [[package]] name = "near-indexer-primitives" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "near-primitives", "serde", @@ -4390,7 +4390,7 @@ dependencies = [ [[package]] name = "near-jsonrpc" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "actix-cors", @@ -4420,7 +4420,7 @@ dependencies = [ [[package]] name = "near-jsonrpc-adversarial-primitives" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "near-primitives", "serde", @@ -4428,7 +4428,7 @@ dependencies = [ [[package]] name = "near-jsonrpc-client" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix-http", "awc", @@ -4441,7 +4441,7 @@ dependencies = [ [[package]] name = "near-jsonrpc-fuzz" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "arbitrary", @@ -4459,7 +4459,7 @@ dependencies = [ [[package]] name = "near-jsonrpc-primitives" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "arbitrary", "near-chain-configs", @@ -4475,7 +4475,7 @@ dependencies = [ [[package]] name = "near-jsonrpc-tests" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "awc", @@ -4499,7 +4499,7 @@ dependencies = [ [[package]] name = "near-mainnet-res" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "near-account-id", "near-chain-configs", @@ -4509,7 +4509,7 @@ dependencies = [ [[package]] name = "near-mirror" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "actix-rt", @@ -4554,7 +4554,7 @@ dependencies = [ [[package]] name = "near-network" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "anyhow", @@ -4615,7 +4615,7 @@ dependencies = [ [[package]] name = "near-o11y" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "base64 0.21.0", @@ -4644,7 +4644,7 @@ dependencies = [ [[package]] name = "near-parameters" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "assert_matches", "borsh 1.2.0", @@ -4664,7 +4664,7 @@ dependencies = [ [[package]] name = "near-performance-metrics" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "bitflags 1.3.2", @@ -4679,7 +4679,7 @@ dependencies = [ [[package]] name = "near-performance-metrics-macros" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "quote", "syn 2.0.70", @@ -4687,7 +4687,7 @@ dependencies = [ [[package]] name = "near-ping" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix-web", "anyhow", @@ -4705,7 +4705,7 @@ dependencies = [ [[package]] name = "near-pool" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "borsh 1.2.0", "near-crypto", @@ -4716,7 +4716,7 @@ dependencies = [ [[package]] name = "near-primitives" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "arbitrary", "assert_matches", @@ -4764,7 +4764,7 @@ dependencies = [ [[package]] name = "near-primitives-core" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "arbitrary", "base64 0.21.0", @@ -4786,7 +4786,7 @@ dependencies = [ [[package]] name = "near-replay-archive-tool" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "borsh 1.2.0", @@ -4808,7 +4808,7 @@ dependencies = [ [[package]] name = "near-rosetta-rpc" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "actix-cors", @@ -4841,14 +4841,14 @@ dependencies = [ [[package]] name = "near-schema-checker-core" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "inventory", ] [[package]] name = "near-schema-checker-lib" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "inventory", "near-schema-checker-core", @@ -4857,7 +4857,7 @@ dependencies = [ [[package]] name = "near-schema-checker-macro" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "proc-macro2", "quote", @@ -4866,11 +4866,11 @@ dependencies = [ [[package]] name = "near-stable-hasher" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" [[package]] name = "near-state-parts" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "chrono", @@ -4889,7 +4889,7 @@ dependencies = [ [[package]] name = "near-state-parts-dump-check" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "actix-web", @@ -4911,11 +4911,11 @@ dependencies = [ [[package]] name = "near-stdx" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" [[package]] name = "near-store" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "actix-rt", @@ -4963,7 +4963,7 @@ dependencies = [ [[package]] name = "near-telemetry" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "awc", @@ -4981,7 +4981,7 @@ dependencies = [ [[package]] name = "near-test-contracts" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "arbitrary", "rand", @@ -4992,7 +4992,7 @@ dependencies = [ [[package]] name = "near-time" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "serde", "serde_json", @@ -5002,7 +5002,7 @@ dependencies = [ [[package]] name = "near-undo-block" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "chrono", @@ -5018,7 +5018,7 @@ dependencies = [ [[package]] name = "near-vm-compiler" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "enumset", "finite-wasm", @@ -5034,7 +5034,7 @@ dependencies = [ [[package]] name = "near-vm-compiler-singlepass" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "dynasm 2.0.0", "dynasmrt 2.0.0", @@ -5055,7 +5055,7 @@ dependencies = [ [[package]] name = "near-vm-compiler-test-derive" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "pretty_assertions", "proc-macro2", @@ -5066,7 +5066,7 @@ dependencies = [ [[package]] name = "near-vm-engine" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "backtrace", "cfg-if 1.0.0", @@ -5087,7 +5087,7 @@ dependencies = [ [[package]] name = "near-vm-runner" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "arbitrary", @@ -5161,7 +5161,7 @@ dependencies = [ [[package]] name = "near-vm-runner-fuzz" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "arbitrary", "libfuzzer-sys", @@ -5175,7 +5175,7 @@ dependencies = [ [[package]] name = "near-vm-test-api" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -5204,14 +5204,14 @@ dependencies = [ [[package]] name = "near-vm-test-generator" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", ] [[package]] name = "near-vm-types" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "bolero", "indexmap 1.9.2", @@ -5222,7 +5222,7 @@ dependencies = [ [[package]] name = "near-vm-vm" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "backtrace", "cc", @@ -5242,7 +5242,7 @@ dependencies = [ [[package]] name = "near-vm-wast" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "near-vm-test-api", @@ -5252,7 +5252,7 @@ dependencies = [ [[package]] name = "near-wallet-contract" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "near-primitives-core", @@ -5261,7 +5261,7 @@ dependencies = [ [[package]] name = "nearcore" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "actix-rt", @@ -5328,7 +5328,7 @@ dependencies = [ [[package]] name = "neard" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "anyhow", @@ -5399,7 +5399,7 @@ dependencies = [ [[package]] name = "node-runtime" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "assert_matches", "borsh 1.2.0", @@ -6319,7 +6319,7 @@ dependencies = [ [[package]] name = "protocol-schema-check" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "inventory", "near-chain", @@ -6648,7 +6648,7 @@ dependencies = [ [[package]] name = "restaked" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "clap", "integration-tests", @@ -6753,7 +6753,7 @@ dependencies = [ [[package]] name = "runtime-params-estimator" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "borsh 1.2.0", @@ -6794,7 +6794,7 @@ dependencies = [ [[package]] name = "runtime-tester" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "bolero", "cpu-time", @@ -6821,7 +6821,7 @@ dependencies = [ [[package]] name = "runtime-tester-fuzz" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "libfuzzer-sys", "runtime-tester", @@ -7440,7 +7440,7 @@ dependencies = [ [[package]] name = "speedy_sync" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "borsh 1.2.0", "clap", @@ -7482,7 +7482,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "state-viewer" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "actix", "anyhow", @@ -7532,7 +7532,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "storage-usage-delta-calculator" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "near-chain-configs", @@ -7547,7 +7547,7 @@ dependencies = [ [[package]] name = "store-validator" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "clap", "near-chain", @@ -7724,7 +7724,7 @@ dependencies = [ [[package]] name = "testlib" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "near-chain", "near-chain-configs", @@ -7737,7 +7737,7 @@ dependencies = [ [[package]] name = "themis" -version = "2.3.0-rc.2" +version = "2.3.0-rc.3" dependencies = [ "anyhow", "cargo_metadata", diff --git a/Cargo.toml b/Cargo.toml index d0ba7fc448a..7c4f74feb2f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace.package] -version = "2.3.0-rc.2" # managed by cargo-workspaces, see below +version = "2.3.0-rc.3" # managed by cargo-workspaces, see below authors = ["Near Inc "] edition = "2021" rust-version = "1.81.0"